社区
数据结构与算法
帖子详情
用链表建堆
Leguroky
2010-07-19 08:55:28
我在网上查不多这方面的资料,我能想到的,都是以快速排序方法为基础来实现合并、查找、插入等操作,大家有更好的方法吗?
...全文
172
10
打赏
收藏
用链表建堆
我在网上查不多这方面的资料,我能想到的,都是以快速排序方法为基础来实现合并、查找、插入等操作,大家有更好的方法吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kindlucy
2010-07-21
打赏
举报
回复
参考算法导论的 二项堆,对堆的合并的复杂度是O(lgn)
Leguroky
2010-07-21
打赏
举报
回复
[Quote=引用 5 楼 aaa20090987 的回复:]
引用 4 楼 leguroky 的回复:
主要是找最大值,提出最大值(就像堆排序那样),还有就是两个堆的合并。
用一个左偏树就行
[/Quote]
这里仅仅是讨论链表建堆,应该用不上左偏树吧。
Leguroky
2010-07-21
打赏
举报
回复
[Quote=引用 9 楼 kindlucy 的回复:]没看到那呢……看来也只能这样了,多谢。
参考算法导论的 二项堆,对堆的合并的复杂度是O(lgn)
[/Quote] 0
超级大笨狼
2010-07-20
打赏
举报
回复
链表要有索引,就想数组一样用。
i是根的话,2i+1右节点,2i左节点,参考算法导论前几章排序的部分建堆的办法。
有下降操作,可以保证堆的顺序。
AAA20090987
2010-07-20
打赏
举报
回复
[Quote=引用 4 楼 leguroky 的回复:]
主要是找最大值,提出最大值(就像堆排序那样),还有就是两个堆的合并。
[/Quote]
用一个左偏树就行
Leguroky
2010-07-20
打赏
举报
回复
主要是找最大值,提出最大值(就像堆排序那样),还有就是两个堆的合并。
Leguroky
2010-07-20
打赏
举报
回复
[Quote=引用 6 楼 superdullwolf 的回复:]
链表要有索引,就想数组一样用。
i是根的话,2i+1右节点,2i左节点,参考算法导论前几章排序的部分建堆的办法。
有下降操作,可以保证堆的顺序。
[/Quote]
这样是不错,不过要是两个堆合并呢?怎么处理,尤其是两个堆没有交叉的时候?我能想到的也只有重复插入操作了,有更好的思路吗?
flylee
2010-07-19
打赏
举报
回复
需要支持多大的数据量,有哪些功能需求
aduxiaozi
2010-07-19
打赏
举报
回复
啥意思啊,链表建堆?
饭fan有引力
2010-07-19
打赏
举报
回复
友情帮顶
cl.zip_algorithms
- **操作**:主要操作有
建堆
、插入元素(heapify)、删除元素(extract-root)和调整堆(shift-down/shift-up)。 - **C语言实现**:通常使用数组来模拟堆,因为数组的索引关系与二叉树的父子节点关系对应。 2. *...
用
链表
表示的可合并最大堆
说明在下列前提下如何用
链表
实现可合并堆。试着使各操作尽可能高效。分析每个操作按动态集合规模的运行时间。 由于对于堆操作需要查找父结点,以及左右孩子结点,所以本程序中用到了非递归非辅助栈的遍历与查找操作...
堆排序之“用最小堆将k个已排序
链表
合并为一个排序
链表
”
问题:请给出一个时间为O(nlgk),用来将k个已排序
链表
合并为一个排序
链表
的算法。此处的n为所有输入
链表
中...
建堆
的时间复杂度O(k)。 (2)堆顶元素就是k个
链表
中最小的那个元素,取出它。时间复杂度O(1)。
链式结构实现堆排序
在很多数据结构和算法的书上,“堆排序”的实现都是建立在数组上,数组能够通过下标访问其元素,其这一特性在堆排序的实现上,使得其编码实现比链式结构简单,下面我利用
链表
实现堆排序。 在“堆”这种数据结构中,...
04 Java基本数据结构之
链表
链表
这一部分内容较多,同时实现起来最开始的时候也是笔者最开始不太理解的,掌握基础
链表
后,再进一步实现双端
链表
、有序
链表
、双向
链表
以及用
链表
实现栈、队列。
数据结构与算法
33,028
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章