如何知道问题是否属于NP类?

时间:2019-12-30 14:15:26

标签: constraints linear-programming np-hard simplex p-np

我所知道的(严格来讲): 我知道关于P和NP类的相等性还有一个开放的问题,只要没有已知的算法可以解决P时间中的NP问题,那么我们就区分这些问题的时空可解性。 另外,我知道您可以减少问题之间的多项式时间,因此,如果您知道一个问题属于某个类别,那么另一个问题也将属于此类。 另外,我知道 Simplex 算法可以解决线性编程问题

我想知道的事情 我想知道如果问题属于NP类,该如何“猜测”。它与问题的约束条件,约束条件的数量,约束条件的“类型”有关吗?

示例 在此链接https://www.geeksforgeeks.org/maximum-profit-by-buying-and-selling-a-share-at-most-k-times/中,我们可以看到通过动态编程解决了“最多k次买卖股票最多可获得的最大利润”的算法。

但是,如果我们增加约束,该怎么办?假设我们的资产净值受到限制(我们没有无限的资金),或者我们一次只能买卖一只以上的股票,但是在给定时间内可以买卖的股票数量是有限的,或者我们可以选择各种公司的多种股票,但我们只能拥有的股票总数有限。

我们怎么知道哪种约束使问题越来越难从“ P”级迁移到NP级?问题必须确定什么样的约束条件才能确定该问题属于P类还是NP类?

1 个答案:

答案 0 :(得分:1)

您可以通过将已知为NP-硬的问题减少到当前问题来证明问题的NP-Hardness。更正确地,您应该首先制定手头优化的决策问题版本。然后,将NP-完全问题简化为决策版本。通过找到有效的减少量,可以证明您的优化问题是NP-Hard。看看减少https://www.wikiwand.com/en/Reduction_(complexity)

的想法