代码改变世界

算法第5章作业

2018-12-23 19:37  秤字逃  阅读(139)  评论(0编辑  收藏  举报

一、对回溯法的理解

  回溯法的基本思想是穷举问题的所有可能解,然后在其中找到我们想要的答案。但是如果只是简单的穷举的话时间复杂度会很高,因此我们需要有一定的选择策略,即我们说的剪枝,通过合理的判断条件剔除没有必要的列举,以提高算法的效率。

 

二、“子集和”问题的解空间结构和约束函数

  解空间结构:我们对于子集中的元素有两种选择,即选与不选,所以可以将问题的解空间抽象成一棵 n 层的二叉树,第 i 层左子树代表选择第 i 个元素,右子树代表不选。

  约束函数:我们使用变量tmpSum作为当前子集的和,bestSum作为当前最佳子集和,到达每一层,先判断tmpSum加上该层元素的值w,如果tmpSum + w > bestSum,则无需继续进行,即剪枝。

 

三、学习过程中遇到的问题及结对编程的情况

  由于回溯法中使用到了递归,一开始对于递归那部分并不是特别理解,通过讨论之后才明白了,递归的作用是进入“树”的下一层,而不是回溯,这样就让我们对回溯法的有比较好的理解了。而且在参数设置上可以设置两个,第一个dep,即树的深度,第二个k,即分支数,会让函数更加清晰。

  结对编程的情况也比较好,毕竟已经合作一个学期了,也培养出了一定的默契。