在O(n)时间

时间:2016-10-09 19:52:13

标签: algorithm

问题是:

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

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

An algorithm to determine a subset sequence in O(n)?

Using subset-sum oracle to determine which numbers are members of the subset

https://cs.stackexchange.com/questions/14270/finding-the-subset-of-s-that-sums-up-to-k-using-a-black-box-in-on-time

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

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

查询Oracle(S或S \ setminus任何一个元素),将返回YES。这对于提出总结为k的特定子集没有帮助。

1 个答案:

答案 0 :(得分:1)

对于所有 i [0:n - 1],在框中运行不带 i 元素的序列。如果返回YES,则保持元素被删除并恢复,如果否,则返回元素并恢复。完成。