【发布时间】:2023-03-04 23:27:01
【问题描述】:
这是另一个动态编程问题 (Vazirani ch6)
考虑以下 3-PARTITION 问题。给定整数 a1...an,我们 想确定是否是 可以将 {1...n} 划分为 三个不相交的子集 I, J, K 这样 那个
sum(I) = sum(J) = sum(K) = 1/3*sum(ALL)
例如,对于输入 (1; 2; 3; 4; 4; 5个; 8) 答案是肯定的,因为有 是分区 (1; 8), (4; 5), (2; 3; 4)。另一方面,对于输入 (2; 2; 3; 5) 答案是否定的。设计 并分析动态规划 运行在 3-PARTITION 的算法 n 和 (Sum a_i) 中的时间多项式
我该如何解决这个问题?我知道 2-partition 但仍然无法解决它
【问题讨论】:
-
这不是(或至少 2 个分区)NP-complete 吗?
-
对于任意大小的整数;是的。复制粘贴的问题可能会在
runs in time poly- nomial in n and之后提到该限制,我想。 -
您遗漏了一个关键部分(我添加了它)。它是 n 和 和 a_i 中的多项式。如果不包括总和 a_i,则问题实际上是 NP-Hard。
标签: algorithm dynamic-programming partition-problem