【问题标题】: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完全的吗(例如:通过子集和)?

标签: arrays algorithm math


【解决方案1】:

这称为subset sum problem

不幸的是,这是 NP 完全的,这意味着您必须检查所有可能的组合。

但是,如果您的问题只有少量的部分和(例如您的示例),那么请蛮力解决。


Moron 是正确的,并非所有 NP 完全问题都需要检查所有可能的组合。
不过我相信subset sum is one that does

【讨论】:

  • "不幸的是,这是 NP-complete,意味着你必须检查所有可能的组合" .False.
  • 您只是通过包含该链接来使您的案例变得更弱!据此,您只需检查 sqrt(M) 的顺序,其中 M 是总组合。 (2^(N/2) 与 2^N)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-29
  • 2018-11-15
  • 2023-03-17
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多