子集和问题[嵌套循环解决方案?]

问题描述 投票:1回答:1

我正在努力解决子集 - 求和问题。问题陈述是 -

给定一组非负整数和值和,确定是否存在给定集合的子集,其总和等于给定总和。

示例:Input: set[] = {3, 34, 4, 12, 5, 2}, sum = 9 Output: True //There is a subset (4, 5) with sum 9.

我已经看到了解决这个问题的不同方法。其中一个是使用递归,另一个是使用动态编程。

我的问题是,为什么我们不能使用嵌套循环来解决问题。他们每个人都在考虑一个元素并逐一检查它是否完整的总和?

对不起,我是算法和新手的新手。

arrays algorithm dynamic-programming subset-sum
1个回答
2
投票

实际上可以用(很多)嵌套循环来解决子集求和问题。这可能被称为“非递归蛮力天真的方法”,或其他东西。 你可能永远不会看到它,因为它是解决这个问题的一种非常非常非常笨拙的方式。 实际上,您需要与输入集中的元素一样多的嵌套循环,这意味着为每种情况编写不同的程序(起始集中的1个元素,起始集中的2个元素等等)。 或者最终,编写一个以设置大小N作为输入的程序,并用N嵌套循环编写程序。但无论如何,结果将是尽可能“良好的编码实践”。

递归方法完全相同(它严格等同于许多嵌套循环,每个递归调用都会在'new'循环中发送),但更简单和优雅(尽管完整枚举了一个集合的子集,是非常非常昂贵的)。更简单的代码更容易检查,更容易编辑,更容易测试,更容易调试......(以及......良好实践通常在这里有一个原因)。

© www.soinside.com 2019 - 2024. All rights reserved.