多叉堆
动机
使用优先队列实现的 Dijkstra 算法: 如果用二叉堆实现,时间复杂度为
- 初始化
- 每次取优先级最高的边 ,共 次,
- 更新所有关联定点到 的距离,共 在稠密图中, 达到 ,此时时间复杂度退化到 ,比朴素实现更慢。 怎么解决? 主要优化点在上滤,考虑降低上滤时间的同时略微增加下滤时间。
多叉堆
仍可基于向量实现,
- 堆高降低至
- 上滤时间降低至
- 下滤需要遍历 个孩子,时间为 ,下滤 时最小,之后反而增大 此时 Dijkstra 算法的时间成本为
取 时有最小值,时间复杂度为
- 对稀疏图保持高效,,这是相对朴素实现的主要优化
- 对稠密图效率提高,