最短路径与最小生成树算法详解
1. 最短路径查询
1.1 收缩层次结构(Contraction Hierarchies)
收缩层次结构在最短路径查询中是一种有效的方法。在收缩过程中,需要记录每个捷径的中点,即插入捷径时收缩的节点。扩展则成为一个递归过程,输入图中的边作为基本情况。
节点的移除顺序至关重要。若排序不佳,会需要大量捷径,导致空间需求增大和查询速度变慢。有许多节点排序的启发式方法,即使是简单的方法也能产生合理的性能。这些启发式方法通过识别剩余图中不重要的节点来在线计算排序,以确定下一个要收缩的节点。为计算节点 $v$ 的重要性,会模拟 $v$ 的收缩,特别是确定会插入多少条捷径。将这个数量和模拟收缩过程中收集的其他统计信息浓缩成一个分数,分数低的节点先被收缩。
与基于官方道路层次结构的启发式方法相比,收缩层次结构使用 $n$ 个不同的层次,而官方层次结构不超过 10 层。这意味着收缩层次结构可以更精细地利用输入中的层次结构。其查询算法也比启发式算法更激进,每一步都会切换到更高的层次,因为捷径可以修复在定义层次结构时所犯的任何“错误”。
1.2 中转节点路由(Transit Node Routing)
在日常生活中,当我们开车去“远方”时,通常会通过少数几个“重要”的道路交叉口离开起始位置。例如,某人住在萨尔布吕肯附近的一个小村庄,去不同方向的长途旅行会从不同的特定地点进入高速公路系统。所以,从他家到远方的所有最短路径都会经过少数几个中转节点,而且这些中转节点对于整个村庄的人来说是相同的。因此,德国(或欧洲)所有地点的中转节点总数较少。
中转节点的概念可以精确化并形成算法。在该算法中,
超级会员免费看
订阅专栏 解锁全文
2852

被折叠的 条评论
为什么被折叠?



