多叉堆

动机

使用优先队列实现的 Dijkstra 算法: 如果用二叉堆实现,时间复杂度为

  • 初始化
  • 每次取优先级最高的边 ,共 次,
  • 更新所有关联定点到 的距离,共 在稠密图中, 达到 ,此时时间复杂度退化到 ,比朴素实现更慢。 怎么解决? 主要优化点在上滤,考虑降低上滤时间的同时略微增加下滤时间。

多叉堆

仍可基于向量实现,

  • 堆高降低至
  • 上滤时间降低至
  • 下滤需要遍历 个孩子,时间为 ,下滤 时最小,之后反而增大 此时 Dijkstra 算法的时间成本为

时有最小值,时间复杂度为

  • 对稀疏图保持高效,,这是相对朴素实现的主要优化
  • 对稠密图效率提高,