确定while循环的迭代次数

时间:2016-04-17 20:10:45

标签: java algorithm loops iteration time-complexity

我有来自计算机科学课的代码:

int input=15;
while (input < n ) { input = input *3;}

此代码具有log3(n / 15)循环的上限。我们怎样才能获得这个结果?

2 个答案:

答案 0 :(得分:3)

我认为他正在谈论复杂性的分析解决方案。我认为它是这样的(很久以前我做了logaritms):

15 * 3^x = n   // x would be the number of iterations until value reaches n

ln(15*(3^x)) = ln(n)
ln(15) + ln(3^x) = ln(n)
ln(15) + x*ln(3) = ln(n)
x = (ln(n) - ln(15)) / ln(3)
x = ln(n/15) / ln(3)
x = log3(n/15) / log3(3)
x = log3(n/15)

答案 1 :(得分:0)

对于n的值,代码循环k次?

必须是15&lt; n,和15 * 3&lt; n和15 * 3 * 3&lt; n和....和15 * 3 ^(k-1)&lt; ñ。此外,它必须是15 * 3 ^ k> = n(否则代码将至少再做一个循环)。

即,3 ^ k&gt; = n / 15&gt; 3 ^(k-1),并记录日志(基数3),k> = log3(n / 15)> K-1。

因此k是大于或等于log3(n / 15)的最小整数,或等效地:k = ceil(log3(n / 15))。