【问题标题】:Come up with polynomial algorithm提出多项式算法
【发布时间】:2017-01-27 01:18:02
【问题描述】:

给定n张支票,每张任意(整数)货币价值,决定支票是否可以分成具有相同货币价值的两部分。

我不知道如何解决这个问题。有没有一种算法可以在多项式时间内解决这个问题,还是这个 NP-Complete?

【问题讨论】:

  • 可能这个问题最好放在programming puzzlepuzzling
  • @yaitloutou 我认为这里的问题比令人费解或编程难题更重要。顶多应该发到cs.stackexchange.com
  • @user31264 感谢您的澄清

标签: algorithm np-complete


【解决方案1】:

是的,这是一个 NP 完全问题。这是the subset sum problem 的变体。

【讨论】:

  • 太棒了,谢谢!我对此困惑了很久。好奇如果我对两个不同的值进行 N 次检查会怎样。例如值 X 和值 Y。那么任何算法都会是 NP 完整的吗?
  • 对于两个不同的值,您可以求解简单的丢番图方程。在一般情况下,有使用动态规划的伪多项式算法。
  • 你错了,这可以通过使用动态规划的多项式复杂度来完成。
  • @AbdenaceurLichiheb 对不起,你错了。这被称为“弱 NP 完全问题”。它可以通过与数字大小成正比的时间动态程序来解决。如果数字没有限制范围,这需要输入大小的时间指数。
  • 是的,你说得对,我不知道“弱 NP 完全问题”告诉知道,我认为背包问题不是 NP 完全问题,很抱歉称你的解决方案错误!
【解决方案2】:

实际上你可以使用动态编程在 O(n*sum/2) 中解决这个问题,首先将所有检查汇总为一个 varaibel 总和,然后你可以对检查值执行 dp(要么接受它,要么离开它,要么接受它) 并在最后检查该总和是否等于 s/2。

【讨论】:

  • 不过,这不是 P,因为 sumn 一起增长。由于算法要么接受检查,要么离开检查,因此对于每一次检查,都有指数级的复杂性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2014-02-10
相关资源
最近更新 更多