深度搜索法求解不定期最短路径问题.docVIP

深度搜索法求解不定期最短路径问题.doc

此“司法”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

深度搜索法求解不定期最短路径问题

PAGE

PAGE1

深度搜索法求解不定期最短路径问题

问题的提出

所谓不定期最短路径问题是指如何从不同的节点处通过有限次到达终点,求解到达的最短路径。此类问题形式上属于网络和图,但是我们完全可以通过动态规划方法来求出最优解。

求解方法的弊端

通常求解此类问题的方法是运筹学中的函数迭代法和策略迭代法。这两种办法都不同程度地存在着浪费计算的问题:有些节点显然不可能是最优路径,但是为了求解的完整性,我们必须求出许多冗余数据。而且随着节点数的增多,计算量会以平方级数大大增加。

新的求解思路

我们发现,人来求解此类问题并不是从一个一个节点地遍历计算每一个结果,最后来比较的,而是先有选择地找到一些感觉上比较好的路径,在计算一些简单的数,最后比较的个数就少多了。而且人经常不自觉地会顺着一些“捷径”来找最短路径,往往几个节点的最短路径都在一条路上。所以通过模拟人类求解此类问题的方式,我采用了一个树形结构来求解最终值,这种办法就形象地被称为深度搜索法。它可以使用计算机来求解,而且通过层层筛选后,实际的计算量少得多。当节点数增加的时候,这种办法的优越性就体现出来了,他的计算量增长是线性递增的。

下面我一个例子来阐述这个方法。

例题

[选自《运筹学基础》(张莹编著)第221页]设总共有N个城市,是任两城城i与城j之间的距离,有。求:各城市到第5个城市之间的最短路径和最短距离(不限定步数)。

图图1 路线图

例题分析

求解这道题书上用了两种思路——函数迭代法和策略迭代法。

但是求解的出发点都是把这个系统模型化,尽量算出可能的解,最后经过比较,得出最小路径。我们可以清楚地看到,包含了这么少信息的一道题,书上用了两页的篇幅来阐述解法,而且其中只罗列出了每一步的最优结果;而我们其实自己来做的话,可能通过心算就可以解决了,这就是为什么我看到这个解法有些干着急的原因。

新的求解思路:

为了更清楚地阐述深度搜索法的求解步骤,我想先让大家跟我一起了解我是如何想出这个办法的。一般以人的思路来说,我们首先先找到每个节点到5节点的步数;其次从第1点开始,我们看到除了直接到5节点外,其他的方法的步长都不是最优的。当然我们看到2点的时候,总是自然而然地先找最小步长的出路(2-)3),在一步步地沿着最小步长的路找到5点,由于步数最多有4步,所以很容易地找到最优的解,于是我们按照这种方法就很快地得出最优解:

节点名称

eq\o\ac(○,1)

eq\o\ac(○,2)

eq\o\ac(○,3)

eq\o\ac(○,4)

路径方式

eq\o\ac(○,5)-eq\o\ac(○,1)

eq\o\ac(○,5)-eq\o\ac(○,4)-eq\o\ac(○,3)-eq\o\ac(○,2)

eq\o\ac(○,5)-eq\o\ac(○,4)-eq\o\ac(○,3)

eq\o\ac(○,5)-eq\o\ac(○,4)

路径长度

2

5

4

3

总结上面的方法,我们发现,这种思路与先前的思路截然不同的地方是:这种方法是面向节点的,而不是面向步长的,由于节点的有限性,决定了这类方法的步数的有限性,在求解中,我们可以从一个节点走向另一个节点,当发现不行的时候再退回来,选择其他节点,这种解题的思路有些像计算机算法里的树形结构,树的深度只有有限层,到了叶子后再退回来走其他分支,最后找到最优的路径。所以我将这种算法叫做深度搜索法。

具体求解方法:

第一步,找出图中的起始点和目标点。

本例中起始点是eq\o\ac(○,1),eq\o\ac(○,2),eq\o\ac(○,3),eq\o\ac(○,4);目标点是eq\o\ac(○,5)。

第二步,找出起始点到目标点最短距离,作为参考点。选择这个参考点的意义在于,不管步长如

图6 搜索结果

结果分析

按照深度搜索的方法,我们可以很快的得到所需要的解,与先前按照迭代法得出的结论完全一致。

优点分析:

深度搜索法所走的深度(在用迭代法可以用迭代次数来衡量该指标)只有N-1,不存在收敛问题;

没有进行太多的冗余计算,并在这种情况下能全部找到所有的最优路径;

树形结构便于计算机求解。

当节点数增加的时候,计算量呈线性增长;

计算机实现方法:

由于写报告的时间仓促,没有时间便出具体的程序清单,这里只是从编程的结构上来分析如何在计算机上实现此算法。

结构体的定义

要在计算机上实现该算法,我们目前只能就题论题,目前还没有想出通解的计算机程序算法,问题是出在结构体的定义上。该结构体包含了两个信息:结构信息和指针信息。结构信息包括了节点标识,底层节点信息、路径信息,纪录走过的节点的数组;指针信息主要是子节点的首地址。结构信息里,先前如果走过的节

文档评论(0)

187****2001 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档