回溯算法的设计思想和适用条件
回溯算法的设计思想和适用条件
这张图很重要,一般思考问题就是按从左到右的顺序。
先是描述问题,在考虑解的性质。
在了解解向量的形式以后,要画出搜索空间。
然后选择搜索方式,然后开始进行搜索。
在搜索的时候,在结合约束条件进行减枝
如何进行剪枝,要根据约束条件
对回溯法每个部分的特点的了解很重要。
- 回溯法的目的就是搜索解
- 在求解解向量的过程中,是不断扩张部分解向量,最终达到解向量的大小
- 搜索空间都是树
- 搜索方式都是跳跃式遍历,即进行剪枝
- 每一次进行下一个解向量元素的求解,都需要进行约束条件的回溯判定
深度搜索和宽度搜索的区别
上面最重要的就是回溯法的适用范围是:搜索和优化问题 ,还有就是对搜索空间的了解,记住可行解在输叶上。
注:搜索过程:隐含遍历搜索树的意思,没有实际上的完全遍历整颗树
有一个小知识点,就是:树的每一层其实就是解向量中的一个值,所以解向量的位数决定了树的层数,每一个解的种类决定了分的叉数
上面最核心的就是多米诺性质,它是回溯算法不丢弃解的原因,也就是它的适用条件。
下面举个反例:也是极其的重要的:
反例就在于它有减号,在前两项大于10的情况下,在之前的理论上就不需要进行下面的选择,也就下面就不存在解了,然而减号,是下面仍可能有解。
要符合多米诺性质
需要改减为加(改变x3的取值范围,这是一个实用技巧)
小结
下面的总结十分的重要: