代码改变世界

算法第五章作业

2018-12-24 12:44  linzexuan  阅读(224)  评论(0编辑  收藏  举报

算法第五章作业

 

1.     你对回溯算法的理解(2分)

回溯法是一种搜索算法,通过对问题构造相应的解空间树,进行深度优先策略的搜索。常遇到的有子集树和排列数两种解空间树。在搜索的过程中,可以通过题目的具体情况,利用约束函数、限界函数等剪枝函数对解空间树进行剪枝,剪去不可行子树,使得算法的时间复杂度减低。

回溯法的基本步骤:

(1)针对所给问题,定义问题的解空间;

(2)确定易于搜索的解空间结构;

(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

 

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

题目输入数据:

5 10

2 2 6 5 4

解空间:该问题的解空间为{a1, a2, …},由此可以构造一棵深度为6的二叉树,每个第一层到第二层表示“2”是否被选择,左分支表示选择,右分支表示不选择。

约束函数:sum 表示当前数值,a 表示未被访问的数值的总和

              若sum + a > c,则不对该子树进行遍历,返回上一个结点。

 

3.     请说明在本章学习过程中遇到的问题及结对编程的情况(1分)

在本章的学习中,理解回溯法的基本思路和掌握基本的解题步骤,但在解决问题时不能很好的定义解空间。

通过在编程题上与队友一起讨论分析,提高了解决问题的速度,同时也在交流讨论中,提高了用回溯法解决问题的能力。