第五章作业
- 你对回溯算法的理解(2分)
基本思想:
构建问题的解空间树,在其解空间树中,从根节点出发,进行深度优先搜索。在搜索过程中,对解空间
树的每个结点进行判断,判断该结点是否包含问题的解,若肯定不包含,则跳过对以该结点为根的子树的
搜索,逐层向其祖先结点回溯。否则,则进入该子树,继续按深度优先策略搜索。
回溯法的精髓在于剪枝,常用限界函数或者约束函数减少时间,其中约束函数将不满足约束的子树剪去,限界函数将得不到最优解的子树。
2.请说明“子集和”问题的解空间结构和约束函数(2分)

约束函数:
当递归的层数大于等于n时,表示当前层次已经大于元素的个数,接下来的为无用搜索,直接剪去该
结点的搜索即可当搜索到当前结点后所得的值大于题目中的c,则表示接下来的搜索不可能找到等于c的
答案,直接剪去以该节为根的子树的搜索即可
if(i>=n||c<ans) //ans为遍历到该节点时,所选择的元素的和 return; if(ans+a[i]<=c) //第i个元素是否加入子集 if(ans<=c)
有子集树和排列树这两种。前者是但所有的问题是从n个元素的集合中找出满足某种性质的子集时,相应的解空间树成为子集树。后者当所给出问题是确定n个元素满足某种性质的排列时,相应的解空间称为排列树。
旅行者问题和0-1背包问题是这两种树的经典题目
剪枝回溯法搜索空间树时,常用限界函数和约束函数避免无效搜索,其中约束函数将不满足约束的子树剪去,
限界函数将得不到最优解的子树。一般可以利用这两种剪枝方式提升算法的效率,避免大量的不必要搜索。
3. 请说明在本章学习过程中遇到的问题及结对编程的情况(1分)
0-1背包问题为了方便预算上界,会将物品按照单位重量价值排序。这个排序会比较难想出来,后来各方面学习懂得了可以用结构体和bool一个函数来进行排序,解决了这个问题。
结对编程没什么问题,一起学习挺好的。
浙公网安备 33010602011771号