查找算法执行的比较的渐近量

问题描述

我得到了以下算法:

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...