是啥让 NP-hard 问题不是 NP-complete 问题?
Posted
技术标签:
【中文标题】是啥让 NP-hard 问题不是 NP-complete 问题?【英文标题】:What makes an NP-hard problem not to be an NP-complete problem?是什么让 NP-hard 问题不是 NP-complete 问题? 【发布时间】:2011-08-04 23:20:12 【问题描述】:我对 NP 难题感到困惑。 一些 NP-hard 问题在 NP 中称为 NP-Complete,而有些则不在 NP 中。 例如:停机问题只是 NP-hard,而不是 NP-complete。 但为什么它不是 NP-complete 呢?我的意思是问题必须符合什么属性 “NP难但不是NP完全问题”?
【问题讨论】:
你可能会发现这个网站的使用:cstheory.stackexchange.com 一直是closed as "too elementary" on the CS Theory SE ;-) 我不是在建议迁移,只是一些有趣的阅读。 【参考方案1】:我认为最短的答案是:NP-complete = NP-hard AND in NP。
因此,要证明一个问题是 NP 完全的,您必须证明它既是 NP 难的又是 NP 的。通常,表明问题存在于 NP 中非常容易(只需给出一个非确定性多项式时间算法)。证明一个问题是 NP-hard 是非常困难的。因此,即使在 NP-完备性的证明中,大部分证明都致力于 NP-硬度。
对于停机问题,它不在NP中,因此不是NP完全的。
【讨论】:
【参考方案2】:定义 NP 的原因是您可以在多项式时间内验证 NP 问题的解。因此,如果一个问题是 NP 难的,但不是 NP 完全的,则您无法在理论上及时验证问题的解决方案。如果您查看停止问题,这是有道理的。解决方案是“是”或“否”,您只能通过再次解决原始问题来验证,这意味着它不在 NP 中。
【讨论】:
【参考方案3】:NP-hard 简单的意思是“至少和 NP 中的问题一样难”。 NP-complete的意思是“在NP中,所有的NP-complete问题都可以归结为这个问题,这个问题可以归结为所有的NP-complete问题”。
The Wikipedia article 可能是一个很好的起点,因为它专门讨论了停机问题作为其插图之一。
【讨论】:
我读了***的文章,但不太明白。我的意思是“至少和 NP 中的问题一样难”,什么? NP-hard 问题也满足这种归约性质。 所有 NP 完全问题都是 NP 难题,一些 NP 难题比 NP 完全问题更难(也就是说,它们至少与 NP 完全问题一样难,但不可翻译到/从 NP 完全问题)。【参考方案4】:简短回答: 唯一不是 NP 完全的 NP 难题是那些不属于 NP 的问题。
长答案:
现在,这是为什么呢?让我们仔细看一下 NP-complete 和 NP-hard 的定义:
问题 X 是 NP 完全的,如果:
在NP中
NP 中的每个问题都可以在多项式时间内简化为 X。
如果问题 X 满足 (2) 则为 NP-hard((1) 不是必要条件)。
根据这些定义,很明显可以得出这样的结论:NP 难但不是 NP 完全的唯一问题是 NP 之外的问题。
例如,所有不是决策问题的 NP-hard 问题都不是 NP 完全的(因为根据定义,NP 是由决策问题形成的)。特别是旅行推销员问题的搜索版本:给定一个城市列表及其成对距离,任务是找到最短的可能路线,该路线仅访问每个城市一次并返回到起点城市。
TSP 的搜索版本被证明是 NP 难的,但由于它不是决策问题(您无法通过对问题回答是或否来解决它)它不是 NP 的一部分,因此不能是 NP 完全的.
停止问题是一个决策问题,但它在多项式时间内无法验证(根据定义,问题在 NP 中的第二个要求),这就是为什么它不能是 NP 完全的。 p>
【讨论】:
以上是关于是啥让 NP-hard 问题不是 NP-complete 问题?的主要内容,如果未能解决你的问题,请参考以下文章
是啥让 Maven 想要使用 Zulu Java 11 的 openjfx 而不是 Zulu Java 8 用于 Spring Boot 项目?