我对此非常沮丧。
在CLRS第3版,第95页(第4.5章)中,它提到了像
这样的重现 T(n) = 2T(n/2) + n lg n
无法通过主定理解决因为差异
f(n)/n^(log_b(a)) = (n lg n)/n^1 = lg n
不是多项式。
然后我遇到像this这样的页面,在页面的底部,它提到完全相同的重复,并说它可以通过主定理解决,因为它属于“扩展的案例” 2“即使差异是非多项式的。它变为n lg^2 n
(将f(n)
上的对数因子加1)。
然后我遇到像this这样的页面,其中示例(e)似乎是扩展案例2的明确应用(重复是T(n) = 4T(n/2) + n^2 lg n
),但解决方案不是n^2 log^2 n
},而是n^2 log n
!我错了还是纸张错了?
任何人都可以澄清这些矛盾并清楚地说明何时可以使用主定理以及什么时候不能使用?什么时候多项式差异检查很重要,什么时候不重要?扩展案例2是否可用,或者实际上是否违反了某些内容?
编辑:
我尝试直接从第二篇论文中解决复发(e),然后得到:
T(n) = n^2 lg^2(n)/2 + n^2 lg(n)/2
这不是很大的theta n^2 lg^2 n
吗?
答案 0 :(得分:3)
该书指出无法使用Case 3来解决:
即使它看起来有正确的形式:......你可能会错误地认为案例3应该适用
然而,这个递推公式可以用主定理解决,例2。
T(n) = 2T(n/2) + nlgn:
我们定义:
a = 2, b = 2, f(n) = nlgn
c = log_2(2) = 1
k = 1
f(n)
确实在Theta(nlogn)
。
因此,掌握定理案例2的所有条件都适用,我们可以推导出:
T(n)
位于Theta(n^c * log(n)^(k+1)) = Theta(n*log(n)^2)
长话短说,硕士定理有3个案例。每个案例都有它的先决条件。案例3具有更复杂的先决条件,因为它还需要收敛。
由于案例3的先决条件不适用于此公式,因此不能使用案例3.但是,案例2的先决条件 - 应用,并且您可以使用它。