ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

数据结构和算法--回溯法

2022-05-26 14:32:40  阅读:205  来源: 互联网

标签:状态 递归 -- 算法 二叉树 回溯 数据结构 过程


回溯算法

定义:回溯算法,又称“试探法”。解决问题时, 每一步都是尝试态度,如果发现并不是好的,

或者这么走下去很定达不到目标,立刻返回重新操作, 这种走不通就回退的方法为回溯算法。

回溯 vs 递归

很多人认为 回溯递归 是一样的, 其实不然。回归中可以看到递归的影子

但是两者是有区别的。

回溯: 从问题本身出发,寻找可能实现的所有可能情况。和

穷举法的思想相近,不同于穷举法是将所有的情况列举出来以后在一一筛选,而回溯法是在列举

过程中,如果发现当前情况不对,就停止后续工作,返回上一步,进行新的尝试。

递归: 是从问题的结果出发,例如求n!的结果,就需要知道

n(n-1)! 的结果,而要想知道 (n-1)! 结果,就需要提前知道 (n-1)(n-2)!。这样不断地向

自己提问,不断地调用自己的思想就是递归。

两者联系: 回溯可以用递归思想实现

实现过程:

使用回溯法解决问题的过程,实际上是建立一棵“状态树”的过程。例如,在解决列举集合{1,2,3}

所有子集的问题中,对于每个元素,都有两种状态,取还是舍,所以构建的状态树为:

回溯算法的求解过程实质上是先序遍历“状态树”的过程。树中每一个叶子结点,都有可能是问题的

答案。图 1 中的状态树是满二叉树,得到的叶子结点全部都是问题的解。

在某些情况下,回溯算法解决问题的过程中创建的状态树并不都是满二叉树,因为在试探的过程中,

有时会发现此种情况下,再往下进行没有意义,所以会放弃这条死路,回溯到上一步。在树中的体现,

就是在树的最后一层不是满的,即不是满二叉树,需要自己判断哪些叶子结点代表的是正确的结果。

标签:状态,递归,--,算法,二叉树,回溯,数据结构,过程
来源: https://www.cnblogs.com/01black-white/p/16075454.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有