我正在努力解决Subset-Sum问题。问题陈述是-
给出一组非负整数和一个值总和,确定给定集合的子集是否等于总和。
示例:
Input: set[] = {3, 34, 4, 12, 5, 2}, sum = 9
Output: True //There is a subset (4, 5) with sum 9.
我看到了解决此问题的不同方法。其中一种使用递归,另一种使用动态编程。
我的问题是,为什么我们不能使用嵌套循环来解决问题。 他们每个人都在考虑一个元素,并逐一检查它是否构成一个完整的总和?
对不起,我是算法和新手。
答案 0 :(得分:2)
实际上有可能使用(很多)嵌套循环来解决子集和问题。那可能会被称为“非递归暴力天真方法”之类的东西。
您可能永远不会看到它,因为这是解决问题的非常非常笨拙的方法。
实际上,您将需要与输入集中的元素数量一样多的嵌套循环,这意味着针对每种情况编写不同的程序(起始集中的1个元素,起始集中的2个元素,等等...)。
或者最终,编写一个以设置大小N
作为输入的程序,并编写一个带有N
嵌套循环的程序。但是无论如何,其结果将是“良好的编码习惯”。
递归方法确实做到了这一点(严格等于许多嵌套循环,每个递归调用都会在“新”循环中向您发送信号),但更简单,更优雅(尽管对a的子集进行了完整的枚举)集,这是非常非常昂贵的)。较简单的代码更易于检查,更易于编辑,更易于测试,更容易调试...(以及不断出现…………良好实践常常是有原因的。)