部分和查找/部分和集分配
Posted
技术标签:
【中文标题】部分和查找/部分和集分配【英文标题】:Partial sum lookup / partial sum set assignment 【发布时间】:2011-02-18 05:36:03 【问题描述】:我有以下问题要解决。作为输入,我有 2 个十进制数组。两者的元素之和相等。实际问题是通过部分和将一个数组中的值分配给第二个数组 - 如果一个数组中的某个元素是第二个数组中任意数量元素的总和 - 它们应该相互分配。
样品1:
阵列 1:25.0、25.0、50.0、50.0 数组2:50.0、100.0
预期结果:50.0 是 25.0 和 25.0 之和,100.0 是 50.0 和 50.0 之和 (0->0,1; 1->2,3)
样本2:
阵列 1:20.0、70.0、80.0、130.0 数组2:100.0、200.0
预期结果: 100 = 20+80, 200 = 70+130 (0->0,2; 1->1,3)
想法是返回分配的数组元素索引并尽可能少地返回。
【问题讨论】:
你知道这个问题是NP完全的吗(例如:通过子集和)? 【参考方案1】:这称为subset sum problem。
不幸的是,这是 NP 完全的,这意味着您必须检查所有可能的组合。
但是,如果您的问题只有少量的部分和(例如您的示例),那么请蛮力解决。
Moron 是正确的,并非所有 NP 完全问题都需要检查所有可能的组合。 不过我相信subset sum is one that does。
【讨论】:
"不幸的是,这是 NP-complete,意味着你必须检查所有可能的组合" .False. 您只是通过包含该链接来使您的案例变得更弱!据此,您只需检查 sqrt(M) 的顺序,其中 M 是总组合。 (2^(N/2) 与 2^N)。以上是关于部分和查找/部分和集分配的主要内容,如果未能解决你的问题,请参考以下文章