for 循环的大 O 表示法简单问题

Posted

技术标签:

【中文标题】for 循环的大 O 表示法简单问题【英文标题】:Big O notation easy problem with for loops 【发布时间】:2022-01-13 22:38:37 【问题描述】:

以下代码片段的 Big-O 复杂度是多少?

const int N = 3;

char arr[N][N][3];

for (int i=0; i<N; i++)

        for(int j=0; j<N; j++)

                for(int k=0; k<3; k++)

                

                        cout<<”Initial Value: “;

                        cin>>arr[ i ][ j ][ k ];

                

我的答案是 O(N^3) 虽然我不确定,因为最后一个 for 循环。有人可以澄清一下吗?

【问题讨论】:

假设 N 可以变化,它应该是 O(N^2):O(1) + N * N * (3 * O(1)) = O(1 + 3N^2) = O(N^2) 【参考方案1】:

上述代码的大 O 复杂度为 O(N^3)。即使您的最后一个循环也具有与 N 相同的值,即 3。 所以是的,你是对的。

【讨论】:

以上是关于for 循环的大 O 表示法简单问题的主要内容,如果未能解决你的问题,请参考以下文章

计算嵌套循环的大 O

使用递归树的大 O 表示法分析

为 for 循环确定不同的大 O 复杂度

大O表示法

计算使用 C++ std 函数而不是 for 循环的大 O

被调用函数的大 O 表示法的时间复杂度