家庭作业:如何计算此函数的时间复杂度?

问题描述 投票:0回答:1
void func(int n){
    int i=1, k=n;
    while (i<=k){
        k=k/2;
        i = i*2;
    }
}

如何计算此函数的时间复杂度?我知道i = 1,k = n的赋值需要两个基本步骤,并且除以k的值并乘以i的值也需要两个基本步骤,但是因为i和k的值呈指数增加和减少,时间复杂度是O(log base 4 N)还是O(log base 2 sqrt(N))?

time-complexity big-o complexity-theory
1个回答
2
投票

您的答案是O(log√n),在注释中@Eraklon说它是O((log 2 n)/ 2),而@ matri70boss说它是O(log 4 n)。你们三个都是正确的,但最简单的答案是O(log n)。

  • log√n= logn 0.5 = 0.5 logn,当我们使用大O表示法书写时,我们将常数因子0.5丢弃。
  • [log 2 n)/ 2 = [logn] /(2log2),[1 / log2]是我们可以舍弃的另一个常数。
  • 同样,log 4 n =(logn)/(log4),我们可以舍弃常数因子1 /(log4)。
© www.soinside.com 2019 - 2024. All rights reserved.