我有这个算法,我试图计算它的复杂性。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