Algorithm 时间复杂度是多少?

Algorithm 时间复杂度是多少?,algorithm,big-o,time-complexity,runtime-compilation,Algorithm,Big O,Time Complexity,Runtime Compilation,以下函数的时间复杂度是多少 for(int i = 0; i < a.size; i++) { for(int j = i; j < a.size; i++) { // } } 但当我解这个公式时,结果是 n^2 - n + n^2 - 2n + n^2 - 3n + ... + n^2 - n^2 这似乎根本不正确。谁能确切地告诉我如何解决这个问题,我错在哪里。那就是O(n^2)。如果您考虑的是“ i=a

以下函数的时间复杂度是多少

    for(int i = 0; i < a.size; i++) {
        for(int j = i; j < a.size; i++) {
            //
        }
    }
但当我解这个公式时,结果是

n^2 - n + n^2 - 2n + n^2 - 3n + ... + n^2 - n^2
这似乎根本不正确。谁能确切地告诉我如何解决这个问题,我错在哪里。

那就是
O(n^2)
。如果您考虑的是“<代码> i=a siz())1 < /代码>,并且您向后工作(<代码> i=a siz())2 < /COD>,<代码> i=A级(3—< /代码>等),您将看到以下迭代次数的总和,其中“代码> n=Assith./P>
1 + 2 + 3 + 4 + ... + n
这个系列的总和是
n(n+1)/2
,也就是
O(n^2)
。请注意,big-O表示法忽略常数,并在应用于多项式函数时取最高多项式幂。

O(n^2)
。如果您考虑的是“<代码> i=a siz())1 < /代码>,并且您向后工作(<代码> i=a siz())2 < /COD>,<代码> i=A级(3—< /代码>等),您将看到以下迭代次数的总和,其中“代码> n=Assith./P>
1 + 2 + 3 + 4 + ... + n

这个系列的总和是
n(n+1)/2
,也就是
O(n^2)
。请注意,big-O表示法忽略常数,并在应用于多项式函数时取最高多项式幂。

是的,迭代次数严格小于
n^2
,但仍然是
Θ(n^2)
。对于任何
k2
,它最终将大于
n^k


(作为旁注,计算机科学家经常说big-O,其实他们的意思是大θ(Θ)。从技术上讲,你所看到的几乎所有算法都有
O(n!)
运行时间;所有合理的算法的运行时间增长速度都不快于
n!
。但是说复杂性是
O(n!)
如果它也是
O(n log n)
,那么根据某种格赖斯格言,我们假设当有人说一个算法的复杂性是
O(f(x))
f(x)
尽可能小。)

是的,迭代次数严格小于
n^2
,但仍然是
Θ(n^2)
。对于任何
k2
,它最终将大于
n^k

(作为旁注,计算机科学家经常说big-O,其实他们的意思是大θ(Θ)。从技术上讲,你所看到的几乎所有算法都有
O(n!)
运行时间;所有合理的算法的运行时间增长速度都不快于
n!
。但是说复杂性是
O(n!)
如果它也是
O(n log n)
,那么根据某种格赖斯格言,我们假设当有人说一个算法的复杂性是
O(f(x))
f(x)
尽可能小。)

它将运行:

1 + 2 + 3 + .. + n
这是
1/2n(n+1)
它给了我们
O(n^2)

Big-O表示法只保留主导项,忽略常量

当且仅当主导项不同时,Big-O仅用于比较使用相同复杂性分析标准的问题的相同变体上的算法

如果主导项相同,则需要比较较大的θ或时间复杂度,这将显示较小的差异

示例

Time(A) = 1/2 n(n+1) ~ O(n^2)

Time(B) = n^2 ~ O(n^2)

O(A) = O(B)

T(A) < T(B)
A

B

我们有

Time(A) = 1/2 n(n+1) ~ O(n^2)

Time(B) = n^2 ~ O(n^2)

O(A) = O(B)

T(A) < T(B)
将打印以下内容:

(1+n) + (1+(n-1)) + .. + (1+3) + (1+2) + (1+1) + (1+0)

n+1 + n + n-1 + .. + 3 + 2 + 1

1 + 2 + 3 + .. + n + n+1

1/2 n(n+1) + (n+1)

1/2 n^2 + 1/2 n + n + 1

1/2 n^2 + 3/2 n + 1
它将运行以下时间:

1 + 2 + 3 + .. + n
这是
1/2n(n+1)
它给了我们
O(n^2)

Big-O表示法只保留主导项,忽略常量

当且仅当主导项不同时,Big-O仅用于比较使用相同复杂性分析标准的问题的相同变体上的算法

如果主导项相同,则需要比较较大的θ或时间复杂度,这将显示较小的差异

示例

Time(A) = 1/2 n(n+1) ~ O(n^2)

Time(B) = n^2 ~ O(n^2)

O(A) = O(B)

T(A) < T(B)
A

B

我们有

Time(A) = 1/2 n(n+1) ~ O(n^2)

Time(B) = n^2 ~ O(n^2)

O(A) = O(B)

T(A) < T(B)
将打印以下内容:

(1+n) + (1+(n-1)) + .. + (1+3) + (1+2) + (1+1) + (1+0)

n+1 + n + n-1 + .. + 3 + 2 + 1

1 + 2 + 3 + .. + n + n+1

1/2 n(n+1) + (n+1)

1/2 n^2 + 1/2 n + n + 1

1/2 n^2 + 3/2 n + 1

外部n是错误的,因为您已经列举了所有项目。此外,内部循环从i到n-1,而不是从i+1到n-1,因此对于第一次外部迭代,它是n而不是n-1。为什么我不需要外部循环?内部循环
j
是否会为每个外部循环
i
运行?@user2158382,他并不是建议您不需要另一个循环。他是说你的时间复杂度计算不应该有外部的
n
。外部的n是错误的,因为你已经列举了所有项目。此外,内部循环从i到n-1,而不是从i+1到n-1,因此对于第一次外部迭代,它是n而不是n-1。为什么我不需要外部循环?内部循环
j
是否会为每个外部循环
i
运行?@user2158382,他并不是建议您不需要另一个循环。他是说你的时间复杂度计算不应该有外部的
n
。你能解释一下为什么这个系列的运行时间是
1+2+3+…+n
该系列不会为
n*(1+2+3+4+…+n)
运行,因为对于
i
的每次迭代,
j
必须从
1+2+3+4+…+n
@user2158382检查答案的结尾。您能解释一下为什么该系列的答案是
1+2+3+..+n
该系列不会为
n*(1+2+3+4+…+n)
运行,因为对于
i
的每次迭代,
j
必须从
1+2+3+4+…+n
@user2158382检查答案的结尾我不明白
1+2+3+4+…+的循环是如何运行的n
。我相信它会运行
1+2+3+4+…+n
对于i的每次迭代?因为对于
i
的每次迭代,
j
都将运行
1+2+3+4+…+n
@user2158382,因为您没有告诉我们内部循环中是什么,所以我们在这里写的所有答案都假设