【问题标题】:Find the version of array which elements sum is closest to zero when you can alter each element sign当您可以更改每个元素符号时,找到元素总和最接近零的数组版本
【发布时间】:2020-03-22 15:29:45
【问题描述】:

基本上是标题,但我会尽力解释。

假设我们有一个像[2, 3, -4, 6, -2, -1] 这样的数组

目标是在元素总和最接近零时找到此数组的版本。您可以执行的操作是更改任何元素的符号。因此,例如,提供的数组的总和是 4,但我们可以更改第一个元素的符号,使数组看起来像 [-2, 3, -4, 6, -2, -1],这样总和现在是 0

除了暴力破解,我找不到其他方法,所以决定问问某人是否可以想出一些优化该过程的方法。

提前致谢。

【问题讨论】:

  • Stack Overflow 上已经有几十个这个问题的答案了,如果你想搜索的话。

标签: arrays algorithm math combinations


【解决方案1】:

除了暴力破解之外,您找不到其他方法,因为这是NP-Complete 问题。它相当于partition problem,您需要将数组拆分为两个总和相等的集合。在有人证明或质疑P=NP 问题之前,这对您来说意味着时间复杂度将高于2^n(其中n 是您集合中的元素数量)。

问题是等价的,因为如果您找到两个总和相等的集合(一个分区),那么您可以将符号放在第一个集合中的每个元素上,并且如果您能找到这样的符号,那么它们就定义了两个总和相等的集合(我们实际上在这里执行了reduction)。

有一些伪多项式算法,所以如果你能限制最大的数字,你就可以使用它们。您还可以使用一些近似算法。所有信息都在分区问题的维基百科页面中。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2023-04-09
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2021-02-11
    • 2022-12-31
    相关资源
    最近更新 更多