2013-02-15 53 views
1

我想弄清算法的运行时间。这是一种通过将问题分成2/3组(这是CLR排序)的方式。我有一些麻烦提出来,这是我有:试图找到重复的渐近运行时的问题

T(n)= 3T([2n]/3)+1(1是因为除了递归调用,有一个交换可能会或可能不会进行。假设它做,它仍然只是一个成本不变)。

T(n)=3T([2([2n]/3+1)]/3+1)+1 
T(n)=3T([2([2([2n]/3+1)]/3+1)]/3+1)+1 
T(n)=3T([2([2([2([2n]/3+1)]/3+1)]/3+1)]/3+1)+1 

等......直到我们可以假设,在某一时刻,我们终于打到基地T(n)的情况,并获得该运行时的常量值1。这给了我们:

3([2([2([2([2(...........)]/3+1)]/3+1)]/3+1)]/3+1)+1 with logn terms (that's the "......." in the middle). This gives: 

3*(2n/3+1)^(logn)+1*logn 

3*(2n/3+1)^(logn)+logn   

那么我认为,因为如果日志的基地为2n/3 + 1,我们可以简化它仅仅是3 * LOGN + LOGN,我们可以这样做。 (我一直听说,当做渐近表示法时,我们选择的日志的基础并不重要....)

这变成了4logn。该系数下降,变成简单的登录。

这是正确的吗?我不知道我是否正确地扩展了它,或者如果我的日志操作是合法的......另外,这个最终结果是什么 - 大O,θ等等。我不确定我在看什么。 ..

谢谢。

回答

1

您可以查看this页面来获取针对分而治之算法的一般递归关系解决方案。

在这种情况下,b = 3/2,a = 3,f(n)= 0(1)。 3的基准3/2约为2.709,所以我们使用情况1,这意味着运行时间是O(n^2.709)。

希望有帮助!