算法第五章作业
一、对回溯算法的理解
回溯法是通过循环或者递归,并加以限制,以达到“穷举和剪枝”的目的。通常按照深度优先来搜索,并不断地回溯再搜索,最终确定解。难点在于如何确定下来搜索的结构以及如何断定是否减枝即确定剪枝函数。
回溯法的基本步骤可总结为:
(1)针对所给问题,定义问题的解空间
(2)确定易于搜索的解空间结构
(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索
二、“子集和”问题的解空间结构和约束函数
子集和的解空间可以用0-1来表示,对于变量n,其解空间为{0/1,0/1,......}共n个0/1,解空间为这2^n的排练。
约束函数有两个:第一个是针对左树的剪枝,即是否1的剪枝,主要判断为目前的和加上当前的a[i]是否大于给定的值,大于的话则不能1;第二个是针对右树的剪枝,即是否为0的剪枝,主要是有一个变量sum表示数列a从i+1开始至后面所有剩下的元素之和,如果目前的和加上这个sum小于给定的值,则不能0.
三、本章学习过程中遇到的问题和结对编程情况汇报
主要问题体现在三个方面,其一是如何确定循环/递归结构,其二是如果确定剪枝函数,其三是对于数组下标越界等情况的考虑。