Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 什么是计算机科学中的NP完全?_Algorithm_Language Agnostic_Mathematical Optimization_Theory_Np Complete - Fatal编程技术网

Algorithm 什么是计算机科学中的NP完全?

Algorithm 什么是计算机科学中的NP完全?,algorithm,language-agnostic,mathematical-optimization,theory,np-complete,Algorithm,Language Agnostic,Mathematical Optimization,Theory,Np Complete,什么是NP完全问题?为什么它在计算机科学中如此重要?老实说,也许是寻找答案的最佳地方 如果NP=p,那么我们可以比以前想象的更快地解决非常困难的问题。如果我们在P(多项式)时间内只解决一个NP完全问题,那么它可以应用于NP完全范畴内的所有其他问题。这是一类问题,我们必须模拟每一种可能性,以确保我们有最优解 对于一些NP完全问题,有很多很好的启发式方法,但它们充其量只是一个有根据的猜测。NP代表非确定性多项式时间 这意味着可以使用非确定性图灵机(类似于常规图灵机,但也包括非确定性“选择”函数)在多

什么是NP完全问题?为什么它在计算机科学中如此重要?

老实说,也许是寻找答案的最佳地方


如果NP=p,那么我们可以比以前想象的更快地解决非常困难的问题。如果我们在P(多项式)时间内只解决一个NP完全问题,那么它可以应用于NP完全范畴内的所有其他问题。

这是一类问题,我们必须模拟每一种可能性,以确保我们有最优解


对于一些NP完全问题,有很多很好的启发式方法,但它们充其量只是一个有根据的猜测。

NP代表非确定性多项式时间

这意味着可以使用非确定性图灵机(类似于常规图灵机,但也包括非确定性“选择”函数)在多项式时间内解决问题。基本上,一个解决方案必须是可测试的。如果是这样的话,一个已知的NP问题可以用修改输入的给定问题来解决(一个NP问题可以简化为给定问题),那么这个问题就是NP完全问题

一个NP完全问题的主要问题是,它不能以任何已知的方式在多项式时间内求解。NP-Hard/NP-Complete是一种表示某些类问题在现实时间内不可解的方法


编辑:正如其他人所指出的,NP完全问题通常有近似解。在这种情况下,近似解通常使用特殊符号给出近似界,它告诉我们近似值有多接近。

NP Complete意味着非常具体的东西,你必须小心,否则你会得到错误的定义。首先,NP问题是一个肯定/否定问题

  • 对于问题的每个实例,都有多项式时间证明,答案为“是”,或(等价地)
  • 存在一种多项式时间算法(可能使用随机变量),如果问题实例的答案为“是”,则回答“是”的概率为非零,如果答案为“否”,则会在100%的时间内说“否”。换句话说,该算法的假阴性率必须小于100%,且无假阳性
  • 问题X是NP完全的,如果

  • X在NP中,并且
  • 对于NP中的任何问题Y,都有一个从Y到X的“归约”:一个多项式时间算法,它将Y的任何实例转换为X的实例,从而当且仅当X实例的答案为“是”时,Y实例的答案为“是”
  • 如果X是NP完全的,并且存在一个确定的多项式时间算法,可以正确地解决X的所有实例(0%误报,0%误报),那么NP中的任何问题都可以在确定的多项式时间内解决(通过减少到X)


    到目前为止,还没有人提出过这样一个确定的多项式时间算法,但没有人证明它是不存在的(任何一个能做到这一点的人都要花一百万美元:这就是问题所在)。这并不意味着你不能解决一个NP完全(或NP难)问题的特定实例。这只是意味着你不能像对整数列表进行可靠排序那样,在所有问题实例上都能可靠地工作。你很可能会想出一个算法,它能很好地处理NP难问题的所有实际情况。

    NP完全是一类问题

    p
    由可在多项式时间内解决的问题组成。例如,对于某个常数k,它们可以用O(nk)来求解,其中n是输入的大小。简单地说,您可以编写一个在合理时间内运行的程序

    NP
    由那些在多项式时间内可验证的问题组成。也就是说,如果我们得到一个潜在的解决方案,那么我们可以检查给定的解决方案在多项式时间内是否正确

    一些例子是布尔可满足性(或SAT)问题,或哈密顿循环问题。在NP类中有许多已知的问题

    NP-Complete
    表示该问题至少与NP中的任何问题一样难

    这对计算机科学很重要,因为已经证明NP中的任何问题都可以转化为另一个NP完全问题。这意味着任何一个NP完全问题的解都是所有NP问题的解


    许多安全算法依赖于NP难问题不存在已知解这一事实。如果找到一个解决方案,它肯定会对计算产生重大影响。

    如果你正在寻找一个NP完全问题的例子,那么我建议你看看

    基本前提是你在中有一个表达式,这是一种表示你有一系列表达式,这些表达式由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问题。这意味着,如果你能找到一个多项式时间算法来解决这个问题,那么你就得到了,更不用说全世界计算机科学家和数学家的尊敬和钦佩了。

    上面对NP完全问题的定义是正确的,但我想我可能会成为抒情诗人