社区
C++ 语言
帖子详情
关于堆实现优先队列的问题
happypetersun
2012-10-02 11:38:04
一般堆里头的都是节点i的俩孩子是2*i,和2*i+1,
我看到王晓东的书里增广路算法那一章里用堆实现的优先队列,
是(k+d-2)/d,k是顶点在堆里的序号,就是完全二叉树数组的下标,d=3是优先队列类的默认构造函数,我就奇怪了,请各位高手指教一下
...全文
81
3
打赏
收藏
关于堆实现优先队列的问题
一般堆里头的都是节点i的俩孩子是2*i,和2*i+1, 我看到王晓东的书里增广路算法那一章里用堆实现的优先队列, 是(k+d-2)/d,k是顶点在堆里的序号,就是完全二叉树数组的下标,d=3是优先队列类的默认构造函数,我就奇怪了,请各位高手指教一下
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
huangxy10
2012-10-03
打赏
举报
回复
初始化d=3,说明是三叉堆,
当(k+d-2)/d = 1 时,
k的三种可能是2,3,4,
这三个数在数组中就是1的孩子;
当(k+d-2)/d = 2 时,
k的三种可能是5,6,7,
这三个数在数组中就是2的孩子;
当(k+d-2)/d = 3 时,
k的三种可能是8,9,10,
这三个数在数组中就是3的孩子;
。。。
huangxy10
2012-10-03
打赏
举报
回复
可能是d叉堆,
k有d种可能使下式
(k+d-2)/d
为同一值,同一值父节点,
d种可能为d个孩子。
喧嚣天空
2012-10-02
打赏
举报
回复
难道是d叉堆?
完整视频-coursera公开课 普林斯顿算法 ⅠⅡ部分
本资源为BT文件,下载速度快,如果P2P工具支持下载字幕可以进行下载 Coursera上的公开课,普林斯顿大学教授Robert Sedgewick主讲《Algorithms》算法 Java
实现
课程网站http://algs4.cs.princeton.edu/home/ 视频一个两部分,算法(一)主要集中在基础的数据结构、排序、查找算法。 相关主题有:并查集算法,二分查找,栈,队列,背包,插入排序,选择排序,希尔排序,快速排序, 三切分快排,归并排序,
堆
排序,二分
堆
,二分查找树,红黑树,链表,线性哈希表,Graham扫描,kd树。 算法(二)主要讲解图论和字符串处理的相关算法。相关主题有:深度优先搜索,宽度优先搜索,拓扑排序,Kosaraju-Sharir算法,Kruskal算法,Prim算法,Dijkistra算法,Bellman-Ford算法, Ford-Fulkerson算法, LSD radix sort算法, MSD radix sort算法, 3-way radix 快排算法, 多路尝试法, 三元查找尝试法, Knuth-Morris-Pratt算法, Boyer-Moore算法, Rabin-Karp算法, 正则匹配, run-length编码, Huffman编码, LZW压缩, 还有Burrows-Wheeler变换。
二叉
堆
实现
的
优先队列
什么是
优先队列
?
优先队列
这个数据结构的特点就是在我们执行插入或者删除元素的操作时候,
优先队列
自己会来维护队列中元素的顺序,不用我们自己去重新对队列中的数据进行排序,所以
优先队列
中就有了两个主要的 API,分别是 insert 插入一个元素和 delMax 删除最大元素(如果底层用最小
堆
,那么就是 delMin)
优先队列
底层的
实现
原理就是对二叉
堆
这个数据结构的使用,因为
优先队列
底层使用的是二叉
堆
,所以我们可以用O(1)的时间复杂度去获取
优先队列
中的最大值(这里我们以最大
堆
来说,所以获取的是最大值) 好,到
优先队列
(
堆
)
这里写自定义目录标题场景功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 #用
堆
实现
优先队列
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解
优先队列
(
堆
)
在一些用户环境中,需要优先处理队列中的一些元素。例如,在一
堆
文件中有一项文件非常重要,需要对它进行优先处理,如果使用队列的话,则必须逐个出队直到该文件,这是没有办法对该文件进行优先处理的,所以就提出了一中特殊的队列(
优先队列
)来解决这个
问题
。
优先队列
至少允许下面两种操作:Insert(插入)、DeleteMin(删除最小者)。使用一个带有表头的链表,插入在表头以O(1)时间复杂度
实现
,删除则需要遍历该链表,时间复杂度为O(N)。
堆
实现
优先队列
以及初始化
堆
的时间复杂度分析
一文搞懂
堆
实现
优先队列
!
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章