分区递归关系理解

partition recurrence relation understanding

确定是否存在 S 的子集总和为 floor(N/2) floor。 给定 S = {3,1,1,2,2,1},分区问题的有效解是两个集合 S1 = {1,1,1,2} 和 S2 = {2,3}。

令:如果 {x1, ..., xj} 的子集总和为 i,则 p(i, j) 为真,否则为假。

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 + 该子集的总和 = i)。

但是我的理解不适用于 (ii) 等式 (j-1) 部分。

为什么我们不能只有 p(i − xj, j)?

对于情况 (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 两次,这是不允许的。