如何计算此递归函数的最坏情况(理论)运行时间?

时间:2014-03-17 04:56:40

标签: function recursion time master-theorem

我正在分析这段代码,以了解如何计算最坏情况的理论运行时间。我正在使用主定理。有人可以给我一个逐步的解决方案来确定如何到达运行时间吗?

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)

1 个答案:

答案 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)))抱歉数学符号,我不知道如何在堆栈溢出时使用它。