首页 > 编程语言 >算法——DFS、BFS、记忆回溯、记忆搜索

算法——DFS、BFS、记忆回溯、记忆搜索

时间:2023-06-26 09:15:37浏览次数:45  
标签:剪枝 DFS BFS 算法 搜索 回溯 记忆搜索

回溯和深度优先搜索的区别
回溯是一种更通用的算法。可以用于任何类型的结构,其中可以消除域的部分 ——无论它是否是逻辑树。
深度优先搜索是与搜索树或图结构相关的特定回溯形式。它使用回溯作为其使用树的方法的一部分,但仅限于树/图结构。
回溯和 DFS 之间的区别在于回溯处理隐式树而 DFS 处理显式树。这似乎微不足道,但它意味着很多。当通过回溯访问问题的搜索空间时,隐式树在其中间被遍历和修剪。然而对于 DFS 来说,它处理的树/图是明确构造的,并且在完成任何搜索之前已经抛去了不可接受的情况,即修剪掉了。
因此,回溯是隐式树的 DFS,而 DFS 是回溯而不修剪
也并不简单的可以说回溯算法 = 深度优先搜索 + 剪枝函数。因为并不是所有图都是树。
回溯的关键不在于递归,而在于“状态”。在回溯算法向前的每一步,你都会去设置某个状态,而当向前走走不通的时候回退,此时需要把之前设置的状态撤销掉。

dfs 只是找某个或某些满足条件的东西而已,找到就返回,找不到拉倒,没状态,也可以携带路径和边界值。
dfs如果带上记忆搜索集(类似动态规划),就变成了记忆搜索,保存是之前搜索过的子搜索集,子搜索集也是一种剪枝过程。(子搜索集有点类似后缀树)
回溯法如果带上记忆搜索集,就变成记忆回溯,保存是之前搜索过的子搜索集,子搜索集也是一种剪枝过程。和记忆搜索的区别也是回溯有一个状态保存的性质。

回溯法的基本思想:

  • 针对所给问题,定义问题的解空间;
  • 确定易于搜索的解空间结构;
  • 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

八皇后问题是一种经典的回溯算法问题
在八皇后问题中,我们需要在一个8x8的棋盘上放置8个皇后,使得任何两个皇后都不在同一行、同一列或同一斜线上。为了解决这个问题,我们可以采用回溯算法,从第一行开始,逐行枚举皇后所在的列,如果符合条件则进入下一行,否则回溯到上一行,继续尝试下一个列。
在这个过程中,我们需要回溯到上一行来重新选择列,这就是典型的记忆回溯的过程。通过不断地回溯到上一行来重新选择列,我们最终能够找到符合要求的解。因此,八皇后问题属于记忆回溯的范畴。

参考链接
回溯详解以及与 DFS 算法的关联
回溯vs记忆化递归
记忆搜索———至少有 1 位重复的数字
DFS参数携带路径或者边界值

标签:剪枝,DFS,BFS,算法,搜索,回溯,记忆搜索
From: https://www.cnblogs.com/sanguoasd/p/17211550.html

相关文章

  • Hadoop中HDFS集群启停命令
    一键启停脚本#一键启动hdfs集群start-dfs.sh#一键关闭hdfs集群stop-dfs.sh单进程启停$HADOOP_HOME/sbin/hadoop-daemon.sh,此脚本可以单独控制所在机器的进程的启停用法:hadoop-daemon.sh(start|status|stop)(namenode|secondarynamenode|datanode) $HADOOP_HOME/bin......
  • HDFS集群环境部署
    第一步,上传Hadoop安装包到node1节点。输入Linux命令:ll查看是否下载成功。 第二步:然后就行解压:解压语句:tar-zxvfhadoop-3.3.4.tar.gz-C/export/server第三步:构建软连接:cd/export/serverin-s/export/server/hadoop-3.3.4hadoop ......
  • 图的遍历——DFS, BFS(邻接矩阵,邻接表)——C语言描述
    图的遍历——DFS,BFS(邻接矩阵,邻接表)——C语言描述目录图的遍历——DFS,BFS(邻接矩阵,邻接表)——C语言描述0测试用例框架1图的深度优先遍历(DFS)1.1邻接矩阵(1)数据结构(2)代码(3)测试用例(4)打印结果1.2邻接表(1)数据结构(2)代码(3)测试用例(4)结果2图的广度度优先遍历(BFS)2.1队列(1)数据结构......
  • Getting Zero(Bfs)
    GettingZerotimelimitpertest2secondsmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputSupposeyouhaveaninteger v.Inoneoperation,youcan:eitherset v=(v+1)mod32768orset v=(2⋅v)mod32768Youaregiv......
  • HDFS数据读写过程
    读数据的全过程写数据的全过程:......
  • HDFS存储原理
    冗余数据保存问题:一个数据块默认被保存三次好处:1.加快数据传输错误(假如要同时访问数据块1因为他冗余存储就会有3份所以会加快数据传输速度)2.很容易检查数据错误3.保证数据可靠性数据的错误与恢复......
  • HDFS体系结构
    命名空间:目录 文件 块局限性......
  • 【ETL工具将数据源抽取到HDFS作为高可靠、高吞吐量的分布式文件系统存储】
    ETL工具的安装与配置常见的ETL工具包括ApacheNifi、Talend、Informatica、Datastage等。不论使用哪个工具,将数据源抽取到HDFS作为高可靠、高吞吐量的分布式文件系统存储是ETL工具的一项基本功能。基于Talend工具):1.下载Talend工具安装包在Talend官网上下载适合自己的TalendOp......
  • 数据结构代码整理_基于邻接表的拓扑排序(C++_DFS_BFS_递归)
    目录Chat图解基于栈实现(dfs)基于队列实现(bfs)基于递归实现(dfs)Chat1.代码所属的类在数据结构代码整理_基于邻接表存储结构的有向图的实现(C++)2.拓扑排序的思想就是不断找入度为0的节点并将其输出并标记,标记后与他相连的节点的入度都会减一,不断进行标记直至所有的节点都被输出为止......
  • 深度优先搜索算法-dfs讲解
    迷宫问题有一个迷宫:S**.....***T(其中字符S表示起点,字符T表示终点,字符*表示墙壁,字符.表示平地。你需要从S出发走到T,每次只能向上下左右相邻的位置移动,不能走出地图,也不能穿过墙壁,每个点只能通过一次。)现在需要你求出是否可以走出这个迷宫我们将这个走迷宫过程称为dfs(深度优先搜索)......