Algorithm 求解动态规划练习的算法(背包型)

Algorithm 求解动态规划练习的算法(背包型),algorithm,geometry,dynamic-programming,knapsack-problem,Algorithm,Geometry,Dynamic Programming,Knapsack Problem,这是一个挑战:输入是一个由N个整数组成的数组X(N在0到10000之间,X[i]在-100到100之间)。目标是从集合{-1;1}中找到一个由N个整数组成的序列D,这样 S = | sum_i (X[i] * D[i]) | 最小化。如果我们输出整数S(不需要明确地找到使S最小化的序列D),问题就解决了 我目前的研究: 计算 M=总和i | X[i]| 以M/2为背包容量,X为物品列表,求解0-1背包问题。它给出了正确的答案,但复杂性太高 对于0到n范围内的整数n和-100到100范围内的r,

这是一个挑战:输入是一个由N个整数组成的数组X(N在0到10000之间,X[i]在-100到100之间)。目标是从集合{-1;1}中找到一个由N个整数组成的序列D,这样

S = | sum_i (X[i] * D[i]) |
最小化。如果我们输出整数S(不需要明确地找到使S最小化的序列D),问题就解决了

我目前的研究:

  • 计算

    M=总和i | X[i]|

  • 以M/2为背包容量,X为物品列表,求解0-1背包问题。它给出了正确的答案,但复杂性太高

  • 对于0到n范围内的整数n和-100到100范围内的r,定义

    如果集合{-1;1}中有一个长度为n的整数序列D,使得r=| sum{i=0到n}(X[i]*D[i]},则s(n,r)=1|

    s(n,r)=0,否则

  • 则s具有以下属性:

    s(n, r) = s(n - 1, r - X[n]) || s(n - 1, r + X[n])
    
    也就是说,如果r可以通过前n个项目达到,那么r-X[n]或r+X[n]可以通过前(n-1)个项目达到

    从这个性质可以很容易地计算出给定范围内任意r的s(N,r)。 当X按降序排序时,返回正确答案的几率会大得多,但在某些情况下仍然不正确。也许可以通过为r提供更大的范围来更正,但我现在还不知道是否有一个可接受的范围

  • 几何/线性代数方法:将所有可能的序列D视为欧几里德空间R^k(k>=N)中的向量,并将所有可能的序列D划分为R^k的正交基,然后在每个新基中写入X。但我不太希望它能起作用
  • 提示:

  • N(X的大小)的范围比每个X[i]的范围大得多。因此序列X将有重复项

  • 诀窍是D[i]来自X[i]的相反顺序排列通过确保最小因子与最大因子相乘,以及每个较小因子与每个较大因子以归纳方式配对,从而使总和最小化。从技术上讲,这是因为欧几里德定理;因此,总和的每个乘积都具有最小的素因子集。可以找到X与气泡s的顺序排列在一组基数为N的指数I上并行运行的ort。理解背包问题的关键在于,高维的旋转对应于向量空间中的转置。

    诀窍在于D[I]来自X[I]的相反顺序排列通过确保最小因子与最大因子相乘,以及每个较小因子与每个较大因子以归纳方式配对,从而使总和最小化。从技术上讲,这是因为欧几里德定理;因此,总和的每个乘积都具有最小的素因子集。可以找到X与气泡s的顺序排列ort在一组指数I和基数N上并行运行。理解背包问题的关键是,在更高维度上的旋转对应于向量空间中的转置。

    您不能对您的帖子设置与冲突的限制,请参见我们的。在这里发布,您同意这些条款。非常感谢您的支持建设性的回答,威廉!我现在有很多问题:D[I]是从X[I]的相反顺序排列来的,这意味着什么?什么是顺序排列?欧几里德定理说明素数是无限的。你最后一句话的意思是什么(“理解背包问题的关键是,高维的旋转对应于向量空间中的换位。”)?这个答案似乎解决了一个不同的问题:即,给定一个
    X
    D
    的数组,重新排列每个数组,使
    和(X[i]*D[i])
    最小化(注意没有绝对值,注意
    X
    s的集合是固定的)。我不知道这怎么能解决@Brainless的问题。你不能对你的帖子设置与之冲突的限制,请参阅我们的。通过在这里发布,你同意这些条款。非常感谢你的建设性回答William!我现在有很多问题:D[I]来自X[I]的相反顺序排列是什么意思“?什么是序数置换?欧几里德定理指出素数是无限的。你最后一句话的意思是什么(“理解背包问题的关键是,高维的旋转对应于向量空间中的转置。”)这个答案似乎解决了一个不同的问题:即,给定一个
    X
    D
    的数组,重新排列每个数组,使
    sum(X[i]*D[i])
    最小化(注意没有取绝对值,注意
    X
    的集合是固定的)。我看不出它如何解决@Brainless的问题。