最佳案例/最差案件复发关系

时间:2015-10-10 16:32:59

标签: recursion code-analysis recurrence

所以,我有一个psuedocode,我必须分析一个类。我试图找出最好的情况和最糟糕的情况。我找出了最好的情况,但我遇到了最糟糕的情况。我认为最糟糕的情况实际上与最好的情况相同,但我是第二次猜测自己,并希望得到一些关于如何在最坏情况下适当地发展复发的反馈,如果实际上它们不相同的话。

代码:

function max-element(A)
    if n = 1
        return A[1]
    val = max-element(A[2...n]
    if A[1] > val
        return A[1]
    else
        return val

最佳病例复发:

T(1) = 1
T(n) = T(n-1) + 1
T(n-1) = T(n-2) + 1

T(n) = T((n-2) + 1) + 1
T(n) = T(n-1) + 1 -> T(n) = T(n-k) + k
Let k = n-1
T(n) = T(n-(n-1)) + n - 1
T(n) = T(1) + n -1
T(n) = 1 + n - 1
T(n) = n

1 个答案:

答案 0 :(得分:0)

运行时间仅取决于数组的元素数量;特别是,它独立于数组的内容。因此,最佳和最差情况下的运行时间是一致的。

通过重复T(n) = T(n-1) + O(1)T(1)=O(1)建模时间复杂度的更正确方法是因为O(1)表示您在每次递归调用中花费了一些额外的常量时间。正如您已经指出的那样,它明确地解决了T(n)=O(n)。事实上,这很紧,即我们有T(n)=Theta(n)