C++ 使用3个嵌套循环的以下代码的时间复杂性
有人能在下面解释一下这段代码的时间复杂度吗C++ 使用3个嵌套循环的以下代码的时间复杂性,c++,algorithm,time,time-complexity,C++,Algorithm,Time,Time Complexity,有人能在下面解释一下这段代码的时间复杂度吗 int sum,i,j,k,n; sum = 0; cin>>n; int arr * = new int[n]; for (i=1;i<n;i=i*2){ cin>>arr[i]; for (j=0;j<n;++j) for (k=1;k<=n;k=k*2) sum+=arr[j]; } int和,i,j,k,n; 总和=0; cin>>n; int arr*
int sum,i,j,k,n;
sum = 0;
cin>>n;
int arr * = new int[n];
for (i=1;i<n;i=i*2){
cin>>arr[i];
for (j=0;j<n;++j)
for (k=1;k<=n;k=k*2)
sum+=arr[j];
}
int和,i,j,k,n;
总和=0;
cin>>n;
int arr*=新的int[n];
对于(i=1;i>arr[i];
for(j=0;jfor
三个for循环的边界似乎没有任何相互依赖性。因此,我们应该能够通过将三个循环的复杂性相乘来计算出总体运行时间
i
和k
中的循环是O(lgN)
,因为它们在每次迭代时将循环计数器加倍。j
中的中间循环是O(N)
。这将产生O(N*lgN*lgN)
作为整体复杂性。不,不,不是。@Apoorvasahay我不同意,因为I
和k
循环在我看来是O(lgN)
的。代码有未定义的行为。数组没有初始化,所以arr[j]
访问未初始化的值。我想我明白了。谢谢