算法第5章作业
2018-12-23 19:37 秤字逃 阅读(139) 评论(0) 编辑 收藏 举报一、对回溯法的理解
回溯法的基本思想是穷举问题的所有可能解,然后在其中找到我们想要的答案。但是如果只是简单的穷举的话时间复杂度会很高,因此我们需要有一定的选择策略,即我们说的剪枝,通过合理的判断条件剔除没有必要的列举,以提高算法的效率。
二、“子集和”问题的解空间结构和约束函数
解空间结构:我们对于子集中的元素有两种选择,即选与不选,所以可以将问题的解空间抽象成一棵 n 层的二叉树,第 i 层左子树代表选择第 i 个元素,右子树代表不选。
约束函数:我们使用变量tmpSum作为当前子集的和,bestSum作为当前最佳子集和,到达每一层,先判断tmpSum加上该层元素的值w,如果tmpSum + w > bestSum,则无需继续进行,即剪枝。
三、学习过程中遇到的问题及结对编程的情况
由于回溯法中使用到了递归,一开始对于递归那部分并不是特别理解,通过讨论之后才明白了,递归的作用是进入“树”的下一层,而不是回溯,这样就让我们对回溯法的有比较好的理解了。而且在参数设置上可以设置两个,第一个dep,即树的深度,第二个k,即分支数,会让函数更加清晰。
结对编程的情况也比较好,毕竟已经合作一个学期了,也培养出了一定的默契。