回溯算法的设计思想和适用条件

回溯算法的设计思想和适用条件

回溯算法的设计思想和适用条件
这张图很重要,一般思考问题就是按从左到右的顺序。
先是描述问题,在考虑解的性质。
在了解解向量的形式以后,要画出搜索空间。
然后选择搜索方式,然后开始进行搜索。
在搜索的时候,在结合约束条件进行减枝

如何进行剪枝,要根据约束条件

回溯算法的设计思想和适用条件
对回溯法每个部分的特点的了解很重要。

  1. 回溯法的目的就是搜索解
  2. 在求解解向量的过程中,是不断扩张部分解向量,最终达到解向量的大小
  3. 搜索空间都是树
  4. 搜索方式都是跳跃式遍历,即进行剪枝
  5. 每一次进行下一个解向量元素的求解,都需要进行约束条件的回溯判定

深度搜索和宽度搜索的区别

回溯算法的设计思想和适用条件

回溯算法的设计思想和适用条件
上面最重要的就是回溯法的适用范围是:搜索和优化问题 ,还有就是对搜索空间的了解,记住可行解在输叶上。
注:搜索过程:隐含遍历搜索树的意思,没有实际上的完全遍历整颗树

回溯算法的设计思想和适用条件
回溯算法的设计思想和适用条件

有一个小知识点,就是:树的每一层其实就是解向量中的一个值,所以解向量的位数决定了树的层数,每一个解的种类决定了分的叉数

回溯算法的设计思想和适用条件
上面最核心的就是多米诺性质,它是回溯算法不丢弃解的原因,也就是它的适用条件。

下面举个反例:也是极其的重要的:
反例就在于它有减号,在前两项大于10的情况下,在之前的理论上就不需要进行下面的选择,也就下面就不存在解了,然而减号,是下面仍可能有解。
回溯算法的设计思想和适用条件
要符合多米诺性质
需要改减为加(改变x3的取值范围,这是一个实用技巧
回溯算法的设计思想和适用条件

小结

回溯算法的设计思想和适用条件
下面的总结十分的重要:

回溯算法的设计思想和适用条件

像什么搜索策略、和数据结构往往是次要的,都很固定。搜索策略要么是深度优先,要么就是宽度优先,数据结构一般就是链表、栈等

上诉难于理解就是(2)和(3),其就是对反例的思考,需要在求解出k-1维向量的前提下,需要对下一个k维的取值进行计算,Xk,就是k维值可取值的范围。

然后(3)中确定k维取值的排列规则,是从小到打排列还是别的啥

最后进行多米诺性质的判断