最短路径算法对比分析

N代表顶点个数,M代表边的条数.

Floyd算法虽然总体时间复杂度,但是可以解决负权边(不能解决负权环,实际上这几种都无法解决负权回路,因为一直循环下去总能找到更小的路径),并且均摊到每一点对上,在所有的算法中还是比较好的. Floyd算法代码复杂度小也是一大优势. Dijkstra算法最大的弊端就是无法适应有负权边的图,但Dijkstra具有很好的可扩展性,另外在Dijkstra算法在选择剩余不在最短路径顶点的集合中选择最小值是可以堆优化,这样算法的时间复杂度可以达到O(MlogN).
当图中含有负边时,使用Bellman-Ford或者SPFA算法.

参考:《啊哈!算法》一书,这本书通俗易懂,过程详细并配有图画讲解,都是一些基本的数据结构和算法知识,期待更给力的作品.

本书的作者网址:http://blog.csdn.net/ahalei

时间: 2024-10-06 18:21:49

最短路径算法对比分析的相关文章

最短路径(五)—最短路径算法对比分析

Floyd算法: 时间复杂度高,可以解决负权边,并且均摊在每一点对上,在所有算法中还是属于较优的.较小的编码复杂度也是优势,如果要求是所有点之间的最短路径,或者如果数据范围较小,Floyd算法比较适合. Dijkstra算法: 无法解决负权边的图,但有良好的可扩展性,时间复杂度低,堆优化后的Dijkstra的时间复杂度可以达到O(MlogN). Bellman-Ford算法: 可以解决负权边的图,可以判断是否有负权回路.

排序算法系列——八大排序算法对比分析

本系列最后一篇,综合分析下前面介绍的八种排序算法的效率,以及各自的适用情况. 下面先看看八种排序算法的时间复杂度表格: 图中八种排序被分成了两组,一组时间复杂度为O(n^2),另一组相对高效些. 下面先对第一组O(n^2)的四种排序算法进行对比,分别取数组长度为100,1000,10000,100000四个数量级,各个元素在0-10000000之间随机获取.下面看下结果的分析. 排序算法 长度=100 长度=1000 长度=10000 长度=100000 直接插入排序 535 2,198 135

最短路径算法的命令式、函数式版本对比分析

C版本(来自 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)) 1 /*************************************** 2 * About: 有向图的Dijkstra算法实现 3 * Author: Tanky Woo 4 * Blog: www.WuTianQi.com 5 ***************************************/ 6 7 #include <iostream> 8 using namespace

(转)netty、mina性能对比分析

转自: http://blog.csdn.net/mindfloating/article/details/8622930 流行 NIO Framework netty 和 mina 性能测评与分析 测试方法 采用 mina 和 netty 各实现一个 基于 nio 的EchoServer,测试在不同大小网络报文下的性能表现 测试环境 客户端-服务端: model name: Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz cache size: 6144 KB

最短路径算法整理(二)

本文是最短路径算法整理的第二篇,想阅读第一篇的朋友能够点击下面链接: http://blog.csdn.net/hjd_love_zzt/article/details/26739593 这一篇博客继续以一些OJ上的题目为载体,整理一下最短路径算法.会陆续的更新... 1.HDU 2544 题目与分析:这道题抽象一下,还是:"求a到b的最短路径"..所须要的基本条件是:点数.边数.起点.终点 下面给出floyd.dijkstra.bellmanford三种最短路径算法关于这道题的解法:

(最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍

这一篇博客以一些OJ上的题目为载体.整理一下最短路径算法.会陆续的更新... 一.多源最短路算法--floyd算法 floyd算法主要用于求随意两点间的最短路径.也成最短最短路径问题. 核心代码: /** *floyd算法 */ void floyd() { int i, j, k; for (k = 1; k <= n; ++k) {//遍历全部的中间点 for (i = 1; i <= n; ++i) {//遍历全部的起点 for (j = 1; j <= n; ++j) {//遍历

余弦距离、欧氏距离和杰卡德相似性度量的对比分析(转)

1.余弦距离 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量. 向量,是多维空间中有方向的线段,如果两个向量的方向一致,即夹角接近零,那么这两个向量就相近.而要确定两个向量方向是否一致,这就要用到余弦定理计算向量的夹角. 余弦定理描述了三角形中任何一个夹角和三个边的关系.给定三角形的三条边,可以使用余弦定理求出三角形各个角的角度.假定三角形的三条边为a,b和c,对应的三个角为A,B和C,那么角A的余弦为: 如果将三角形的两边b和c看成是两个向量,

常用hash函数对比分析(一)

主要目标:寻找一个hash函数,高效的支持64位整数运算,使得在速度.空间等效率相对其它函数函数较高,以及内部运算时32位整数运算. 测试了"RSHash","JSHash","PJWHash","ELFHash","BKDRHash","SDBMHash","DJBHash","DEKHash","BPHash","

Android和Linux应用综合对比分析

公开发布的序言: 这篇文章是作于2012年7月12日,也就是自己刚从大学校园迈向工作岗位的时候遇到的第一个题目"请你针对我们公司目前的应用行业场景做一下调研:在终端做应用程序开发的平台是选择Linux好还是Android好"而写的. 在踏出校园之前,自己从来没有接触过安卓的开发领域(除了在2010年下半年买了一部分安卓的智能手机外).接到这个题目后,自己也没有退缩,硬着头皮接下来了,然后凭借自己在学校时候学的一点检索信息写学术论文的小功底,三天之内写下了这篇长达1万4千多字的调研报告,