一、对回溯算法的理解
应用回溯算法的三个步骤:
1.首先得构造解空间树:子集树和排列树;
2.以深度优先的方式搜索解空间:递归或迭代;
3.设计剪枝函数避免无效搜索:使用约束函数,剪去不满足约束条件的路径或使用限界函数,剪去不能得到最优解的路径。
回溯法解问题的一个显著特征是,解空间树是虚拟的,在任何时候,只需保存从根节点到当前扩展结点的路径。
在回溯问题中,若要求问题的所有解,就要回溯到根。
二、请说明“子集和”问题的解空间结构和约束函数
子集和问题:
设集合S={x1,x2,…,xn}是一个正整数集合,c是一个正整数,子集和问题判定是否存在S的一个子集S1,使S1中的元素之和为c。
解空间结构:
和0-1背包问题差不多。
约束函数:
先把集合里的数按递增序列排序,若当前的和sum加上当前正在进行的ai如果小于要求的和c,就是可以继续进行下一步k+1,若sum加上剩余的排在最后面的子集的和大于要求的和,就不符合要求,就可以跳过,并回溯到上一个步骤。
三、请说明在本章学习过程中遇到的问题及结对编程的情况
回溯算法的难点:剪枝函数比较难构建。
结对编程:经过了一学期的磨合,现在已经可以和队友配合默契了。感谢队友一学期的支持和鼓励,希望我们都能再接再厉。
原文地址:https://www.cnblogs.com/Texas/p/12069880.html
时间: 2024-11-02 11:47:26