关于Merge Sort的空间复杂度分析

关于Merge Sort的空间复杂度分析

老师关于归并排序的空间复杂度分析我觉得是O(n),我是这么分析的:


对于递归树第0层我们假设输入数据的规模是O(n)级别:

  1. 第一层的call stack上我们开辟了O(n/2)级别的空间;

  2. 第二层开辟了O(n/4)级别的空间,一直到最后一层我们开辟的空间是O(1);

  3. 所以一共加起来是:O(n + n/2 + n/4 + ...+ 1) = O(2n - 1) = O(n)

  4. 虽然递归树有两侧,但是执行有面那一侧的时候左面的部分已经执行完毕,call stack全部弹出,所以排序过程中占用的最大内存空间还是O(n)级别。

不知道这样的分析正不正确?谢谢老师!


相关截图:

https://img1.sycdn.imooc.com//climg/61cd553f096d92ae22521236.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

赞!完全正确,归并排序的空间复杂度就是 O(n) 的。


在课程后续,我们会看到归并排序的一个优化,我们可以不在 merge 中不断开辟使用的临时空间,而一次性在整个归并排序开始之前,将需要的临时空间全部开出来。而这个空间,我们只需要和原数组大小一样就好。对于这个优化的代码,就可以更清晰地看到,整个归并排序,需要这样的一个 O(n) 的辅助空间:)


继续加油!:)

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2627    人
  • 解答问题       1105    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师