Theta Notation和Worst Case运行时嵌套循环

时间:2016-03-07 21:51:47

标签: algorithm performance time-complexity nested-loops big-theta

这是我需要分析的代码:

i = 1
while i < n
  do
    j = 0;
    while j <= i
       do
          j = j + 1
    i = 2i

所以,第一个循环应该运行log(2,n),最里面的循环应该运行log(2,n)*(i + 1),但我很确定这是错误的。 我如何使用theta符号来证明它?

2 个答案:

答案 0 :(得分:3)

考虑这一点的直观方法是查看内部循环对外部循环变量i 的固定值执行了多少工作。它显然与 i 本身一样多。因此,如果 i 的值为256,那么您将多次执行j = j + 1

因此,完成的总工作量是 i 在外部循环执行中所采用的值的总和。该变量正在迅速增加以赶上 n 。由i = 2i(它应该是i = 2*i)给出的值将类似于:2, 4, 8, 16, ...,因为我们在i = 1时开始内循环的2次迭代。这是一个几何系列:a, ar, ar^2 ... a = 1r = 2。如您所知,最后一个字词将是n,系列中会有log2 n个字词。这是几何系列的简单总结。

对于此算法,最坏情况或最佳情况没有多大意义,因为在这种情况下,输入没有不同的排列,只是一个数字n。当特定输入(例如,特定数字序列)影响算法的运行时间时,最佳情况或最坏情况是相关的。

然后,运行时间是sum of geometric seriesa.(r^num_terms - 1)/(r-1)):

T(n) = 2 + 4 + ... 2^(log2 n)
     = 2 . (2^log2 n - 1)
     = 2 . (n - 1)
     ⩽ 3n = O(n)

因此,你不能做超过n的常数倍的工作。因此,该算法的运行时间为O(n)

你不能做一些小于n的某个(其他)常数倍的工作,因为你必须经历内循环中的增量,如上所示。因此,该算法的运行时间也≥c.n,即它是Ω(n)

这意味着此算法的运行时间为Θ(n)

答案 1 :(得分:0)

你不能在最后的表达中使用i;只有n

每次到达时,您都可以轻松看到内循环执行i次。听起来你已经发现了i可以拥有的不同价值观。因此,将这些值加起来,就可以得到总的工作量。