`
flyfy1
  • 浏览: 74372 次
  • 性别: Icon_minigender_1
  • 来自: Singapore
社区版块
存档分类
最新评论

几个常用最短路径算法

阅读更多

今天来总结一下常用的最短路径算法。符号简称:E -- # of edges; V -- # of vertexes

 

Single Source Shortest Path: 

on non-weighted Graph: Bredth First Search

Non-Negative-Cylic Graph: Dikstra -- BFS + Priority Queue  -- O(E) + O(V log V)

Graph With Negative Cycle: Bellman Ford's: Relax Node for N-1 times, then check if can still relax node (negative cycle)

Time Complexity: O(E * V)

还有国产的Shortest Path Faster Algorithm: 用一个队列记录当前relex的node。每次拿出要relex的node来继续relex。如果有一个node relex的次数超过了n次,那么说明有负环 —— O(kE),一般情况下k < 2。国产的东西就是好。

 

Minimum Spaning Tree:

Prim's -- O(E log V): 找当前点可见边中,连接没有visit过的点的最短的。

Kruskal's -- O(E log(E)) = O(E log(V)):首先Sort一下所有边。然后从weight最小的两条边一点点加点进来,直到包含了所有点。

 

All Pair Shortest Path:

Floyd Warshall (V^3): 只要记住这个recursive formula就会写code了:

define function: shortest(i,j,k) ==> the shortest path from node i to node j, only pass by element from set {1,...,k}

shortestPath(i,j,0) = w(i,j)

shortestPath(i,j,k) = min(shortestPath(i,j,k-1), shortestPath(i,k,k-1) + shortestPath(k,j,k-1))

 

分享到:
评论

相关推荐

    C#实现最短路径算法

    这里我们将探讨几种常见的最短路径算法,并且会提及如何用C#来实现它们。 1. **Dijkstra算法**:由艾兹格·迪科斯彻提出的Dijkstra算法是最常用的解决单源最短路径问题的方法。它通过维护一个优先队列(通常是二叉...

    android 各种最短路径算法

    以下是对几种常见最短路径算法的详细讲解: 1. **迪杰斯特拉算法 (Dijkstra's Algorithm)** 迪杰斯特拉算法是一种单源最短路径算法,它能找出从一个指定起始节点到图中所有其他节点的最短路径。算法基于贪心策略,...

    经过指定节点的最短路径算法GUI程序

    常见的最短路径算法有Dijkstra算法、Floyd-Warshall算法、Bellman-Ford算法等。在这个程序中,可能采用了其中一种或结合多种算法来解决经过指定节点的问题。 2. **Dijkstra算法**:Dijkstra算法是最常用的单源最短...

    C语言最短路径算法实现

    本篇将重点介绍如何使用C语言来实现最短路径算法,并探讨几种常见的算法。 1. **Dijkstra算法** Dijkstra算法是最常用的单源最短路径算法,适用于有权图。它的基本思想是从起点开始,逐步扩展最短路径树,直到覆盖...

    最短路径算法

    这里,我们主要探讨几种常见的最短路径算法及其原理。 1. **Dijkstra算法**:由荷兰计算机科学家艾兹格·迪科斯彻提出,适用于有向图或无向图,且边的权重非负。Dijkstra算法采用贪心策略,逐步扩展最短路径树,...

    最短路径算法的改进与实现

    ### 最短路径算法的改进与实现 #### 一、最短路径问题的研究背景及应用场景 最短路径问题作为图论中的一个重要课题,在诸多领域中都有着广泛的应用,包括但不限于交通运输、网络寻优等领域。该问题的核心在于寻找...

    winform 图和最短路径算法源码

    常见的最短路径算法有: 1. Dijkstra算法:由Edsger Dijkstra提出,适用于有权重的图,保证找到从起点到所有其他顶点的最短路径。它是贪心策略的一种,每次选择当前未访问顶点中最短的边进行扩展。 2. Bellman-...

    vc++实现最短路径算法

    本篇将深入探讨如何利用VC++实现最短路径算法,以及涉及到的数据结构。 最短路径问题通常在有向或无向图中出现,寻找从一个特定起点(源节点)到其他所有节点的最短路径。在标题"vc++实现最短路径算法"中,我们关注...

    数据结构最短路径算法实现

    首先,我们要了解几种常见的最短路径算法: 1. **Dijkstra算法**:这是解决单源最短路径问题的经典算法,适用于带非负权重的有向或无向图。它通过维护一个优先队列来逐步扩展最短路径树,直到到达目标节点。 2. **...

    VC游戏编写中的求解最短路径算法源码

    常见的最短路径算法有以下几种: 1. Dijkstra算法:这是解决有向图或无向图中最短路径问题的经典算法。Dijkstra算法保证找到的路径是最短的,但无法处理负权边的情况。在游戏中的应用,例如角色寻找最快到达敌人...

    c语言最短路径算法,图论网络研究

    在深入探讨最短路径算法之前,我们首先需要了解几个基本概念: 1. **图**:由顶点(或节点)和边组成的数学结构,用来表示对象间的成对关系。 2. **有向图**与**无向图**:在有向图中,边具有方向性;而在无向图中...

    最短路径算法实现C# VC++

    有几种经典的最短路径算法,其中包括Dijkstra算法、Floyd-Warshall算法和Bellman-Ford算法。 1. **Dijkstra算法**:由荷兰计算机科学家艾兹格·迪科斯彻提出,是最常用的一种单源最短路径算法。它通过维护一个优先...

    单源最短路径算法(MapReduce)源代码

    ### 单源最短路径算法(MapReduce)源代码解析 #### 一、概述 本篇文章主要解析一个关于单源最短路径(Single Source Shortest Path, SSSP)算法在MapReduce框架下的实现源代码。单源最短路径问题是指在一个带有权重...

    Floyd最短路径算法_Floyd算法_write8lf_matlab_弗洛伊德算法_最短路径_源码

    **Floyd最短路径算法**,也称为Floyd-Warshall算法,是计算机科学中用于求解图论问题的一种经典算法。它能有效地找到图中所有顶点对之间的最短路径,尤其适用于处理大型网络中的路径查找问题。Floyd算法的核心思想是...

    哈工大数据结构与算法-图型结构的应用算法-最短路径算法的实现.zip

    常见的最短路径算法有Dijkstra算法、Floyd-Warshall算法和Bellman-Ford算法。 1. Dijkstra算法:这是一种基于贪心策略的单源最短路径算法,适用于没有负权边的图。Dijkstra算法通过维护一个优先队列(通常用二叉堆...

    Dijkstra算法寻找最短路径的完整源代码

    Dijkstra算法是一种常用的寻找最短路径的算法。该算法的主要思想是,通过从起点开始,逐步扩展到达的邻接点,直到找到目标点,并记录下来的最短路径长度。Dijkstra算法的时间复杂度为O(|E|+|V|log|V|),其中|E|是边...

    基于邻接表的最短路径算法讨论及c#语言实现.doc

    本文将探讨几种基于邻接表的最短路径算法,包括Dijkstra算法、SPFA算法、A*算法和Bellman-Ford算法。 1. Dijkstra算法: Dijkstra算法是最常用的解决单源最短路径问题的算法,由荷兰计算机科学家艾兹格·迪科斯彻...

    最短路径实现算法

    在C语言中实现最短路径算法,通常会涉及到以下几个核心知识点: 1. 图的表示:在C语言中,图可以使用邻接矩阵或邻接表来表示。邻接矩阵用二维数组存储图中每对节点间是否存在边以及边的权重,而邻接表则更节省空间...

    快递求最短路径

    常见的最短路径算法有迪杰斯特拉算法、贝尔曼-福特算法、弗洛伊德算法以及A*搜索算法等。在这个项目中,可能是应用了其中的一种或几种。 1. 迪杰斯特拉算法:适用于无权边或非负权重的有向图,从一个起点开始,逐步...

    毕业设计 最短路径算法.zip

    几种常见的最短路径算法包括: 1. **Dijkstra算法**:由艾兹格·迪科斯彻提出,适用于处理带非负权重的图。该算法使用贪心策略,每次选取当前未访问节点中距离源节点最近的一个,并更新所有相邻节点的距离值。直到...

Global site tag (gtag.js) - Google Analytics