奇怪排序的递归关系

时间:2013-07-13 17:18:11

标签: algorithm sorting big-o time-complexity recurrence

我对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]) 
       }

如何获得此算法的递归关系?它解决了什么?

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 ...... )。

希望这有帮助!