我对Fibonacci系列和二分搜索的递归关系感到满意,但我不知道如何找到该算法的递归关系:
Algorithm strange-sort(A[0,,,,,,n-1])
if n=2 and A[0]>A[1]
{
swap(a[0],a[1])
}
else if n>2
{
m=ceiling(2n/3)
strange-sort(A[0.....m-1])
strange-sort(A[n-m......n-1])
strange-sort(A[0......m-1])
}
如何获得此算法的递归关系?它解决了什么?
答案 0 :(得分:2)
这是Stooge Sort算法。维基百科说运行时是O(n log 3 / log 1.5 ),通过提出正确的重复,我们可以看到原因。
请注意,每个递归调用执行O(1)工作,然后进行三次大小为2n / 3的递归调用。这为我们提供了递归关系
T(n)= 3T(2n / 3)+ O(1)
我们现在可以使用Master Theorem来解决这个问题。这里,a = 3,b = 3/2,并且d = 0.由于log b a = log 1.5 3> 0,通过主定理,这解决了O(n log 1.5 3 )。使用对数属性,重新排列为O(n log 3 / log 1.5 ),大约为O(n 2.70951129135 ...... )。
希望这有帮助!