查看: 1898| 回复: 3
跳转到指定楼层
上一主题 下一主题
收起左侧

[树/链表/图] 请教 Merge k Sorted Lists 空间复杂度问题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
http://blog.csdn.net/linhuanmars/article/details/19899259

归并算法 我们来分析一下上述算法的时间复杂度。假设总共有k个list,每个list的最大长度是n,那么运行时间满足递推式T(k) = 2T(k/2)+O(n*k)。根据主定理,可以算出算法的总复杂度是O(nklogk)。如果不了解主定理的朋友,可以参见主定理-维基百科空间复杂度的话是递归栈的大小O(logk)。
我看归并算法的空间复杂度是线性的O(n)的
https://zh.wikipedia.org/zh-cn/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F


这种方法用到了堆的数据结构,思路比较难想到,但是其实原理比较简单。维护一个大小为k的堆,每次取堆顶的最小元素放到结果中,然后读取该元素的下一个元素放入堆中,重新维护好。因为每个链表是有序的,每次又是去当前k个元素中最小的,所以当所有链表都读完时结束,这个时候所有元素按从小到大放在结果链表中。这个算法每个元素要读取一次,即是k*n次,然后每次读取元素要把新元素插入堆中要logk的复杂度,所以总时间复杂度是O(nklogk)。空间复杂度是堆的大小,即为O(k)。


请教这个帖子里面分析的空间复杂度是正确的吗?
谢谢

上一篇:Surrounded Region 坐标编码想不明白
下一篇:top K 问题C++ 版本解法
🔗
JamesJi 2015-11-4 21:02:12 | 只看该作者
全局:
我觉得是对的
回复

使用道具 举报

🔗
plich 2015-11-5 00:23:40 | 只看该作者
全局:
分析的没问题……归并法只是和归并排序类似而已
如果你对链表写归并排序,空间一样是O(logn)
回复

使用道具 举报

🔗
 楼主| oio14644 2015-11-5 01:39:14 | 只看该作者
全局:
plich 发表于 2015-11-5 00:23
分析的没问题……归并法只是和归并排序类似而已
如果你对链表写归并排序,空间一样是O(logn)

thanks, 可以认为merge sort 比用heap 更优一些:时间复杂度一样,空间复杂度更小
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表