我正在分析这段代码,以了解如何计算最坏情况的理论运行时间。我正在使用主定理。有人可以给我一个逐步的解决方案来确定如何到达运行时间吗?
def sort(list, i, j):
if list[i] > list[j]:
list[j], list[i] = list[i], list[j]
if i + 1 >= j:
return
k = (j - i + 1)/3
sort(list, i, j - k)
sort(list, i + k, j)
sort(list, i, j - k)
答案 0 :(得分:1)
因此,硕士定理为T(n) = a*T(n/b) + f(n)
,其中a
是子问题的数量,n/b
是子问题的大小,f(n)
是您必须达到的计算量每次通话。
a:
有三个子问题,或三个递归调用,
n/b:
每个子问题最多以原始数量2/3
提供。您可以为每个证明它,但举一个例子:sort(list, i, j-k)
的问题大小为(j-k) - i
,即j-(j-i+1)/3 - i = (2j - 2i - 1)/3
f(n):
为O(1)
,或受恒定时间限制,因为您只是进行两次恒定时间切换。
这应该是O(n^(log(3) base (2/3)))
抱歉数学符号,我不知道如何在堆栈溢出时使用它。