Algorithm 这个算法的大O

Algorithm 这个算法的大O,algorithm,analysis,Algorithm,Analysis,这个算法的最大目标是什么?在我看来,O(n^3)^是指数 A() { int i,j,k,n; for(i=1;i<=n;i++) { for(j=1;j<=i^2;j++) { for(k=1;k<=n/2;k++) { statement ; } } } } A() { int i,j,k

这个算法的最大目标是什么?在我看来,O(n^3)
^
是指数

A()
{
    int i,j,k,n;

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=i^2;j++)
        {
            for(k=1;k<=n/2;k++)
            {
                statement ;
            }
        }
    }
}
A()
{
int i,j,k,n;
对于(i=1;i它似乎是
O(n^2*i^2)
。 如果
i^2它似乎是
O(n^2*i^2)

如果
i^2C操作符执行异或运算,那么中间的循环在第二次循环中退出。这使得它的运行时保持不变

变量n是未初始化的,所以我们不能真正说出最外面或最里面的循环将做什么

如果n是常量,则整个运行时是常量(1的顺序)
如果传入n,则运行时间为n的平方,因为中间循环的时间是恒定的。

C运算符^执行异或,因此中间循环在第二次传入时退出。这使其运行时间恒定

变量n是未初始化的,所以我们不能真正说出最外面或最里面的循环将做什么

如果n是常量,则整个运行时是常量(1的顺序) 如果传入n,则运行时间为n的平方,因为中间的循环具有恒定的时间。

否,它是
O(n^4)

说明:

第一次,最外层循环运行,第二次循环运行
1^2次,最内层循环运行
n/2次

总体
1^2.n/2

第二次,最外层循环运行,第二次循环运行
2^2次,最内层循环运行
n/2次

总体
2^2.n/2

类似地,直到
n^2.n/2
i
的最后一次迭代中(最外层循环)

求和:
(n/2)(1^2+2^2+3^2+…n^2)
=
n/2。[n(n+1)(2n+1)/6]
(使用第一个
n
数字的平方和属性)

它是
O(n^4)

不,它是
O(n^4)

说明:

第一次,最外层循环运行,第二次循环运行
1^2次,最内层循环运行
n/2次

总体
1^2.n/2

第二次,最外层循环运行,第二次循环运行
2^2次,最内层循环运行
n/2次

总体
2^2.n/2

类似地,直到
n^2.n/2
i
的最后一次迭代中(最外层循环)

求和:
(n/2)(1^2+2^2+3^2+…n^2)
=
n/2。[n(n+1)(2n+1)/6]
(使用第一个
n
数字的平方和属性)


这是
O(n^4)

无法真正计算由于语法错误而无法运行的例程的大O时间。您似乎正在使用
^
来引用指数运算符。明确说明这一点会很有帮助,因为
^
在C中引用XOR,并且您的示例似乎遵循C语法。无法真正计算routin的大O时间由于语法错误而无法运行的e。您似乎正在使用
^
来引用指数运算符。明确说明这一点会很有帮助,因为
^
在C中引用XOR,并且您的示例似乎遵循C语法。算法显示
i@KyleA是的,您是对的。我没有注意。它是O(n^4)算法显示
i@KyleA是的,你是对的。我没有注意。它是O(n^4)。它怎么可能是
n^2*n/2
但是,第一个循环呢?这使得它
n*n^2*n/2
@Arif No-Arif,意识到我写的是针对
i
(最外层循环)的每次迭代的.在上一次迭代中,当
i
达到
n
时,中间的循环运行
n^2
次,最里面的循环运行
n/2
次。因此,总的来说,只有上一次迭代才是
n^2*n/2
。基本上,我已经将问题分解为
i
的每一次迭代,然后将它们相加到了解复杂性。它怎么可能是
n^2*n/2
但是,第一个循环呢?这使得它
n*n^2*n/2
@Arif没有Arif,要知道我写的是针对
I
的每个迭代(最外层循环).在上一次迭代中,当
i
达到
n
时,中间的循环运行
n^2
次,最里面的循环运行
n/2
次。因此,总的来说,只有上一次迭代才是
n^2*n/2
。基本上,我已经将问题分解为
i
的每一次迭代,然后将它们相加到了解复杂性。