怎样寻找最短路径
现实生活中,我们经常会碰到这样的问题,如图所示,从A点到E点,怎样走路线最短呢?图上各个结点表示地点,线段表示相应两点之间的道路,线上的数字表示相应的距离。
先考虑穷举法,即把所有的可能路线一一列出,分别算出距离,加以比较,从中选出最短路线。从A到E共有3×3×3×1=27条路线,每条路线要做3次加法,共需81次加法。另外还要作26次比较运算。最后得到最短路线:A→B2→C2→D3→E,相应距离为15。
可以看出,穷举法想起来简单,但实现却很难,特别是当地点多、道路多时,计算量将十分庞大。
有没有其他的方法呢?
可以理解,如果某条路是从A到E的最短路线,则其子路也必是最短的。即如果例题中最短路线为A→B2→C2→D3→E,那么C2→D3→E,必是从C2到E的最短路线。否则用反证法,必可找到一条更短的路线,就与前面矛盾了。最短路线的上述特性,启发我们从终点开始,从后向前逐步递推,求出各点到E的最短子路,最后求出从A到E的最短路线。
![]() |
第一步,从D到E的最短路线:
由D1、D2、D3到E都只有一条路线,故易得f(D1)=5,f(D2)=8,f(D3)=l。f(xi)表示从xi点到E点的最短距离。
第二步,从C到E的最短路线:
从C1出发,有三个选择,到D1、D2或D3,易求得
![]() |
其中d(C1,D1)表示点C1到D1的距离。容易看出最短子路线是:C1→D3→E。
同理,从C2出发,
![]() |
最短路线是:C2→D3→E。
从C3出发,最短子路线是C3→D3→E,f(C3)=6。
同理,可得f(B1)=12,子路线是B1→C2→D3→E;f(B2)=7,子路线是B2→C2→D3→E;f(B3)=13,子路线是B1→C1(或C2)→D3→E。
最后,从A出发,
![]() |
最短路线是:A→B2→C2→D2→E,距离为15。
从计算过程可以看出,计算量大大减少,只需3×3+3×3+3=21次加法,3×2+3×2+2=14次比较。地点越多、路线越多,这一优点越是明显。同时,用这种方法不仅能够得到从起点A到终点E的最短路线,而且可以知道每个点到终点的最短路线。这种方法在数学上称为“动态规划解法”。
“动态规划”是解决多阶段决策过程最优化问题的一种方法,是由美国数学家R.Bellman等人1951年提出的解决这类问题的“最优化原理”发展形成的一个数学分支。动态规划的方法在工程技术、经济管理、工业生产和军事等方面都有着广泛的应用,并且日益受到重视,甚至还用在计算机程序中,因为有些复杂问题,如果用穷举法,即使是计算机,也难以承受其计算量。
关键词:穷举法 动态规划
- 上一篇
为什么鱼在水中总是交替地向上游动与向下滑行V5
如果你仔细观察一下鱼在水中游动的情况,你就会发现,它们总是交替地向上游动和向下滑行,这是为了减少能量的消耗而采取的方法。那么,为什么这样游可以减少能量的消耗呢? 假定鱼保持常速v移动。令D是以此速度滑行时鱼所受的阻力,W是鱼在水中的净重,α是向下滑行的角度
- 下一篇
为什么4×100米接力赛跑中的百米跑成绩会好于百米赛跑时的成绩!
1968年10月,在墨西哥举行的第19届夏季奥林匹克运动会上,美国男子选手海因斯以9"9的成绩首次突破了百米赛跑的10秒大关,树起了田径运动史上的又一块里程碑。也在这次运动会上,美国队的4×100米的接力赛跑的成绩竟达到38"2,平均每100米所花的时间还