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。系数下降到简单的logn。

这个对吗?我不确定我是否正确扩展了它,或者我的日志操作是否合法......此外,这个最终结果是什么——big-O、theta 等。我不确定我在看什么。 ..

谢谢。

4

1 回答 1

1

您可以查看页面以获得分治算法的通用递归关系解决方案。

在这种情况下,b = 3/2,a = 3,f(n) = O(1)。log base 3/2 of 3 大约是 2.709,所以我们使用 case 1,这意味着运行时间是 O(n^2.709)。

希望有帮助!

于 2013-03-22T05:46:05.953 回答