关于堆实现优先队列的问题

happypetersun 2012-10-02 11:38:04
一般堆里头的都是节点i的俩孩子是2*i,和2*i+1,
我看到王晓东的书里增广路算法那一章里用堆实现的优先队列,
是(k+d-2)/d,k是顶点在堆里的序号,就是完全二叉树数组的下标,d=3是优先队列类的默认构造函数,我就奇怪了,请各位高手指教一下
...全文
81 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叉堆?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧