我有来自计算机科学课的代码:
int input=15;
while (input < n ) { input = input *3;}
此代码具有log3(n / 15)循环的上限。我们怎样才能获得这个结果?
答案 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))。