注册 登录
明经CAD社区 返回首页

风树的个人空间 http://www.mjtd.com/?408117 [收藏] [复制] [分享] [RSS]

日志

最短路径算法概述

已有 514 次阅读2014-7-29 11:58 |系统分类:知识

--备忘--
最短路问题:
       最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 用于解决最短路径问题的算法被称做“最短路径算法”, 有时被简称作“路径算法”。 

数学定义:
       一个有权重的有向图 G,以及G中的一个来源顶点 S。我们以 V 表示 G 中所有顶点的集合。每一个图中的边,都是两个顶点所形成的有序元素对。(u, v) 表示从顶点 u 到 v 有路径相连。我们以 E 表示G中所有边的集合,而边的权重则由权重函数 w: E → [0, ∞] 定义。因此,w(u, v) 就是从顶点 u 到顶点 v 的非负权重(weight)。边的权重可以想像成两个顶点之间的距离。任两点间路径的权重,就是该路径上所有边的权重总和。

最短路径问题的主要形式包括:
      确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。适合使用Dijkstra算法。
      确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。
      确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。
     全局最短路径问题 - 求图中所有的最短路径。适合使用Floyd-Warshall算法。

最常用的路径算法有:
    Dijkstra算法  (不存在负边)

    A*算法

    Bellman-Ford算法(Bellman-Ford算法--能存在负权边的情况下解决单源点最短路径问题)

    SPFA算法 (Bellman-Ford算法的改进版本)

    Floyd-Warshall算法(Floyd-Warshall算法是解决任意两点间的最短路径的一种算法,它需要用邻接矩阵来储存边。通常可以在任何图中使用,包括有向图、带负权边的图。)

    Johnson算法(Johnson算法适用于求All Pairs Shortest Path. Johnson算法应用了重标号技术,先进行一次Bellman-Ford算法,然后对原图进行重标号,w'(i,j)=h[i]-h[j]+w(i,j)。然后对每个点进行一次Dijkstra,每次Dijkstra的复杂度为O(nlogn+m),于是算法复杂度为O(n^2logn+m))

    Bi-Direction BFS算法


 已同步至 风树的微博

评论 (0 个评论)

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-10 05:17 , Processed in 0.079511 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部