【发布时间】:2020-11-09 23:12:42
【问题描述】:
我明天有期中考试,很难理解以下时间复杂度问题。
1.
Algorithm foo(n)
i←0
j←0
while i<n do {
if j=i then j←j+1
else if j=2i then i←n−j
else {
i←i+1
j←j+1
}
}
这是 O(1)
2.
Algorithm foo(n)
i←0
j←0
while i<n do {
if i=k then {
A[i]←k
k←k+1
i←1
}
}
else i←i+1
O(n^2)
所以基本上,我解决这类问题的方法是找到算法中执行恒定数量操作的部分。对于算法 1,这将是变量和循环内的内容:
C1:
i←0
j←0
C2:
if j=i then j←j+1
else if j=2i then i←n−j
else {
i←i+1
j←j+1
然后,我计算循环的迭代次数n,并将其添加到公式中:
f(n) = C1+nC2 是 O(n)(错误答案)
我可以说我的问题是我错误地计算了这两个循环的迭代次数。如果有人可以让我知道我的思维过程是否完全错误和/或我应该如何计算循环迭代,那将不胜感激。
【问题讨论】:
标签: algorithm time while-loop time-complexity computer-science