算法第五章作业

1.对回溯算法的理解

回溯法是按深度优先策略搜索问题的解空间树。首先从根结点出发搜索解空间树,当算法搜索至解空间树的某一结点时,先利用剪枝函数判断该结点是否可行

(即是否能够得到问题的解)。如果不可行,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。回溯法的基本行为是搜索,搜索过程中使用剪枝函数来避免无效的搜索。

剪枝函数包括两类:

(1)使用约束函数,剪去不满足约束条件的路径;

(2)使用限界函数,剪去不能得到最优解的路径。

回溯法思想的关键在于如何定义问题的解空间,并将其转化为树(即解空间树)。

解空间树分为两种:

子集树:所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间树称为子集树。典型应用如0-1背包问题。

排列树:所给的问题是确定n个元素满足某种性质的排列时,相应的解空间树称为排列树。典型应用如旅行售货员问题。

 

2.说明“子集和”问题的解空间结构和约束函数

子集和问题的解空间树是子集树,对于集合中的每一个元素均有两种可能,即放入子集中或不放入子集中,子集树的每一层代表一个元素的情况,最终构成一颗完全二叉树。

为提升算法效率可使用约束函数进行剪枝,具体思想是将当前放入子集中的元素之和与给定值比较,若大于给定值,则舍弃。

 

3.本章学习过程中遇到的问题及结对编程情况总结

回溯法思想的难点在于解空间树的构造,根据题干明确是子集树还是排列数,选用合适的数据结构存储解空间树,然后再套用模板写相关函数即可。

算法的效率取决于是否合理的使用约束函数或限界函数进行剪枝,由于回溯法主要是使用深度优先搜索遍历,所以剪枝函数的必要性可见一般。

在实践课和课后进行结对编程的过程中,我和队友对回溯法思想的理解都有了一定程度的加深,通过对不同题目的分析,对彼此代码的解读,对存在问题的思索,

都使我们对回溯法的应用更加灵活,更加熟练。

你可能感兴趣的:(算法第五章作业)