Algorithm 在O(n)时间内用黑盒求和为k的子集

Algorithm 在O(n)时间内用黑盒求和为k的子集,algorithm,Algorithm,问题是: 假设给你一个算法作为一个黑匣子——你看不到它是如何设计的——它有以下属性:如果你输入任意实数序列和整数k,算法将回答是或否,指示是否有一个子集的和正好是k。演示如何使用此黑框查找给定数字集S的子集,其和为k。您可以使用黑匣子O(n)次 在我发布此问题之前,我已经搜索了完全相同的问题: 我在那些帖子里找不到满意的答案。假设 S={1,2,3,4,5,6,7,8},k=7 查询Oracle(S或S\set减去任何一个元素)将返回YES。这无助于得出一个特定的子集,其总和为k。对于所有

问题是:

假设给你一个算法作为一个黑匣子——你看不到它是如何设计的——它有以下属性:如果你输入任意实数序列和整数k,算法将回答是或否,指示是否有一个子集的和正好是k。演示如何使用此黑框查找给定数字集S的子集,其和为k。您可以使用黑匣子O(n)次

在我发布此问题之前,我已经搜索了完全相同的问题:

我在那些帖子里找不到满意的答案。假设

S={1,2,3,4,5,6,7,8},k=7


查询Oracle(S或S\set减去任何一个元素)将返回YES。这无助于得出一个特定的子集,其总和为k。

对于所有i[0:n-1],在不使用第i个元素的情况下通过框运行序列。如果返回“是”,则删除元素并继续;如果返回“否”,则返回元素并继续。完成。

那么,有三个重复的线程,您所尝试的只是传递整个总和?绝对没有其他想法出现在你的脑海中?第一个链接的哪一部分是没有帮助的?还要注意的是,可以有多个子集加起来等于k,找到哪一个并不重要。我已经解释了为什么我认为这没有帮助。。这是我的最后一句话。假设我做了8个查询:Oractle(s\set减去1个元素),得到8个YES。这告诉我,S的每一个元素都不需要在和k之和的子集中。这没有帮助。是的,如果你把所有的元素都保留在列表中,它就没有帮助了。但是,对于每个查询,您都知道一些关于您在当前查询中遗漏的元素的信息,即是否需要它来形成一个汇总为k的子集。如果不需要,则将其删除,并对其余部分执行更多查询,如果需要,则将此编号添加到解决方案集中,然后继续处理s中剩余的元素。这也是为什么我写道,您需要记住可以有多个解决方案,但您只需要找到一个。所以在你的例子中,子集中不需要数字,因为有多个解决方案,但是如果你逐个删除它们,你最终会找到一个可能的解决方案。ic,谢谢你帮助我理解这一点!我无法对原始帖子发表评论。这就是为什么我发布了一个新问题。@DarknessGuideMe-很高兴能帮上忙。