DFS 图遍历路径优化分析「建议收藏」

DFS 图遍历路径优化分析「建议收藏」深度优先搜索是图的遍历的一种重要方法,在一些网络拓补结构、DNA网络等复杂图形分析中有很广泛的应用。传统的深度优先搜索,从某一节点开始,依次遍历此节点所有相邻且未被访问的节点,其下一跳节点的选择往往不是最优的。文章通过对当前节点所有未被访问的下一跳节点计算其到所有未访问节点路径总和,选择最优的一个节点作为下一跳节点,使得深度优先搜索在图的遍历过程中总的搜索路径大大减少。深度优先搜索算法对图的遍历分析图的遍历是指从图的某个节点开始,沿着某条路径对图中所有节点依次访问。解决图的遍历问题,目前主要.

大家好,又见面了,我是你们的朋友全栈君。

深度优先搜索是图的遍历的一种重要方法,在一些网络拓补结构、DNA 网络等复杂图形分析中有很广泛的应用。传统的深度优先搜索,从某一节点开始,依次遍历此节点所有相邻且未被访问的节点,其下一跳节点的选择往往不是最优的。文章通过对当前节点所有未被访问的下一跳节点计算其到所有未访问节点路径总和,选择最优的一个节点作为下一跳节点,使得深度优先搜索在图的遍历过程中总的搜索路径大大减少。

深度优先搜索算法对图的遍历分析

图的遍历是指从图的某个节点开始,沿着某条路径对图中所有节点依次访问。解决图的遍历问题,目前主要有两种算法,广度优先搜索算法和深度优先搜索算法。
深度优先搜索算法基本思想为,首先从图中某个节点 出发, 然后依次从 相邻的节点出发深度优先遍
历,直至图中所有与 路径想通的节点都被访问。若此时尚有节点未被访问,则从中选一个节点作为起点,重复上述过程,直到所有的顶点都被访问。在传统的深度优先搜索算法中,若某个节点包含多个未被访问的节点,一般按照节点编号从小到大依次选择节点作为下一跳节点,算法中对下一跳节点的选择做出的判断往往不是最优的,这就导致了当遍历完所有节点时,总的路径不是最短的。如图 1 为包含 9个节点的无向图。假设从 A 点出发,按照深度优先搜索算法会包含如下两条路径选择,如果每两个联通节点的距离权值为 1,明显可以看出,路径 2 遍历完所有节点花费的代价较小。出现上述问题的原因在于每次节点对相邻未访问节点的选择不同所造成的。
A->D->G->I->G->H->D->A->C->F->E->B(1)
A->B->E->F->C->A->D->H->G->I (2)

DFS 图遍历路径优化分析「建议收藏」

 优化

为了解决 DFS 在图的遍历问题中,由于下一跳节点的选择所带来的路径非最优问题,本文提出了一种下一跳节点选择策略,可以有效的缩短搜索总路径,提高搜索效率。主要思想及过程如下,从图的某一顶点开始遍历,对于该顶点下所有未被访问的子节点,分别计算每个节点到图中剩余未被访问的节点路径总和,选择路径总和最大的节点作为下一跳节点;若该顶点下所有节点都被访过,则计算所有被访问的节点,到剩余未被访问的节点距离总和,选择距离总和最小的节点作为下一跳节点。
为了验证算法的有效性,选择一个包含 26 个节点的无向有权图进行验证,如图 2 所示,分别计算优化前后的两种路径,一种默认使用小节点编号作为下一跳节点,另一种使用本文介绍的下一跳节点选择策略。假定起始点为 22 号节点,结果如下
[22, 20, 19, 2, 1, 2, 4, 23, 24, 9, 25, 26, 15, 18,16, 13, 11, 10, 12, 15, 26, 25, 17, 8, 6, 14, 6, 3, 5, 7, 5,3, 2, 4, 21]
[22, 20, 19, 2, 1, 2, 3, 5, 7, 5, 3, 6, 10, 11, 13, 16,18, 15, 12, 15, 26, 25, 9, 24, 23, 4, 21, 4, 23, 24, 9, 25,17, 8, 17, 25, 26, 15, 18, 16, 13, 11, 15, 11, 10, 12, 10,6, 14, 6, 6, 3, 2, 2, 19, 20, 22]
从计算结果可以看出使用本文提出的优化策略,需要 35 步完成所有节点的遍历,而未进行优化遍历整个图需要 57 步。搜索效率有了明显的提高。图 2 包含 26 个节点的无向有权图

DFS 图遍历路径优化分析「建议收藏」

DFS 作为图的遍历的一种比较成熟的算法,在图的遍历下一跳节点选择的过程中,如果不对节点选择进行策略优化,往往会使最终遍历的总路径增加,使搜索效率下降,速度变慢,本文在 DFS 的基础上,通过对未访问节点计算其到剩余未访问节点距离之和,选取最大值作为下一跳节点,较大的缩减了图的遍历总路径,提高了搜索效率。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131992.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • webservice有哪些框架_前端主流js框架

    webservice有哪些框架_前端主流js框架Webservice框架CXF最新版本:2.2.2开源服务框架,可以通过API,如JAX-WS,构建和开发服务。服务可以使多种协议的,例如SOAP,XML/HTTP,RESTfulHTTP, CORBA,并可以工作与多种传输协议之上,如HTTP,JMS,JBI。主要特性l 支持Webservice标准:包括SOAP,theBasicProfile,WSDL,WS-Addres…

    2022年9月21日
    5
  • mybatis插件运行原理_maven 插件

    mybatis插件运行原理_maven 插件最近在做新项目,基于若依(前后端分离版本)做的,他也使用了常用的分页插件PageHelper。老规矩,今天文章还是分三步走,先上文章导读,然后讲原理,最后讲解源码案例。最后达到的效果就是希望读者朋友们在看完我写的这篇文章后,能够秒懂别人写的MyBatis插件并且能够开发出自己的MyBatis的插件。文章导读MyBatis插件原理与实战什么是插件?插件就是在具体的执行流程插一脚(触发点、拦截器)来实现具体的功能。一般插件会对执行流程中的上下文有依赖,抽象的说,我们也可以把MyBatis看作是J

    2022年9月28日
    2
  • oracle创建用户、密码、分配权限、基本权限的作用「建议收藏」

    oracle创建用户、密码、分配权限、基本权限的作用「建议收藏」创建用户和密码:createuserusernameidentifiedbypassword;//建用户名和密码例子:oracle,oracle分配权限:grantconnect,resource,dbatousername;//授权例子:grantconnect,resource,dba,sysdbatousername;创建同义词:创建同义词…

    2022年5月12日
    38
  • python爬虫——淘宝书包

    python爬虫——淘宝书包importreimportrequestsdefgetHTMLText(url):try:headers={‘user-agent’:’Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/76.0.3809….

    2022年6月17日
    40
  • 基于51单片机的流水灯设计

    基于51单片机的流水灯设计三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键设计思路一(未用中断):8个LED灯正极解电源,负极接单片机I/O口。死循环:设置P2口为11111110,使用左移函数,循环七次。同时每次位移中间加入延时函数。三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键控制流水灯暂停蜂鸣器长响:思路一:设置一个变量i,起初为0,按下A键后为1;当i为1进入死循环设置变…

    2022年5月3日
    135
  • Java配置方式读取外部的资源配置文件

    Java配置方式读取外部的资源配置文件

    2022年3月12日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号