第五章算法作业

  1. 你对回溯算法的理解
  2. 请说明“子集和”问题的解空间结构和约束函数
  3. 请说明在本章学习过程中遇到的问题及结对编程的情况

1.  回溯算法:是一种按照深度优先的顺序,穷举所有可能性的算法,又称为试探法,可以随时判断当前状态是否符合问题的条件。一旦不符合条件,那么就退回到上一个状态,省去了继续往下探索的时间。 

2.  解空间结构:画一颗0,1解空间树,从上往下先判断第一个数是否选择,进入左子树表示选择,进入右子树表示不选择,后面同理。

     约束函数:sum+rest<c。该函数中sum为进入左子树的结点数值总和,剩余所有数和为rest(当然不包括右子树的数值)

  判断若sum+rest<c,则剪枝,返回上一个结点继续深度遍历。

3. 一开始学回溯函数的时候比较懵,理解不了回溯,后来理解了思想却打不出代码,如果单看回溯方程会很不理解算法的思路,而且对剪枝函数的嵌入很陌生,但是在老师的讲解以及例题的感受下,渐渐地有一个直观的理解,然后也试着去理解,最后在算法实践课上和同伴一起讨论交流,才有了突破,最后才对回溯法较为好的理解。