【发布时间】:2022-01-06 06:30:16
【问题描述】:
#include<iostream>
using namespace std;
int main()
{
int i=1,n;
cin>>n;
for(i;i<=n;i=i*2)
printf("hey");
return 0;
}
我很困惑上述代码的时间复杂度是 O(log n) 还是 O(sqrt n)。 我认为它是 O(sqrt n),因为 n=5 和 sqrt(5)~3 的迭代次数为 3,但有些答案显示为 O(logn)。请解释...
【问题讨论】:
-
你怎么看?为什么你这么想?如果我们知道您的想法,那么我们就更容易指出错误(如果有的话),或者确认您的想法。
-
老兄,你正在迭代循环,所以它只有 O(n/2) 或通常 O(N)。
-
对不起..我已经编辑了,请再看一遍。
-
int i = n;行 beforen的值充其量是没有意义的,最坏的情况是会导致 UB。将其移到cin >> n;之后,循环将是 O(1)(如果 n > 0)或将永远运行(如果 n
标签: c++ time-complexity