C 当我们使用while循环时,找出程序的复杂性
以下代码的时间复杂度是多少C 当我们使用while循环时,找出程序的复杂性,c,data-structures,time-complexity,C,Data Structures,Time Complexity,以下代码的时间复杂度是多少 intfun1(intn){ int i=1; 整数计数=0; 而(ii=8 迭代四: i=8*2=>i=16 ..… ..… 等等 假设n是一个等于2k的数字。这意味着,循环将执行k次。在kth步骤: 2k=n 在两侧取对数(以2为底): 对数(2k)=对数(n) k log(2)=log(n) k=对数(n)[作为对数2(基数2)=1] 因此,时间复杂度是O(log(n))。它的log n(基数2)@Eraklon你能给我解释一下吗,这将是一个很大的帮助i在迭代的
intfun1(intn){
int i=1;
整数计数=0;
而(i
所有句子都是O(1),循环会记录(n)(以2为基数)的迭代,因为每次迭代时i
都会加倍(i=i*2
),所以它的日志(n)(以2为基数)
您可以在这里找到更多信息。上述代码的时间复杂度为:
O(log(n))
intfun1(intn){
int i=1;
整数计数=0;
//这里我从1运行到n
//但我每次都加倍
//i=1 2 4 8 16…n
//因此O(对数(n))
而(i
假设n=16==2^4
在这种情况下,循环将只运行4次
==1 2 4 8==log(16)
查看代码的这一部分:
while (i < n) {
count++;
i = i * 2;
}
while(i
在每次迭代中,i
乘以2
最初,i
是1
迭代一:
i=1*2代码>=>i=2
迭代二:
i=2*2代码>=>i=4
迭代三:
i=4*2代码>=>i=8
迭代四:
i=8*2代码>=>i=16
..…
..…
等等
假设n
是一个等于2k的数字。这意味着,循环将执行k次。在k
th步骤:
2k=n
在两侧取对数(以2为底):
对数(2k)=对数(n)
k log(2)=log(n)
k=对数(n)[作为对数2(基数2)=1]
因此,时间复杂度是O(log(n))。它的log n(基数2)@Eraklon你能给我解释一下吗,这将是一个很大的帮助i
在迭代的和处本质上是2^count
。如果n
将是1024,那么在10次迭代之后i
也将是1024,因此循环将退出。log2(1024)=10。
while (i < n) {
count++;
i = i * 2;
}