什么是计算机科学的NP-complete?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是计算机科学的NP-complete?相关的知识,希望对你有一定的参考价值。
什么是NP完全问题?为什么它是计算机科学中如此重要的话题?
NP代表非确定性多项式时间。
这意味着可以使用非确定性图灵机(如常规图灵机,但也包括非确定性“选择”函数)在多项式时间内解决问题。基本上,解决方案必须在聚合时间内可测试。如果是这种情况,并且已知NP问题可以使用修改输入的给定问题来解决(NP问题可以减少到给定问题)那么问题是NP完成。
从NP完全问题中拿走的主要问题是它不能以任何已知方式在多项式时间内求解。 NP-Hard / NP-Complete是一种表明某些类型的问题在实际时间内无法解决的方法。
编辑:正如其他人所指出的,NP-Complete问题通常有近似解决方案。在这种情况下,近似解通常使用特殊符号给出近似界限,告诉我们逼近的接近程度。
上述NP完全问题的定义是正确的,但我认为我可能对其哲学重要性抒情,因为还没有人解决这个问题。
几乎所有你遇到的复杂问题都是NP Complete。这个类有一些非常基础的东西,它似乎与易于解决的问题在计算上有所不同。它们有各自的味道,并不是很难识别它们。这基本上意味着任何中等复杂的算法都不可能完全解决 - 调度,优化,打包,覆盖等。
但是,如果您遇到的问题是NP Complete,并非所有问题都会丢失。在人们研究近似算法的过程中,存在着一个庞大且非常技术性的领域,这将为您提供接近NP完全问题解决方案的保证。其中一些是非常强大的保证 - 例如,对于3sat,您可以通过一个非常明显的算法获得7/8保证。更好的是,实际上,有一些非常强大的启发式方法,它们可以为这些问题提供很好的答案(但不能保证!)。
请注意,两个非常着名的问题 - 图同构和因子 - 不知道是P还是NP。
我听到了一个解释,即:“NP-Completeness可能是算法研究中较为神秘的思想之一。”NP“代表”非确定性多项式时间“,并且是所谓的复杂性类的名称。关于NP复杂性类的重要之处在于,该类中的问题可以通过多项式时间算法来验证。例如,考虑计算东西的问题。假设桌子上有一堆苹果。问题是“有多少苹果?”你得到了一个可能的答案,8。你可以用多项式时间验证这个答案,使用算法算,苹果计算苹果。计算苹果发生在O(n) (这是Big-oh表示法)时间,因为计算每个苹果需要一步。对于n个苹果,你需要n个步骤。这个问题在NP复杂性类中。
如果可以证明在多项式时间内它既是NP-Hard又是可验证的,则将问题归类为NP-complete。在没有深入讨论NP-Hard的情况下,可以说有些问题没有找到多项式时间解决方案。也就是说,它需要n! (n阶乘)步骤来解决它们。但是,如果您获得了NP-Complete问题的解决方案,则可以在多项式时间内对其进行验证。
NP-Complete问题的一个典型例子是旅行推销员问题。“
作者:ApoxyButt来自:http://www.everything2.com/title/NP-complete
NP问题: -
- NP问题是可以在非确定性多项式时间内解决的问题。
- 非确定性算法分两个阶段运行。
- 非确定性猜测阶段&&非确定性验证阶段。
Type of Np Problem
- NP完成
- NP Hard
NP完整问题: -
1决策问题A如果具有以下两个属性,则称为NP完成: -
- 它属于NP类。
- NP中的每个其他问题都可以在多项式时间内转换为P.
一些例外: -
- 背包问题
- 子集和问题
- 顶点覆盖问题
NP完全问题是一组问题,每个问题都可以在多项式时间内减少任何其他NP问题,并且其解决方案仍然可以在多项式时间内得到验证。也就是说,任何NP问题都可以转化为任何NP完全问题。 - 非正式地,NP完全问题是NP问题,至少与NP中的任何其他问题一样“强硬”。
NP问题是可以在多项式时间内创建验证解决方案的计算机算法的问题。
NP-Complete问题是NP,但如果你能在多项式时间内解决它(称为P),则所有NP问题都是P.
所以得到破解'。
什么是NP?
NP是所有decision problems(带有是或否答案的问题)的集合,其中“是”答案可以在多项式时间内验证(O(nk),其中n是问题大小,k是常数)由deterministic Turing machine。多项式时间有时用作快速或快速的定义。
什么是P?
P是所有决策问题的集合,可以通过确定性图灵机在多项式时间内求解。由于它们可以在多项式时间内求解,因此也可以在多项式时间内验证它们。因此P是NP的子集。
什么是NP-Complete?
当且仅当NP中的每个其他问题可以快速(即在多项式时间内)转换为x时,NP中的问题x也在NP完全中。
换一种说法:
- x是NP,和
- NP中的每个问题都是reducible到x
因此,NP-Complete如此有趣的原因在于,如果要快速解决任何一个NP-Complete问题,那么所有NP问题都可以快速解决。
另见What's "P=NP?", and why is it such a famous question?
什么是NP-Hard?
NP-Hard问题至少与NP中最难的问题一样困难。注意NP-Complete问题也是NP难的。然而,尽管有NP
作为前缀,但并非所有NP难问题都是NP(甚至是决策问题)。这就是NP-hard中的NP并不意味着非确定性多项式时间。是的,这很令人困惑,但它的使用是根深蒂固的,不太可能改变。
NP-Complete意味着非常具体的东西,你必须小心,否则你会得到错误的定义。首先,NP问题是一个是/否问题
- 对于问题的每个实例都有多项式时间证明,答案为“是”或(等效)为“是”答案
- 存在一个多项式时间算法(可能使用随机变量),如果对问题实例的答案为“是”,则回答“是”的概率为非零,如果100%的话,则表示“否”为“否”。答案是不。”换句话说,该算法必须具有小于100%的假阴性率并且没有误报。
问题X是NP-Complete,如果
- X在NP中,并且
- 对于NP中的任何问题Y,从Y到X都存在“减少”:一种多项式时间算法,它将Y的任何实例转换为X的实例,使得Y实例的答案为“是”,当且仅当如果答案X-instance为“是”。
如果X是NP完全的并且存在确定性的多项式时间算法,其可以正确地解决X的所有实例(0%假阳性,0%假阴性),那么NP中的任何问题都可以在确定性多项式中求解 - 时间(减少到X)。
到目前为止,还没有人提出这样一个确定性的多项式时间算法,但是没有人证明一个不存在(对于任何能够做到这一点的人都有一百万美元:是P = NP problem)。这并不意味着您无法解决NP-Complete(或NP-Hard)问题的特定实例。它只是意味着你不能拥有能够在问题的所有实例上可靠地工作的东西,就像你可以对整数列表进行可靠的排序一样。您很可能能够提出一种算法,该算法在NP-Hard问题的所有实际情况下都能很好地工作。
基本上这个世界的问题可归类为
1)无法解决的问题2)难以处理的问题3)NP问题4)P-问题
1)第一个是解决问题的方法。 2)第二个是需要指数时间(即上面的O(2 ^ n))。 3)第三个称为NP。 4)第四个是容易的问题。
P:指多项式时间问题的解。
NP:指多项式时间尚未找到解决方案。我们不确定没有多项式时间解决方案,但是一旦提供解决方案,就可以在多项式时间中验证此解决方案。
NP完全:在多项式时间中我们仍然没有找到解决方案,但可以在多项式时间中验证。 NP中的NPC问题是比较困难的问题,所以如果我们能够证明我们有解决NPC问题的P,那么可以在P解决方案中找到NP问题。
NP Hard:指多项式时间尚未找到解决方案,但确定无法在多项式时间中进行验证。 NP Hard问题超过NPC难度。
NP-Complete是一类问题。
类P
由多项式时间内可解决的问题组成。例如,它们可以在O(nk)中求解某个常数k,其中n是输入的大小。简而言之,您可以编写一个在合理的时间内运行的程序。
类NP
包含在多项式时间内可验证的那些问题。也就是说,如果给出一个潜在的解决方案,那么我们可以检查给定的解在多项式时间内是否正确。
一些例子是布尔可满足性(或SAT)问题,或哈密顿循环问题。已知NP类中存在许多问题。
NP-Complete
意味着问题至少与NP中的任何问题一样困难。
它对计算机科学很重要,因为已经证明NP中的任何问题都可以转化为NP-complete中的另一个问题。这意味着任何一个NP完全问题的解决方案都是所有NP问题的解决方案。
安全性中的许多算法取决于NP难问题不存在已知解决方案的事实。如果找到解决方案,它肯定会对计算产生重大影响。
这是一类问题,我们必须模拟每种可能性,以确保我们有最佳解决方案。
对于一些NP-Complete问题,有很多很好的启发式方法,但它们只是一个有根据的猜测。
如果你正在寻找一个NP完全问题的例子,那么我建议你看看3-SAT。
基本前提是你在conjunctive normal form中有一个表达式,这是一种说法,你有一系列由OR连接的表达式,所有这些都必须是真的:
(a or b) and (b or !c) and (d or !e or f) ...
3-SAT问题是找到一个满足表达式的解决方案,其中每个OR表达式正好匹配3个布尔值:
(a or !b or !c) and (!a or b or !d) and (b or !c or d) ...
对此的解决方案可能是(a = T,b = T,c = F,d = F)。然而,在一般情况下,没有发现能够在多项式时间内解决该问题的算法。这意味着解决这个问题的最好方法是做一个蛮力猜测和检查,并尝试不同的组合,直到找到一个有效的方法。
3-SAT问题的特殊之处在于,任何NP完全问题都可以归结为3-SAT问题。这意味着如果你能找到一个多项式时间算法来解决这个问题那么你得到$1,000,000,更不用说全世界计算机科学家和数学家的尊重和钦佩。
老实说,Wikipedia可能是寻找答案的最佳地点。
如果NP = P,那么我们可以比以前更快地解决非常困难的问题。如果我们在P(多项式)时间内只解决一个NP-Complete问题,那么它可以应用于NP-Complete类别中的所有其他问题。
我们需要分离算法和问题。我们编写算法来解决问题,并以某种方式扩展。虽然这是一个简化,但是如果缩放足够好,我们用“P”标记算法,如果不是,则标记“NP”。
了解我们试图解决的问题,而不是我们用来解决它们的算法是有帮助的。所以我们会说所有具有良好缩放算法的问题都是“在P中”。并且具有不良缩放算法的那些是“在NP中”。
这意味着许多简单的问题也是“在NP中”,因为我们可以编写糟糕的算法来解决容易出问题的问题。很高兴知道NP中的哪些问题真的很棘手,但我们不只是想说“这是我们没有找到一个好的算法”。毕竟,我可以提出一个问题(称之为X),我认为需要一个超级惊人的算法。我告诉全世界我能用来解决X的最佳算法非常严重,因此我认为X是一个非常棘手的问题。但明天,也许比我更聪明的人发明了一种解决X并且在P中的算法。所以这不是一个很难定义的难题。
同样,NP中存在很多问题,没有人知道一个好的算法。因此,如果我能够证明X是某种问题:也可以使用一种解决X的好算法,以某种迂回的方式,为NP中的每个其他问题提供一个好的算法。那么现在人们可能会更加确信X是一个真正棘手的问题。在这种情况下,我们称之为X NP-Complete。
以上是关于什么是计算机科学的NP-complete?的主要内容,如果未能解决你的问题,请参考以下文章