- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《常见算法
A*搜索算法评价函数:F = G + H*G已知的到达某点g的距离*H从g达到目标点的估计距离? 1,把起始格添加到开启列表。?2,重复如下的工作:?a) 寻找开启列表中F值最低的格子。我们称它为当前格。?b) 把它切换到关闭列表。?c) 对相邻的格中的每一个? * 如果它不可通过或者已经在关闭列表中,略过它。否侧继续。 * 如果它不在开启列表中,把它添加进去。把当前格作为这一格的父节点。记录这一格的F,G和H值。 * 如果它已经在开启列表中,用G值为参考检查新的路径是否更好。更低的G值意味着更好的路径。如果是这样,就把这一格的父节点改成当前格,并且重新计算这一格的G和F值。如果你保持你的开启列表按F值排序,改变之后你可能需要重新对开启列表排序。?d) 停止,当你 * 把目标格添加进了关闭列表,这时候路径被找到,或者 * 没有找到目标格,开启列表已经空了。这时候,路径不存在。?3.保存路径。从目标格开始,沿着每一格的父节点移动直到回到起始格。这就是你的路径。计算时还需考虑多源同时搜索,CPU耗时。方法有采用二差堆、分层搜索(宏观密度小,微观密度大)。二分查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。分支界定算法1、基本思想 分枝定界法是一个用途十分广泛的算法,运用这种算法的技巧性很强,不同类型的问题解法也各不相同。分支定界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集(称为分支),并为每个子集内的解的值计算一个下界或上界(称为定界)。在每次分支后,对凡是界限超出已知可行解值那些子集不再做进一步分支。这样,解的许多子集(即搜索树上的许多结点)就可以不予考虑了,从而缩小了搜索范围。这一过程一直进行到找出可行解为止,该可行解的值不大于任何子集的界限。因此这种算法一般可以求得最优解。 将问题分枝为子问题并对这些子问题定界的步骤称为分枝定界法。2、分枝节点的选择 对搜索树上的某些点必须作出分枝决策,即凡是界限小于迄今为止所有可行解最小下界的任何子集(节点),都有可能作为分枝的选择对象(对求最小值问题而言)。怎样选择搜索树上的节点作为下次分枝的节点呢?有两个原则: 1)从最小下界分枝(优先队列式分枝限界法):每次算完界限后,把搜索树上当前所有叶节点的界限进行比较。找出限界最小的节点,此结点即为下次分枝的结点。 ?优点:检查子问题较少,能较快地求得最佳解; ?缺点:要存储很多叶节点的界限及对应的耗费矩阵,花费很多内存空间。 2)从最新产生的最小下界分枝(队列式(FIFO)分枝限界法):从最新产生的各子集中按顺序选择各结点进行分枝,对于下届比上届还大的节点不进行分枝。 优点:节省了空间;缺点:需要较多的分枝运算,耗费的时间较多。 这两个原则更进一步说明了,在算法设计中的时空转换概念。分枝定界法已经成功地应用于求解整数规划问题、生产进度表问题、货郎担问题、选址问题、背包问题以及可行解的数目为有限的许多其它问题。对于不同的问题,分枝与界限的步骤和内容可能不同,但基本原理是一样的。分支限界法的基本解决问题的思路?1.构造解空间树?2.以广度优先方式或最小耗费优先方式搜索解空间树?3.构造节点处理的方式,一旦活结点成为了拓展节点,就一次产生其所有儿子节点?4.不可能产生可行解或者肯定不能产生最优解的儿子被删除,其余被加入到活结点表中?5.从活结点表中取下一节点成为当前的拓展节点,重复上述过程,直到找到所需解或者或节点表为空Dijkstra算法按路径长度递增次序产生最短路径算法: 把V分成两组: 1)S:已求出最短路径的顶点的集合 2)V-S=T:尚未确定最短路径的顶点集合 将T中顶点按最短路径递增的次序加入到S中,保证:(1)从源点V0到S中各顶点的最短路径长度都不大于从V0到T中任何顶点的最短路径长度 (2)每个顶点对应一个距离值 S中顶点:从V0到此顶点的最短路径长度 T中顶点:从V0到此顶点的只包括S中顶点作中间 顶点的最短路径长度 依据:可以证明V0到T中顶点Vk的最短路径,或是从V0到Vk的 直接路径的权值;或是从V0经S中顶点到Vk的路径权值之和(反证法可证) 求最短路径步骤 算法步骤如下: 1. 初使时令 S={V
文档评论(0)