问题描述
我得到了以下算法:
Supersort(A,i,j):
if(j = i): return
if(j = i + 1):
if(A[i] > A[j]):
swap(A[i],A[j])
else:
k = floor of ( (j-i+1)/3 )
Supersort(A,j-k) // sort first two thirds
Supersort(A,i+k,j) // sort last two thirds
Supersort(A,j-k) // sort first two thirds again
我真的不确定在最坏的情况下如何分析该算法进行多少次比较。我不想给我答案,我什至不知道如何开始解决这个问题。谢谢您的帮助
解决方法
通常,当您具有递归函数时,要做的第一件事就是获得递归关系。在您的情况下,当输入的大小为n时,令T(n)为超级排序的成本。那等于什么?前两个if stmts只是常量,其他则花费T(2n / 3)+ T(n / 3)+ T(2n / 3)然后
T(n)= 2T(2n / 3)+ T(n / 3)+ C
然后您解决该复发问题。
更正: 在三种情况下,您将使用2/3。我以为其中之一是1/3。在这种情况下,重现甚至更简单,并且可以使用主定理来解决
T(n)= 3T(2n / 3)+ C