大师方法——为啥不能解决T(n) = T(n/2) + n^2/logn?
Posted
技术标签:
【中文标题】大师方法——为啥不能解决T(n) = T(n/2) + n^2/logn?【英文标题】:The master method - why can't it solve T(n) = T(n/2) + n^2/logn?大师方法——为什么不能解决T(n) = T(n/2) + n^2/logn? 【发布时间】:2012-05-27 09:49:41 【问题描述】:大师方法-为什么不能解T(n) = 4*T(n/2) + (n^2)/logn?
我意识到它可以解决类型 T(n) = aT(n/b) + f(n) 的递归
在 MIT OCW 上,他们提到它无法解决上述重复出现的问题。有人可以解释为什么吗?
【问题讨论】:
你能提供一个链接到他们说无法解决的地方吗?另外,是 (n^2)logn 还是 n^(2logn) 不是一个真正的编程问题。主定理解决了 一些 类型 T(n) = aT(n/b) + f(n) 的递归,但不是全部。a
、b
和 f
有一些限制,您的示例不能满足这些限制(大概 - 我自己没有研究过,但如果 MIT 这么说,那可能是对的,如果 MIT 错了,那么你的问题没有实际意义!)。有关更多详细信息,请参阅en.wikipedia.org/wiki/Master_Theorem,或者我想您可以在麻省理工学院的材料中找到相同的信息以及更多信息。
... 如果您的问题是“为什么对 a
、b
和 f
有限制”,那么我想您真的需要查阅 Master Theorem 的证明,了解需要哪些限制才能得出结果。
这看起来像是主定理的第三种情况。
对不起伙计们,将其编辑为 (n^2)/logn 并将 T(n/2) 更改为 4*T(n/2) 尽管我认为后者没有任何区别.
【参考方案1】:
T(n/2) + (n^2)/logn 的答案:
Case 1 does not apply because f(n) != O(n^-e) for any positive e.
Case 2 does not apply because f(n) != Θ(log^k(n)) for any k >= 0
Case 3 does not apply,
f(n) = Ω(n^e) for e = 1, BUT
a*f(n/b) <= c*f(n) for no c<1 (works out that c >= 2)
所以我们不能申请任何案件。除此之外,我真的不好 - 而且我不是 100% 在这个答案上。
以下内容是在此编辑之前,并假设问题是关于 T(n) = T(n/2) + n^(2logn) 我很确定这是定理的第 3 种情况。
Case 1 does not apply because f(n) != O(n^-e) for any positive e.
Case 2 does not apply because f(n) != Θ(log^k(n)) for any k >= 0
Case 3 does apply,
a*f(n/b) <= c*f(n) for some c<1 (works out that c >= 0.5)
and f(n) = Ω(n^e) for e = 1
我可能错了,请检查并告诉我!
【讨论】:
我稍微编辑了这个问题(放在一些括号中,以便清楚什么除以什么以及什么是什么)所以希望现在更清楚了。【参考方案2】:f(n)=(n^2)/logn 和 n^(log a/log b) 。计算以上两个函数的差。
比率= (n^2/log n)/(n^2)
这个比率是对数的。这种递推关系属于case 2和case 3之间的差距,所以Masters定理不适用于这种递推关系。
当上述两个函数之间的差是多项式时,Masters theorem 是适用的。
【讨论】:
【参考方案3】:这是因为在所有提到的三种情况下,您都无法证明正渐近性质是合理的。这意味着当 n->infinity n^2/lg(n) -> infinity 时,这只是意味着 n^e = w(lg(n)),可以解释为“函数不能包含”没有上限为分治程序而存在。
【讨论】:
【参考方案4】:这似乎是第三种情况,因为 f(n) 更大,但它也应该满足正则性条件(对于某些 c in(0,1),af(n/b)
【讨论】:
以上是关于大师方法——为啥不能解决T(n) = T(n/2) + n^2/logn?的主要内容,如果未能解决你的问题,请参考以下文章
递归:用树方法得到T(n / 4)+ T(n / 2)+ n ^ 2
如何解决这个递归关系:T(n) = 4*T(sqrt(n)) + n