zoukankan      html  css  js  c++  java
  • 最佳路径搜索算法2

    问题:假如有人提出,最佳的路径是SADG,那么,将如何验证?

    答:遍历其他路径,看看是否存在,比SADG更短的路径。

    问题:其他路径是否需要"扩展"到最后?

    答:不需要。

    在检验其他路径的时候,如果累积路程大于SADG,即11,就不需要再扩展下去了。


    根据上一节:https://www.cnblogs.com/pylblog/p/10287740.html

    广度优先查找路径的基础上,添加:在扩展到目的点G的时候,继续扩展其他路径,除非这条路径长度大于上一条到达G的路径。

    伪代码:

    暂时最佳路径 P

    while(T.Count>0)

    {

        if ( 能T[0]的下一个节点 的数目n > 0  ) {

               foreach n 个节点  {

                if ( 节点为G) { 

                   temp = T[0] + G的路径;

                   if( temp的路径长度 < P的路径长度 ){

                    P = temp;

                   }

                }

                else {

                  if(节点没有被扩展过 && T[0]+节点的扩展路径长度 < P的路径长度){

                    “  T[0]+节点的扩展路径 ” 插入到T的后面

                  }

                }

              } 

        } 

        移除T的第0个元素

    }


    上面的算法,面临一个问题,就是效率不高。

    假设:起点和终点,如下

    假如有很多路径,是向“左”,如果采用上述算法,会导致:

    不能较快速查找一条可行线路,从而导致,有些可以中途放弃扩展的线路继续扩展。

    因此,可以在上面的基础上,使用启发信息。

    因此,改进的部分,是更快速的找到一条可行线路。

    距离下限法:

    主要区别:距离下限 =  算出到达节点的长度 + 最后一个节点到目标点的距离估计,并且将最低的放到列表的最前一个位置

    1. S

    2. (S,A) (S,B)

    3. (S,A,D) (S,B)

    4. (S,A,D,G)(S,B) 接下去查看有没更短路径

    5. (S,B,C)

    暂时最佳路径 P

    while(T.Count>0)

    {

        if ( 能T[0]的下一个节点 的数目n > 0  ) {

               foreach n 个节点  {

                if ( 节点为G) { 

                   temp = T[0] + G的路径;

                   if( temp的路径长度 < P的路径长度 ){

                    P = temp;

                   }

                }

                else {

                  if(节点没有被扩展过 && T[0]+节点的扩展路径长度 < P的路径长度){

                    “  T[0]+节点的扩展路径 ” 插入到T的后面

                  }

                }

              } 

        } 

        移除T的第0个元素;

        将T中,距离下限最短的路径,放到0序号处;

    }


    上面的算法,有一个问题,就是:

    如果实际距离,和估算距离,不是使用同一个数学模型,或者维度,那么会导致错误。

    例如:

    红色字体,代表点到G的距离估计值,那么,按上述办法:

    1. (S)

    2. (S,B) (S,A)   1+0=0,1+100=1

    3. (S,B,C)(S,A) 1+10+0=11,1+100=1

    4. (S,B,C,G)

    但是,实际上,SBCG的路程,是1+10+100=111,而SACG是1+1+100=102

    这就好比,拿一张只有平面二维坐标的地图,去估计山脚到山顶的最短路径,而不考虑高差一样

  • 相关阅读:
    RDIFramework.NET V3.3 WinForm版新增日程管理功能模块
    RDIFramework.NET V3.3 WinForm版角色授权管理新增角色对操作权限项、模块起止生效日期的设置
    RDIFramework.NET V3.3 Web版角色授权管理新增角色对操作权限项、模块起止生效日期的设置
    前端神器-神级代码编辑软件Sublime Text下载、使用教程、插件推荐说明、全套快捷键
    C# net request payload形式发送post请求
    RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2版本正式发布
    RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->WinForm版本重构岗位授权管理界面更规范、高效与美观
    NET快速信息化系统开发框架 V3.2 ->WinForm部分全部重构为Dev风格界面
    NET快速信息化系统开发框架 V3.2 -> “用户管理”主界面使用多表头展示、增加打印功能
    SQLServer特殊字符/生僻字与varchar
  • 原文地址:https://www.cnblogs.com/pylblog/p/10302844.html
Copyright © 2011-2022 走看看