计算算法的 Theta(n)
Calculating Theta(n) of an algorithm
我正在尝试计算以下算法的 Theta(n)
for i = 1 -> n
for j = 1 -> n
B[i,j] = findMax(A,i,j)
findMax(A,i,j)
if j < i
return 0
else
max = A[i]
for k = i + 1 -> j
if max < A[k]
max = A[k]
return max
我知道 O、theta 和 omega 大致翻译为
O≈≤
Ω≈≥
Θ ≈ =
对于算法,我认为 omega = n^2,o = n^3,但我不确定 theta 是多少。有什么想法吗?
如果你计算代码行的次数
if max < A[k]
的执行取决于 n
您将获得 Theta(n^3) 次执行。因此,您的算法的 运行 时间也是 Thetat(n^3)。
Theta(n^3)。嵌套 for 循环有 n^2 次迭代。当 j < i 时,大约一半的迭代 运行 在 O(1) 时间内完成。这些迭代的另一半对于 j-i 平均有 n/2 差异,因此另一半迭代需要 Theta(n/2) 时间。由于大约一半的 n^2 迭代平均花费 n/2 时间,因此 n^2/2 * n/2 = n^3/4 = Theta(n^3) 时间用于一半的迭代。 n^2 次迭代的另一半需要 n^2/2 = Theta(n^2) 时间。因此总 运行time = Theta(n^3)。
我正在尝试计算以下算法的 Theta(n)
for i = 1 -> n
for j = 1 -> n
B[i,j] = findMax(A,i,j)
findMax(A,i,j)
if j < i
return 0
else
max = A[i]
for k = i + 1 -> j
if max < A[k]
max = A[k]
return max
我知道 O、theta 和 omega 大致翻译为
O≈≤
Ω≈≥
Θ ≈ =
对于算法,我认为 omega = n^2,o = n^3,但我不确定 theta 是多少。有什么想法吗?
如果你计算代码行的次数
if max < A[k]
的执行取决于 n
您将获得 Theta(n^3) 次执行。因此,您的算法的 运行 时间也是 Thetat(n^3)。
Theta(n^3)。嵌套 for 循环有 n^2 次迭代。当 j < i 时,大约一半的迭代 运行 在 O(1) 时间内完成。这些迭代的另一半对于 j-i 平均有 n/2 差异,因此另一半迭代需要 Theta(n/2) 时间。由于大约一半的 n^2 迭代平均花费 n/2 时间,因此 n^2/2 * n/2 = n^3/4 = Theta(n^3) 时间用于一半的迭代。 n^2 次迭代的另一半需要 n^2/2 = Theta(n^2) 时间。因此总 运行time = Theta(n^3)。