Recursion 最佳情况/最坏情况递推关系

Recursion 最佳情况/最坏情况递推关系,recursion,code-analysis,recurrence,Recursion,Code Analysis,Recurrence,所以,我有一个伪代码,我必须为一个类分析它。我正试图找出θ的最佳情况和最坏情况。我想出了最好的办法,但我遇到了最坏的办法。我认为最坏的情况实际上和最好的情况是一样的,但我在事后猜测自己,如果事实上它们不一样,我希望得到一些反馈,告诉我如何正确地发展最坏情况下的复发 代码: 最佳情况复发: 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(

所以,我有一个伪代码,我必须为一个类分析它。我正试图找出θ的最佳情况和最坏情况。我想出了最好的办法,但我遇到了最坏的办法。我认为最坏的情况实际上和最好的情况是一样的,但我在事后猜测自己,如果事实上它们不一样,我希望得到一些反馈,告诉我如何正确地发展最坏情况下的复发

代码:

最佳情况复发:

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

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


一种更正确的时间复杂度建模方法是通过递归
T(n)=T(n-1)+O(1)
T(1)=O(1)
进行建模,因为
O(1)
表示您在每个递归调用中花费了一些额外的固定时间。正如您已经指出的,它清楚地解决了
T(n)=O(n)
。事实上,这是严格的,也就是说,我们有
T(n)=θ(n)

对于您的代码,最佳和最坏情况是相同的。两者都在
Θ(n)
中,正如您计算的那样。
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