使用if-else嵌套while循环的时间复杂度

时间:2016-01-27 17:41:57

标签: while-loop time-complexity

我对如何分析嵌套在while循环中的时间复杂性感到困惑,这种情况分为奇数和偶数情况。任何人都可以帮忙解释如何处理这种情况吗?

     i = 1 
     while (i < n) { 
       k = i 
       while ( k < n ) {
         if ( k % 2 == 1 ) 
             k ++ 
         else 
             k = k + 0.01*n
       }
       i = i + 0.1*n
     }

1 个答案:

答案 0 :(得分:0)

因此,在这样的问题中,0.01和0.1的因素起着重要作用。

首先让我们考虑内部while循环,如果k是奇数,我们将k递增1.如果k是偶数,我们将k递增n的百分之一。人类迭代如何在循环中运行?

显然,如果所有迭代都是type-1(奇数情况),内部while循环将运行nk次,类似地,如果所有迭代都是type-2(即使是大小写),内部while循环将运行至少a 100次(因为我们每次将k的值增加百分之一的n)。

给定k的值,内部while循环的迭代次数为: MAX(N-K,100)。从现在开始,我们将假设n-k的值总是大于100,而不失一般性。

好的,外循环如何迭代?在外循环的每次迭代中,i的值每次增加十分之一的n,因此外部while将最多运行10次。

明确运行时间并计算总运行时间:

Running time for first iteration of outer loop  :   n-k 
Running time for second iteration of outer loop : + n-(k+0.1*n) 
                                                  + n-(k+0.2*n) 
                                                  ... 
                                                  + n-(k+0.9*n)
                                                  -----------
                                                = 10n-10k-(4.5)n

插入k = 1(因为这是k的起始值), 10n-10-4.5n = 5.5 n -10 = O(n)

因此,复杂性是O(n)时间。