java - 具有可调整优先级的优先级队列的高级描述
问题描述
在实现 Dijkstra 和 Prim 算法时,我们需要一个具有可调整优先级的优先级队列。我了解堆函数的基于数组的实现如何,但我不明白如何使优先级可调。我读过哈希图允许这样做,但我不明白如何。
有人可以使用示例使用哈希图给我这个实现的高级描述。a、b、c、d、e、f 的优先级分别为 2、4、0、6、1、9,插入堆后如何跟踪它们的索引?如果 b 的优先级更改为 8,这将如何工作?
请参考我可能需要的任何其他材料来理解这一点。
解决方案
MinPQ 中的更改将使用swim()
和sink()
操作来调整优先级
例如decreaseKey()
将降低与其所在顶点相关的优先级
只是调用swim()
操作
, 并且increasekey()
会增加与它的顶点相关的优先级
只是调用sink()
操作
实现应如下所示:
private void swim(int k) {
while (k > 1 && greater(k/2, k)) {
swap(k, k/2);
k = k/2;
}
}
private void swap(int k) {
while (2*k <= n) {
int j = 2*k;
if (j < n && greater(j, j+1)) j++;
if (!greater(k, j)) break;
exch(k, j);
k = j;
}
}
更多资源普林斯顿:
推荐阅读
- python - 正则表达式:第 n 次出现的字符串
- wordpress - 排除标记链接
- swift - 下一次触摸前接收系统手势状态通知失败
- r - 总结SE、ggplot2 和 Anova 问题
- mvvm - 使命令 1-time-executable
- nativescript - Nativescript 从库中删除图像
- facebook - 如何不将 Facebook 聊天机器人与正常对话混为一谈
- java - 创建 Do-While 循环后修复 java.lang.NullPointerException
- python - Pandas 数据框无法从 CSV 中绘制 x 值
- python - 如何在 python 脚本中获取两个 svn 修订版的完整上下文差异?