确定O(n)中子集序列的算法?

时间:2013-09-11 19:11:42

标签: algorithm sum sequence induction

我如何通过归纳来解决这个问题?

假设您被赋予一个算法作为黑盒子,您无法看到它是如何设计的,它具有以下属性:如果您输入任何实数序列和一个整数k,算法将回答YES或NO表示是否存在是数字的子集,其总和恰好是k。展示如何使用这个黑盒子来找到总和为k的给定序列{X1,...,Xn}的子集。你可以使用黑匣子O(n)次。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我并不完全相信这里需要感应。

这是我的两分钱:

假设您有一系列数字S和整数k,并且您已经知道存在一个数字的子集,其总和为k。现在,从序列中删除一个数字(称之为i),然后在遗留的内容上使用黑框(使用与之前相同的k)。

  • 如果算法在新序列上返回YES,那么它会告诉您i及其总和为S的{​​{1}}的任何子集?
  • 如果算法在新序列上返回NO,那么它会告诉您有关k以及i的任何子集S的内容是什么?