我对如何分析嵌套在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
}
答案 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)时间。