你好,对不起我英语不好。
我仍在尝试估计下面算法的复杂性。
有:
int f = 1, n, x, licznik = 0;
printf("Variable of n: ");
scanf("%d", &n);
printf("Variable of x: ");
scanf("%d", &x);
while(n > 0) {
if(n%2 == 0) {
x = x*x;
n = n/2;
licznik++;
}
else {
f = f*x;
n = n-1;
licznik++;
}
}
我的观察:
当n=/then/licznik=
n=0
l=0
n=10个
l=5
n=100
l=9
n=1000
l=15
n=10000
l=18
n=1000万
l=26
所以它还在生长,但很慢。所以它看起来像一个“log n”函数。
这是一个很好的答案,该算法的时间复杂度为O(log n)?最好的选择和最坏的选择呢?谢谢你的帮助。
注:“licznik”是一些乘法。
最佳答案
好吧,让我们再看一看。。
在您的算法中,一旦值halved
并且下次它的decremented
乘以1。。因为减量对除法几乎可以忽略不计(对于非常大的值)。。我们可以认为值(大约)只是在2次迭代中被分割一次。然后时间复杂度变为O(2Logn)。这真的是O(洛根)。。