我有這個算法,我試圖計算它的複雜性。Big-O for While循環
A = {a_1, a_2, a_3, ...}
w = 0
while A != empty
a' = argmin(A) #a' is the element with smallest y_a
if (N_a' + w > C)
A = A - {a'}
else
x_a' = x_a' + 1
w = w + N_a'
Update the y_a' value in A using x_a'
A
是一組,並且如果不滿足條件(N_a' + w > C
)是真,我們從該組直到集合爲空除去的元素。我知道該算法運行至少O(n)
,但如果if
語句爲false,它可以運行更多。假設最後一行(更新)需要一個固定的時間。
如何計算這裏的複雜度?
即使你總是選擇當時的情況,由於'min(A)'和A操作的收縮,努力超過O(n)。他們通常會拿O(log n)。沒有更多的信息,關於其他情況就無從談起。如果你不走運,並且每當你有一個無限循環時都會被採取。 – Henry
由於'C'的值,它不能是無限循環。在某些時候,當我們到達'C'時,循環將終止。 – Self
除非N_a'爲零或負數;-) – Henry