关于归并排序时间复杂度 T(n) =2T(n/2)+O(n)
T(n)=2T(n/2)+O(n),n=2^k。
想知道为什么最终答案为O(nlgn)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
T(n)=2T(n/2)+O(n),n=2^k。
想知道为什么最终答案为O(nlgn)
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
Master大法好。这题自己推导也不难。把递推公式重复代入三次并化简:
$$\array{\text{1}:&T(n)<2\ T(\frac{n}{2})+ c\ n\\\ \text{2:}&\ \ T(n)<4\ T(\frac{n}{4})+ 2\ c\ n\\\ \text{3:}&\ \ T(n)<8\ T(\frac{n}{8})+ 3\ c\ n}$$
可以看出规律了,而且很容易用归纳法证明。于是代入$k$次时就有($n=2^k$):
$$\array{\qquad\text{k}:&T(n)<2^k\ T(\frac{n}{2^k})+ k\ c\ n\\&\quad\ \qquad=n\ T(1) + c\ n\ \log_2{n}\\&=\Theta(n\log{n})}$$
您好, 这要用到主定理(master theorem)来证明, 是
第四章递归式
开篇介绍的方法, 并且其引入的例子就是你提问的这个式子, 具体解法和原理你可以去看原书, 讲解的非常详细. 也可以去这个网站上下算法导论课(与书同名, 是清华姚班的罗辑写的课), 里面第二章也介绍了主定理的证明和应用, 不懂的地方提问后罗辑本人也会回答你. coursera上也有主定理的证明其实这个复杂度你也可以抛开详细的数学推导, 直接用分治的思想来考虑, 很容易想到, 其实你一共需要$O(log n)$层归并操作, 每一层归并操作的时间复杂度都是$O(n)$, 所以这个算法的时间复杂度是$O(n log n)$.
代码部分引自计蒜客