Folyd算法(转+适合问题 )
Folyd算法适合多源最短路的求解问题(时间复杂度(O(n^3)),单源无负权值的问题适合Dijstra(O(n^2))
小Hi强行装作没听到,继续说道:“这个算法的核心之处在于数学归纳法——MinDistance(i, j)之间最短路径中可以用到的节点是一点点增加的!”
“你这话每一个字我都听得懂,但是这句话为什么我听不懂呢……”小Ho无奈道。
“那我这么说吧,首先,最开始的时候,MinDistance(i, j)——即从第i个点到第j个点的最短路径的长度,拥有一个限制:这条路径不能经过任何节点。”小Hi道。
“那就是说如果从i个点到第j个点之间没有直接相连的边的话,这个长度就是无穷大咯?”小Ho总结道:“只需要把输入的边填进MinDistance中即可!”
“对!”小Hi满意于小Ho的上道,继续说道:“然后我放开限制,我允许MinDistance(i, j)——从第i个点到第j个点的最短路径的长度,拥有的限制,变为:这条路径仅允许经过1号节点。”
“这个也简单,对于两个节点i, j,我只需要比较MinDistance(i, j)原来的值和MinDistance(i, 1)+MinDistance(1, j)的值,取较小的一个作为新的MinDistance(i, j)就可以了——毕竟原来的MinDistance都是不经过任何节点,那么这样求出来的新的MinDistance(i, j)只有可能经过1号节点。”
“那么接下来就是关键的了,我将限制继续放宽——路径仅允许经过1、2号节点。”小Hi继续说道。
“那其实也没有任何变化吧,对于两个节点i, j,我只需要比较MinDistance(i, j)原来的值和MinDistance(i, 2)+MinDistance(2, j)的值,取较小的一个作为新的MinDistance(i, j),之所以可以这样是因为,原来的MinDistance都是在限制“仅允许经过1号节点”下,求出来的,所以新求出来的MinDistance(i, j)也只有可能经过1、2号节点!“
“那我继续放开限制呢?”小Hi问道。
“也没有什么区别了,每放开一个新的节点k允许作为路径中的节点,就对于任意的i, j,用MinDistance(i, k)+MinDistance(k, j)去更新MinDistance(i, j),直到1..N号节点都被添加进限制,此时也就等于没有限制了,那么这个时候的MinDistance(i, j)就是我们所想要求的值
//输入边的时候一定要注意重边的选择问题
/*
int u, v, c; scanf("%d %d %d", &u, &v, &c);
dis[u][v] = dis[v][u] = min(dis[u][v], c);
*/
for (int k = 1; k <= n; k++){
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
}
}
}
Folyd算法(转+适合问题 )的更多相关文章
- 六度分离 (folyd算法)
1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为"小世界现象(small world phenomenon)"的著名假说,大意是说,任何2个素不相识的人中间最多只隔着 ...
- 分布式ID系列(5)——Twitter的雪法算法Snowflake适合做分布式ID吗
介绍Snowflake算法 SnowFlake算法是国际大公司Twitter的采用的一种生成分布式自增id的策略,这个算法产生的分布式id是足够我们我们中小公司在日常里面的使用了.我也是比较推荐这一种 ...
- EasyDL的哪种算法更适合你的图像分类应用
相信不少开发者已经或多或少对百度EasyDL有所耳闻或有所尝试,作为零算法基础实现图像分类和物体检测的”神器”,支持使用少量训练数据,使用通用算法训练,就能很快得到一个图像分类模型.最近百度EasyD ...
- BIRCH聚类算法原理
在K-Means聚类算法原理中,我们讲到了K-Means和Mini Batch K-Means的聚类原理.这里我们再来看看另外一种常见的聚类算法BIRCH.BIRCH算法比较适合于数据量大,类别数K也 ...
- 聚类算法kmeans
1. 聚类问题 所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高. 2. ...
- Kmeans聚类算法原理与实现
Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...
- [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- 哈希加密算法 MD5,SHA-1,SHA-2,SHA-256,SHA-512,SHA-3,RIPEMD-160 - aTool
一.MD5哈希加密算法 atool.org MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致.是计算机广泛使用的散列算法之一(又译摘要算法. ...
- LinkedHashMap 和 LRU算法实现
个人觉得LinkedHashMap 存在的意义就是为了实现 LRU 算法. public class LinkedHashMap<K,V> extends HashMap<K,V&g ...
随机推荐
- @Value在Controller中取值
一.使用 @Value("${name}")注解可以获取自定义的properties文件中的name值 二.配置 如果只是在applicationcontext.xml中配置,那么 ...
- 【Android异常】The specified child already has a parent. You must call removeView() on the child's parent first.
错误信息: Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must ...
- Android 自定义格式的对话框
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaoAAADvCAIAAAAsDwfKAAAgAElEQVR4nLy9bZhcVZUofEg0GcURBk ...
- nginx配置域名
其他都一样,就特别说下server块的配置. server { listen 80; server_name www.icweshop.com; # 注意:这里你填写的域名必须在/etc/hosts中 ...
- PL/SQL批处理语句(一)BULK COLLECT
我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理,这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销.然而,FORA ...
- android tween动画和Frame动画总结
tween 动画有四种 //透明度动画 AlphaAnimation aa = (AlphaAnimation) AnimationUtils.loadAnimation(MainActivity. ...
- solr-用mmseg4j配置同义词索引和检索(IKanlyzer需要修改源码适应solr接口才能使用同义词功能)
概念说明:同义词大体的意思是指,当用户输入一个词时,solr会把相关有相同意思的近义词的或同义词的term的语段内容从索引中取出,展示给用户,提高交互的友好性(当然这些同义词的定义是要在配置文件中事先 ...
- dpdk中uio技术
总结一下dpdk的uio技术 一:什么是uio技术 UIO(Userspace I/O)是运行在用户空间的I/O技术,Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可, ...
- p4570 [BJWC2011]元素
传送门 分析 对法力值从大到小排序然后对编号跑线性基即可 代码 #include<iostream> #include<cstdio> #include<cstring& ...
- 使用 create 命令建立数据库v, 并利用sp_helpdb查看数据库文件
create database v on primary (name = v, filename='D:\v.mdf', size=3mb, maxsize=10mb, filegrowth=2mb ...