所以,我有一个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
答案 0 :(得分:0)
运行时间仅取决于数组的元素数量;特别是,它独立于数组的内容。因此,最佳和最差情况下的运行时间是一致的。
通过重复T(n) = T(n-1) + O(1)
和T(1)=O(1)
建模时间复杂度的更正确方法是因为O(1)
表示您在每次递归调用中花费了一些额外的常量时间。正如您已经指出的那样,它明确地解决了T(n)=O(n)
。事实上,这很紧,即我们有T(n)=Theta(n)
。