【Algorithms】最短路径算法CH:Contraction hierarchies

来源:互联网 发布:java中的foreach循环 编辑:程序博客网 时间:2024/06/06 01:06

CH的思路:

Contraction hierarchies

预处理生成一个多层的结构,每个点都处在单独的一层。事先对点进行优先级排序(怎么排都行,但是排序的好坏直接影响到预处理的效率以及搜索的效率。举个例子,邻接点个数)

点的优先级(高低)是人为指定的,根据优先级从低到高依次选点进行contraction.什么是contraction呢,假设拿掉这个点,看看会不会影响图中点对之间的shorstest path。因此只需要看看它邻接的级别比它高的点的两两点对之间的shortest path是否经过这个点,如果经过的话,就在这个点对之间加上一条边存储它们的shortest path,这条边叫做shortcut。为什么只需要看级别比它高的点?这与CH在搜索最短路径时的算法有关。CH采用双向Dijkstra,并且搜的时候只能从级别低的往级别高的搜,两边相碰之后,就保存路径。如果某个点A的两个邻接点B,C的级别都比A低,而且BC之间的最短路径经过A的话,是不需要在BC之间加shorcut的,直接通过双向Dijkstra可以搜索出来。

搜索过程:

双向dijkstra,从低往高搜。停止条件:两边的open队列都为空了

搜完之后,需要将shortcut转化成原始边。
传统的 Dijkstra最短路径问题的询问时间,取决于搜索的问题的距离 Query time independent of dist(s, t)

因为Dijkstra 算法属于启发式算法 以一个点为中心,向外层层扩展。 所以,在计算给定两点,或者是源点的问题是,这个算法并不快。现在做的东西需要一个快速计算,一个给定点到所有点的最短路径。

基本思想:起始点通往距离远的点时,往往需要用到一些重要的道路。 就像高速公路。

参考:
1. 创建公交查询数据 http://hmfly.info/2011/12/
2. 最短路径性质 http://blog.csdn.net/wsh6759/article/details/7334882
3. 路径分析算法引擎比较 http://blog.csdn.net/wsh6759/article/details/7302022
4. CH算法介绍 http://en.wikipedia.org/wiki/Contraction_hierarchies
5. CH算法论文 http://algo2.iti.kit.edu/documents/routeplanning/geisberger_dipl.pdf

原创粉丝点击