维普资讯 http://www.cqvip.com 2008年第2期 福建电脑 9 几种最短路径的算法及比较 刘文海 .徐荣聪 (1.福建时外经济贸易职业技术学院福建福州350016 2.福州大学数学与计算机科学学院福建福州350002) 【摘要】:最短路径问题是图论中一个非常有实际意义的问题,在实际生活中的各种规划设计问题中及数据挖掘中都 有重要的作用。本文着重介绍了用计算机编程语言实现单源最短路径算法与每对结点问的最短路径算法,并作了简单比较。 【关键宇】:Relax Dijkstra Bellman有向无环图上的最短路Floyd—Warshall Johnson 1.引言 2_3.1算法描述 对于每一结点s ES.逐步减小从源S到v的最短路径估计 为了方便我们对最短路径问题的研究.下面给出其定义。 定义:在最短路径问题中,给出的是一张有向加权图G=fv, dM直至其到达实际最短路径的权。最多进行IV【G1I一1次松弛操 E1.在其上定义的加权函数w:E—R为边到实型权值的映射。路 作。算法返回True当且仅当图中不存在负权圈。 2_3.2算法分析 径P= %… 的权指的是其组成边的所有权值之和: 该算法的时间复杂度为0(VE)。 w(p)= w( .I,V,) 2.3.3算法优化 该算法名为Shortest path faster algorithm .SPFA其实就是 Bellman—Ford的一种队列实现.减少了冗余,即松驰的边至少不 定义从u到 的最短路径的权为: 讹v)=仨iI∞ Il 2.单源最短路径算法 2.1松弛技术(Relax)f。1 到 l 通 会以一个d为 的点为起点。 2.3.4复杂度分析 SPFA在形式上和宽度优先搜索非常类似.不同的是宽度优 单源最短路径问题所求的是:从某结点s到其它所有结点 先搜索中一个点出了队列就不可能重新进入队列.但是SPFA 的最短路径。这是最短路径问题的基础问题。其它的最短路径问 中一个点可能在出队列之后再次被放入队列.也就是一个点改 题都可以转化为单源最短路径问题进行求解。 进过其它的点之后.过了一段时间可能本身被改进.于是再次用 在每个单源最短路径算法中都运用了松弛技术。松弛一条 边就是试图找到一条比当前已知路径更短的边。对每一结点 ES,我们用卿7来表示从源s到 当前已知的最短路径的权的 上界。称之为最短路径估计。用p,eM ̄表示当前最短路径估计 中 前面的点 松弛一条边 )的过程包括测试我们是否可能通过结点U 对迄今找出的到V的最短路径估计进行改进.如果可能则更新 pre[v]。 注意:单源最短路径的每个算法都要先调用初始化过程.然 4.1算法描述 后重复松弛过程 本质就是用动态规划: 2.2 Diikstra算法闭 来改进其它的点.这样反复迭代下去。设一个点用来作为迭代点 对其它点进行改进的平均次数为k,有办法证明对于通常的(不 含负圈,较稀疏)情况,k在2左右。算法复杂度理论上同Bel1. man—Ford,0 E),但实际上却是0(kE)。 4.每对结点间的最短路径算法 最直接的方法是把每个结点都作为源做一次单源最短路径 算法,我们用n0yd—Warshall算法来解决这类问题。Floyd算法 是一种用来解决关于图G(v.E1间每对结点问的最短路径问题的 算法,可以存在负权边,但我们假定不存在负权圈。 GIJ’fu:u】=Ofu∈、,1 Dijkstra算法解决了有向加权图的最短路径问题.它可以解 决单源最短路径问题.如果以每个点作为源都做一次Dijkstm算 G (u;v)=w(u,v)(u,v∈V) G ”(Il,v)=min{G (u,v),G (u,k)+G O v)}(u,V∈V’l(=l,2,...,V-1) 法,则可以求出每对结点问的最短路径。该算法的条件是所有边 的权值都非负.这个重要的条件使得我们用贪心得到该算法。 2.2.1算法描述 G‘ 表示u到 的不经过 ,k+l,...,,l结点 u,v外 时,从 设置一结点集合5.从源s到集合5中所有点的最短路径 u到 的最短路长。下面用归纳法证明: 均已求出。算法反复挑选出最短路径估计为最小的结点u加入 k=l显然成立。 5集合,并对所有离开结点u的边进行松弛操作.直到所有结点 假设对k成立,下面考虑k+l的情况: 进入集合。 2.2.2算法分析 从u到 且不通过k+1....,,l 节点的最短路有两种可能:(1)不经过k节点,即为G‘ ; 这里的D要用优先队列实现,需用到删除最小(DeleteMin1 (2)经过k节点,即为G‘ G‘ 与减值(DecreaseKey)的操作。假设用普通的队列实现则算法复 由于第k+1次迭代过程中,不会影响k次的迭代结果,使用 杂度为0fv 。如果用Fibonaeei堆来实现优先队列则算法复杂 o(v:3 ̄J空间即可。二维数组pre(u,v),记录u到 ,最后经过哪个 度为O(IEI+IVIIglVI)。 k的迭代。 2.3 BelIMan-Ford算法闭 4.2算法分析 如果一个图包含负权圈。那么这个图就不存在最短路径。在 时间复杂度为0 3),空间复杂度为0 。 Dijkstra算法中我们假定不存在负权边.而在BeUman—Ford算法 5.Johnson算法 中则可以存在负权边:找到从源s到所有点的最短路径或确定 5.1算法描述 存在负权圈 本算法适用于稀疏图。它是Dijkstra和Belnahn—Ford算法 (下转第20页) 基金资助项目:福建省教育厅基金(JBo4o36) 维普资讯 http://www.cqvip.com 福建电脑 2008年第2期 口 及兴趣度的向量o(a 如以… J。其次,统计每一个兴趣项 v和u分别是权重因子,且口+l‘=J。它们可以通过机器学习 在文档中出现的次数fj,从而构造出用户的兴趣项在文档中出 得到或通过经验取值。 是用户兴趣模型中该兴趣项的兴趣度 现的词频向量 ^t b…t^J。最后根据如下公式,算出文档与用户 原值 兴趣的相似度S: (3)对于那些长期未被更新过的兴趣项,按照如下公式降低其对 ∑ ×fj 上 ——一 应用的兴趣度: …… …(a×鲁 》 首先,根据用户的兴趣模型构造用户兴趣项的向量Q(q % =” Dj 州l一薏老 一‰ Dt.:dt,当D。 n|一Dc < Q ∑f』 j i=1 5.采用用户兴趣模型向用户推荐信息 信息推荐Agent的主要功能是主动搜索网上资源并向用户 其中,dj是该兴趣项原来的兴趣度,Dd一是系统当前日期, 推荐信息。首先,它以用户兴趣模型中兴趣度较高的部分兴趣 是该兴趣项最后一次被更新的日期, 是该兴趣项创建 项,通过现有的搜索引擎搜索信息。其次。启动信息过滤Agent 出的日期, —。 表示到目前为止该兴趣项未曾被更新过的 对搜索到的信息进行过滤。最后,把过滤后的信息推荐给用户 天数, 一一 表示到目前为止该兴趣项已在库中存在的天 6.小结 数。 本文讨论了应用Agent技术来实现在Web客户端的个性 (4)由于用户兴趣模型空问是有限的。用户兴趣模型有一个 化服务。智能Agent通过学习来建立用户兴趣模型.并以此模型 最大的兴趣项容量,当兴趣项超过这个最大容量时,将模型中的 来实现个性化的服务:对用户搜索的信息进行过滤.提高搜索的 些低兴趣度的兴趣项删除。使兴趣项固定在某一范围。从而实 精确度;主动向用户推荐信息。 现对用户兴趣的动态追踪 4.采用用户兴趣模型对用户检索的信息进行过滤 参考文献: 信息过滤Agent根据用户兴趣模型对从搜索引擎返回的结 1.Y.Seo and B.Zhang,Personalized web—document filtering using rein-  ̄orcement learning.A ed Arfficial Intelligence,2001. 果进行过滤,使得这个搜索结果尽可能精确地符合用户的需求。 婉克娟李晋宏,应用Agent技术实现个性化信息服务o】.北方工业大 这个过滤主要是通过计算检索到的文档与用户兴趣的相似度. 2.学学报。Vo1.16 No 3 Sept.2004. 得到文档与用户兴趣相关的程度.将相似度超过一定闭值的文 3.殷信义刘锦高等,智能网站Agents ̄rmlj].计算机应用研究,2002。第1 档推荐给用户 一期:42-43。 (上接第9页) 的综合应用 算法 时闻复杂度 特殊敫据结构 使用范圈 本算法用了权值改造 weightin 技术。若图的权值非负,则 对于每个结点用一次Dijkstra算法.就可以求出所有顶点对间最 短路。若图中有负权,但没有负圈,则可以把权值W改造成W , W 非负,使得能够使用Diil【stra算法 Dijmra Bellman Floyd Johnso ̄ o(吲+Iv v1) Fibomcci墟 前向星 投都为正的圈 所有圈 所有罔.较常用于先仝l|l 所有圈.较常闭于稀琉圈 ot 1 0[v’) 前向星 邻接矩阵 ①给图G,加一个新结点口o。对%用Bellman-Ford,若有负 圈,则结束;否则可以得到/,4v),即 到口的最短路长。OfrE) 0qPfbIIVl ̄IPl£I Fibonacci堆 前向星 ②对于所有边 口J,权值改造,即令埘,( 口J=埘 口J fuJ—h OOn) ③对于每个结点,用一次以Fibonacci Heap为优先队列的 D/jkstra算法.可求出口与其他顶点的最短路。O(VlogV+E)*off) 。权值改造满足两个原则:(1)W 非负;(2)对于任意顶点U,v, P是在W上的u到v的最短路当且仅当P是在W 上的U到v 的最短路。下证Il『和 埘 口 危fu卜危 ,满足以上两个原则: (1)由于h是vo到v的最短路长,危ruJ+lc, 口J≥危 J,所以埘 在单源最短路径问题中.Dijkstra算法适合于处理权值都为 正的图.而Bellman则适用于含有负权的图.并且可以处理负权 圈。改进后的SPFA是最快的。 在有向无环图中有特殊的算法,可以在的时问内实现。 在所有点之问的最短路径问题中.我们可以多次运行SPFA 算法。但在完全图中n0yd算法则更为优秀,并且实现简单。 参考文献: 1.Herbert S.WilE.Algorithms and Complexity.Universiy of tPennsylvania, 1994 砂 口 危(I }- ≥0。 令路径p= 口 L,vO,则 k k 2.111oma¥H.Cormen,Charles E.Leiserson,R.onald L.Rivest,and Cli髓rd Stein.Introduction tO Algorithms.MIT Press,Cam bnage,MA,2001 3.Michad Sipscr.Introduction tO the Theory of Computation。second edi_ tion.Thorn∞n,USA,2o06. 1.,l(p)--Z1.,’(y『_I,yf)=∑[1.,( 一I, )+ ( I)一 ( )】 2 /=2 =1.,(p)+ (y1)一 ( ) Il『例只与t‘I 以及首尾的标号h有关,不影响Il『 J的决策。所以 Il『 上是最短路长当且仅当埘 最短路长,且不影响最短路P。 6.结论 4.R.obert Sedgewick,Philippe Flajolet An Introduction tO the A『l y of AIgorithms.Addison—Wesley Professional,USA,2006.