- 9
- 0
- 约3.57千字
- 约 16页
- 2021-10-13 发布于安徽
- 举报
三、回溯法; 当试探完所有步,获得问题的一个答案时,如果需要寻求更多答案或迭代最佳答案,也可以退回一步,继续回溯,以获得更多答案或迭代最佳答案,直到退回到最初出发点,试探-回溯完成,确定问题所有答案、迭代最佳答案或确定问题无答案。
当试探完所有步,获得问题的一个答案并且不需要寻求更多答案时,可以直接结束试探-回溯过程。; 把试探-回溯过程中每一步的状态作为一个结点,出发状态结点为根结点。当前状态中试探选择某一个选项后进入下一个状态,这两个状态结点间形成父子关系,这样,试探-回溯过程中所有的状态结点构成一个树,称为状态空间树,参见下面小节图2.4。树根结点是开始出发时状态结点,搜索过程中获得问题答案的状态结点是叶子结点。
高度为h的满二叉树结点数为 ,搜索完满二叉树的算法时间复杂性也是 ,因此,在试探-回溯过程中,为提高算法的效率,应尽量优化,减去不必要树枝,减少状态空间树的结点数。
试探回溯法采用深度优先策略,一般情况下可以用递归函数实现回溯法,问题和必要的状态、答案用Problem描述,p-n表示问题的规模,CheckOk (p)表示检查目前的选择是否可行。回溯法框架如下:;bool BackTrace(Problem *p, int i) //试探第i步
{ if (已获
原创力文档

文档评论(0)