确定是否存在S的子集,其总和为楼层(N / 2)。 给定S = {3,1,1,2,2,1},分区问题的有效解是两组S1 = {1,1,1,2}和S2 = {2,3}。
设:如果{x1,...,xj}的子集总和为i,则p(i,j)为真,否则为假。
如果{p,则p(i,j)为真 p(i,j - 1)为真-------(i) p(i - xj,j - 1)为真--------(ii) }我对(i)方程的理解是:{x1,...,xj}的子集,它不总和为i,但之前的j-1个元素可能总结为i 我对(i)方程的理解是:{x1,...,xj}的子集确实使用xj并且总和为i-xj(因为xj +该子集的sum = i)。
然而,我的理解不适用于(ii)等式(j-1)部分。
为什么我们不能只拥有p(i-xj,j)?
答案 0 :(得分:0)
对于案例(ii),我们发现{x1,..,xj}的子集使用xj并求和为i。
但是,我们通过将xj与{x1,..,x(j-1)}的子集组合来实现这个总和。
如果我们有p(i-xj,j)那么我们就会说我们可以通过使用xj加上{x1,... xj}的子集来总计i,我们将被允许使用xj两次
例如,如果我们有{1,5,16}集,则总数为16 + 5 + 1 = 22,因此目标为11.如果您将重现更改为p(i-xj,j)然后算法会说使用{1,5,5}可以得到11的总和 - 请注意,我们已经使用了5次,这是不允许的。