子集和问题算法的工作

时间:2011-04-05 05:19:16

标签: algorithm

有人能解释一下子集和算法是如何工作的吗? (我看到了Cormen Intro to algo中给出的算法,但我得知它是如何工作的)

2 个答案:

答案 0 :(得分:1)

需要考虑2 ^ n-1个子集(不考虑空集)。

平均而言,这2 ^ n个子集中的每一个都具有O(n)个元素。因此,您最终会进行n * 2 ^ n计算以解决问题。

有一些加速可能,但没有什么可以绕过2 ^ n。

如果元素的绝对大小很小(和离散),您可以启动一个表格,指示特定和是否可达,并将元素添加到表格中的“位置”。

首先,制作表格。它的范围将从所有负数的总和到所有正数的总和。 (你不会以这种方式获得任何超出表格范围的总和。)

然后,将“0”标记为可达。

然后,对于每个号码,对于表格中的每个可到达号码,添加号码。因此,如果您的第一个数字是2,那么将“2”标记为可达。然后,如果你得到-3,那么将“-3”和“2-3 = -1”标记为可达。等等,直到你用完了数字。表中标记为可达的每个部分确实可以访问;你添加了一些数字来实现目标!

答案 1 :(得分:0)

问题描述和一些解决它的算法在wikipedia page上。您是否对问题本身或解决问题的算法感到困惑?如果是后者,你在谈论哪种算法?