谁知道Sedgewick-Vitter算法?

时间:2011-05-13 06:02:54

标签: algorithm graph routes dijkstra shortest-path

我必须在不使用Fibonacci堆的情况下实现Dijkstra和Sedgewick-Vitter算法。有关Dijkstra完整互联网的信息,但我找不到伪代码或Sedgewick-Vitter算法的例子。我只发现McHugh,算法图论理论书中有一些信息,但我找不到免费的pdf。那么也许有人知道这个算法,可以与信息,伪代码,链接共享吗?

干杯!

1 个答案:

答案 0 :(得分:2)

让我们假设一个欧几里德距离图。来源是 s ,目的地是 t

如您所知,Dijkstra算法按照非减少距离( s x )的顺序访问顶点 x

A *算法按照非减少距离的顺序访问顶点 x s x )+ h( x )。函数 h 必须是允许的启发式,在此设置中表示h( x )≤距离( x >, t )。考虑h的各种选择。

  • h( x )= 0.这使A *表现得像Dijkstra。

  • h( x )=距离( x t )。这是最好的可接受的启发式算法。 A *将仅访问距离较远的顶点( s x )+距离( x t )=距离( s t ),即从 s t 的最短路径上的那些顶点。不幸的是,这种选择的计算费用很高。

  • h( x )= || x - t ||。直线距离可以在时间O(1)中计算,并且始终是距离的下限。

当从 s t 有一个相当直接的镜头时,最后一个启发式效果很好,但随着弯路的增加,A *会访问许多“不在方式“。

Sedgewick-Vitter使用h( x )= a || x - t ||对于 a > 1.这种启发式方法不可接受,因此我们可能找不到最短的路径,但是通过惩罚早期的弯路,它有望在不降低解决方案质量的情况下修剪搜索空间。