【问题标题】:Simultaneous Subset sums同时子集和
【发布时间】:2018-05-02 15:34:26
【问题描述】:

我正在处理一个问题,它是子集和问题的变体,我希望额外的约束可以使它比经典的子集和问题更容易解决。我已经搜索了这个约束的问题,但是我无法在 StackOverflow 上或通过其他地方的谷歌搜索找到一个具有适当算法的好例子。

问题:

假设您有两个正数列表 A1,A2,A3... 和 B1,B2,B3... 具有相同数量的元素 N。有两个和 Sa 和 Sb。问题是找到同时集 Q 其中 |sum (A{Q}) - Sa|

现在,我可以将其作为两个完全独立的子集和问题来解决,但删除同时性约束会导致错误解决方案的可能性(其中 Qa != Qb)。我还怀疑附加约束应该比两个 NP 完全问题更容易解决这个问题。我想解决两个数字列表中包含 18 个以上元素的实例,并且大多数子集和算法在这些元素的情况下运行时间很长。我已经研究了伪多项式运行时动态规划算法,但这有以下问题:a)速度依赖于数字列表的短位深度(这不一定适用于我的实例)和 b)它确实不考虑同时性约束。

关于如何使用同时性约束来减少运行时间的任何建议?有没有我可以用来考虑这个约束的动态编程方法?

【问题讨论】:

    标签: dynamic-programming subset-sum


    【解决方案1】:

    如果我正确理解了您对问题的描述(我对为什么您在“sum (A{Q}) - Sa”和“sum (B{Q}) - Sb”周围有距离符号感到困惑,它似乎不适合其余的解释),那么它在 NP 中。

    您可以通过从子集总和 (SUB) 减少到同时子集总和 (SIMSUB) 来看到这一点。 如果您有一个由集合 X = {x1,x2,...,xn} 和一个名为 t 的目标组成的 SUB 问题,并且您有一个算法可以在给定两个集合 A = {a1,a2,... 时解决 SIMSUB ,an} 和 B = {b1,b2,...,bn},两个整数 Sa 和 Sb 以及 epsilon 的值,那么我们可以像这样求解 SUB: 令 A = X 并令 B 为长度为 n 的集合,仅由 0 组成。设置 Sa = t,Sb = 0 和 epsilon = 0。您现在可以对这个问题运行 SIMSUB 算法并得到您的 SUB 问题的解决方案。 这表明 SUBSIM 与 SUB 一样难,因此在 NP 中。

    【讨论】:

    • 感谢您抽出宝贵时间回答。但是,我不认为这个答案是正确的。将第二组中的所有参数设置为零有效地消除了约束。是的,这将减少到 SUB。然而,约束增加了特异性,就像在一组线性方程中添加一个方程一样,所以摆脱它应该会使问题变得更难,而不是更容易。因此,我不遵循您的逻辑,即 SUBSIM 至少与 SUB 一样难。证明它至少和 SUB 一样简单是很好的逻辑。
    • 另外,澄清一下,| |在这种情况下,符号是绝对值。
    • 我明白它是绝对值,是的,我只是不明白为什么,但我现在明白了。
    • 添加约束并不一定会使问题变得更容易。我的减少可能存在问题,您很可能比我更好地发现它们,因为您更关注问题,但如果没有,那么我很肯定我是正确的。如果可以用SIMSUB的算法求解SUB,而且SIMSUB比SUB容易,那么SUB比SUB容易,没有意义。
    • 我只是想补充一下,以防你不习惯我的争论类型:如果你有问题,A (SUB),已知在 NP 中,你可以仅使用多项式时间(在本例中为线性时间)将其转换(减少)为另一个问题 B(SIMSUM),那么您已经证明问题 B 也在 NP 中。这是证明问题存在于 NP 中的标准方法。如果您考虑一下,这完全有道理,因为能够快速解决 B 意味着能够快速解决 A,因为我们可以将其转换为 B 问题然后解决它。因此,我认为 SIMSUM 至少与 SUB 一样难。
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2022-01-19
    • 2020-08-22
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多