如何计算算法的最坏情况时间复杂度

how to compute the worst case time complexity of a algorithm

你如何计算这个算法的最坏情况时间复杂度

for j = 1 to i do
     for k = 1 to j do 
         print(i,j,k)

由于我们没有条件会影响此算法的运行时间,因此复杂度将保持不变:始终具有相同的时间复杂度。

让我们保持简单。

如果我们只考虑内循环中的语义重要指令,我们可以计算复杂度如下:

每个外循环 运行 将下一个内循环 运行 计数加一。

我们会有 1 + 2 + 3 + 4 + 5 + ... + i-1 + i 循环 运行s,每次外循环结束,内循环都会比之前多执行一次。

现在我们尝试概括这个表达式。

我们将初始术语加倍以另一种形式表示它,您会明白为什么。

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) + (1 + 2 + 3 + 4 + 5 + ... + i-1 + i)

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1+i) + (2 + (i-1)) + (3 + (i-2)) + ... + ((i-1) + 2) + (i+1)

现在我们可以看到在这个表示中我们有多个相同的项。

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = (1+i) + (1+i) + (1+i) + ... + (1+i) + (1+i)

2 * (1 + 2 + 3 + 4 + 5 + ... + i-1 + i) = i*(1+i)

由于我们的初始复杂度仍然是原来的两倍,因此我们需要除以 2,从而得到封闭形式的表达式。

1 + 2 + 3 + 4 + 5 + ... + i-1 + i = (i*(1+i))/2

导致我们的复杂性O(i(i+1)/2) => O(i^2)

我们可以这样做,因为在 O() 中给定一个多项式,您可以简单地将其替换为 x^highest_power

我们不处理控制结构本身强制处理的指令;我不认为这是任务。如果您愿意,请告诉我。