- 主题:弗洛伊德算法有一点不太懂
void floyd() {
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
}
}
}
}
为何三重循环以后就更新了*所有*节点对之间的最短路径长度?
意思是说,前面执行阶段得到了部分节点对之间的最短路径长度,会影响后面阶段计算的最短路径,
那么,后面阶段计算的最短路径,如果再运行一次该函数,会不会使部分节点间计算出来的最短路径更短?
--
FROM 218.108.223.*
AI说得没那么清楚
【 在 RuralHunter 的大作中提到: 】
: 程序员遇事不决问ai
:
--
FROM 218.108.223.*
AI的回答没那么清楚:
通常情况下,再次运行该函数不会使部分节点间计算出来的最短路径更短。原因如下:
算法收敛性:弗洛伊德算法经过一次完整的三重循环后,已经考虑了所有可能的中间节点组合,从而得到了所有节点对之间的最短路径。也就是说,在第一次运行结束后,dist 数组中存储的已经是最终的最短路径长度。
无负权环假设:弗洛伊德算法在没有负权环的图中是收敛的。如果图中存在负权环,那么最短路径的概念就变得没有意义,因为可以沿着负权环不断循环,使得路径长度不断减小。但在正常情况下,假设图中不存在负权环,再次运行函数不会改变已经得到的最短路径长度。
--
FROM 218.108.223.*
这个文档是一般的介绍
【 在 Jacqueline 的大作中提到: 】
: 上wiki查啊,简单的数学归纳法。
--
FROM 218.108.223.*
算了
【 在 Jacqueline 的大作中提到: 】
: 这上面已经写得足够细致了,如果你看不懂,是高中数学没学好,
: 不是人家写得不清楚。
--
FROM 218.108.223.*
我高中就是靠数理化考上重点大学的
【 在 Jacqueline 的大作中提到: 】
: 找一本几十年前的高中甲种本,或者数理化自学丛书,翻到数列与数学归纳法那章,
: 先把n条直线最多能把平面分成几块,n个平面最多能把空间分成几块的证明搞清楚,
: 回来再看这个算法,自然能懂。都是同一难度的简单证明。
--
FROM 218.108.223.*
归纳法、演绎法,怎么可能会没有
再说会编程的人都知道归纳法
【 在 Jacqueline 的大作中提到: 】
: 你考大学的时候数学归纳法已经从课本上删除了。
: 高中数学唯二有用的两个模块:三角函数及其恒等式,数列与数学归纳法,
: 在最近的防自学设计中都删的差不多了。
--
FROM 218.108.223.*
高中数学老师上课讲题,“这道题用数学归纳法……”,耳朵都听腻了
【 在 Jacqueline 的大作中提到: 】
: 数学归纳法不是归纳法演绎法的那个归纳法
: 【 在 ooolinux 的大作中提到: 】
: : 归纳法、演绎法,怎么可能会没有
: : 再说会编程的人都知道归纳法
--发自 ismth(丝滑版)
--
FROM 112.50.54.*
有的书没有
【 在 profounder 的大作中提到: 】
: 随便找本数据结构书,讲得很清楚。
:
: 【 在 ooolinux 的大作中提到: 】
: : void floyd() {
: : for (int k = 0; k < n; k++) {
: : for (int i = 0; i < n; i++) {
--发自 ismth(丝滑版)
--
FROM 112.50.54.*
GUI程序应该可以演示过程,求出每对节点间的最短路径。但它们是不是最终的最短路径,从GUI应该看不出来,除非再运行一次数值没有变化(但也可能是特例偶然的,不是充分的证明)
【 在 z16166 的大作中提到: 】
: AI是全知全能的,它说得清楚还是不清楚,全看你的提示词,也就是要会问。
: 通过合适的提示词把AI肚子里的东西给勾出来。
:
: 你可以让它给你用一个具体的例子详细解释清楚每一步,甚至写一个可以把整个搜索过程可视化的gui程序。就跟我之前弄的那个迷宫展示一样,那个还没展示每一步的过程。
:
: 把AI只当个搜索引擎用,那是亏大了,拿着个金刚钻当铁锹用
--发自 ismth(丝滑版)
--
FROM 112.50.54.*