# P/NP问题

【译者】：周浩杰，如有问题，欢迎交流与提出建议

【进度】：已完成维基百科中除18Reference参考文献及其后面19，20，21的内容

【方式】：我一字一句翻译完后，在不更改原意的基础上修改了表达，使之更地道。比如很多很长的定语修饰一个词，我进行了拆分；合并了相同的修饰成分等。但没有对句子间的衔接进行地道化。

【格式】：翻译方式是另起一个标题板块后翻译全部内容，而不是一小段一小段对照翻译。翻译不常见人名会在后面的括号中添加英文，而常见的如夏洛克，华生，汤普森则不会。

【问题】：部分参考文献爬取下来存在格式问题，图片没爬取下来；在引用后拼写含有i字母会有bug

【备注】：此文过于专业，虽然作为一个计科专业的本科生，我对一些概念略有涉猎，但还是有很多概念没有学过，大致通过搜索引擎学习了一下，但用一个月翻译这篇文章对于我而言时间有限，一些内容我还是没有看懂，所以我就望文生义，这些内容我都在旁边做了说明。

The P versus NP problem is a major unsolved problem in computer science. It asks whether every problem whose solution can be quickly verified can also be solved quickly.

The P versus NP problem is a major unsolved problem in computer science. It asks whether every problem whose solution can be quickly verified can also be solved quickly.

P/NP问题是众多尚未解决的计算机理论和算法复杂度中最重要的一个难题，分别由加拿大科学家史蒂芬·库克和俄罗斯科学家雷纳德·里文在1970年代独立提出。它也被克雷数学研究所列为“七大千禧大奖难题”之一，第一个解决的人将100万美元奖励。

The informal term quickly, used above, means the existence of an algorithm solving the task that runs in polynomial time, such that the time to complete the task varies as a polynomial function on the size of the input to the algorithm (as opposed to, say, exponential time). The general class of questions for which some algorithm can provide an answer in polynomial time is "P" or "class P". For some questions, there is no known way to find an answer quickly, but if one is provided with information showing what the answer is, it is possible to verify the answer quickly. The class of questions for which an answer can be verified in polynomial time is NP, which stands for "nondeterministic polynomial time".[Note 1]

The informal term quickly, used above, means the existence of an algorithm solving the task that runs in polynomial time, such that the time to complete the task varies as a polynomial function on the size of the input to the algorithm (as opposed to, say, exponential time). The general class of questions for which some algorithm can provide an answer in polynomial time is "P" or "class P". For some questions, there is no known way to find an answer quickly, but if one is provided with information showing what the answer is, it is possible to verify the answer quickly. The class of questions for which an answer can be verified in polynomial time is NP, which stands for "nondeterministic polynomial time".A nondeterministic Turing machine can move to a state that is not determined by the previous state. Such a machine could solve an NP problem in polynomial time by falling into the correct answer state (by luck), then conventionally verifying it. Such machines are not practical for solving realistic problems but can be used as theoretical models.

P/NP问题的核心在于判断一个计算问题能否被快速的解决和答案可被快速的验证。前面的“快速”指是否存在一个只用多项式时间内解决计算问题的算法，也就是说算法完成计算任务的时间与任务的输入量呈多项式函数相关，而不是线形时间或指数时间。复杂度P类是指一类可以通过多项式时间内的算法解决的计算问题。还有一类计算问题，它们没有已知的可以在多项式时间内解决的算法，但可以在多项式时间内快速验证答案是可能的，这类计算问题即复杂度NP类问题。如果从以图灵机来理解，一个非确定型图灵机因其不受以往确定状态的影响，可以在多项式时间内随机移动到NP类问题的答案态，再通过传统方式验证它。那么这种机器只可以用作理论模型，但没有用它解决实际问题的价值。

An answer to the P versus NP question would determine whether problems that can be verified in polynomial time can also be solved in polynomial time. If it turns out that P ≠ NP, which is widely believed, it would mean that there are problems in NP that are harder to compute than to verify: they could not be solved in polynomial time, but the answer could be verified in polynomial time.

An answer to the P versus NP question would determine whether problems that can be verified in polynomial time can also be solved in polynomial time. If it turns out that P ≠ NP, which is widely believed, it would mean that there are problems in NP that are harder to compute than to verify: they could not be solved in polynomial time, but the answer could be verified in polynomial time.

P/NP问题的答案将决定可在多项式时间内验证的计算问题是否也可以在多项式时间内解决。当前，科学家广泛认为P ≠ NP，若它被证明，将意味着在NP类计算问题中有一些问题是难以通过算法计算的。也就是说，他们不能在多项式时间内解决，但答案可以在多项式时间内验证。简单的来说，P ≠ NP代表部分问题是“困难”的，反之，如果P = NP则意味着所有计算问题都会“容易”解决。

The problem is considered by many to be the most important open problem in computer science.[1] Aside from being an important problem in computational theory, a proof either way would have profound implications for mathematics, cryptography, algorithm research, artificial intelligence, game theory, multimedia processing, philosophy, economics and many other fields.[2]

The problem is considered by many to be the most important open problem in computer science. Aside from being an important problem in computational theory, a proof either way would have profound implications for mathematics, cryptography, algorithm research, artificial intelligence, game theory, multimedia processing, philosophy, economics and many other fields.

It is one of the seven Millennium Prize Problems selected by the Clay Mathematics Institute, each of which carries a US$1,000,000 prize for the first correct solution. It is one of the seven Millennium Prize Problems selected by the Clay Mathematics Institute, each of which carries a US$1,000,000 prize for the first correct solution.

【前言部分】

P/NP问题是计算机科学领域中一个尚未解决的重要问题。它指是否每一个问题都既可以快速验证它的解是否正确，同时也能快速找出它的解。

## Example

Consider Sudoku, a game where the player is given a partially filled-in grid of numbers and attempts to complete the grid following certain rules. Given an incomplete Sudoku grid, of any size, is there at least one legal solution? Any proposed solution is easily verified, and the time to check a solution grows slowly (polynomially) as the grid gets bigger. However, all known algorithms for finding solutions take, for difficult examples, time that grows exponentially as the grid gets bigger. So, Sudoku is in NP (quickly checkable) but does not seem to be in P (quickly solvable). Thousands of other problems seem similar, in that they are fast to check but slow to solve. Researchers have shown that many of the problems in NP have the extra property that a fast solution to any one of them could be used to build a quick solution to any other problem in NP, a property called NP-completeness. Decades of searching have not yielded a fast solution to any of these problems, so most scientists suspect that none of these problems can be solved quickly. This, however, has never been proven.

Consider Sudoku, a game where the player is given a partially filled-in grid of numbers and attempts to complete the grid following certain rules. Given an incomplete Sudoku grid, of any size, is there at least one legal solution? Any proposed solution is easily verified, and the time to check a solution grows slowly (polynomially) as the grid gets bigger. However, all known algorithms for finding solutions take, for difficult examples, time that grows exponentially as the grid gets bigger. So, Sudoku is in NP (quickly checkable) but does not seem to be in P (quickly solvable). Thousands of other problems seem similar, in that they are fast to check but slow to solve. Researchers have shown that many of the problems in NP have the extra property that a fast solution to any one of them could be used to build a quick solution to any other problem in NP, a property called NP-completeness. Decades of searching have not yielded a fast solution to any of these problems, so most scientists suspect that none of these problems can be solved quickly. This, however, has never been proven.

## History

The precise statement of the P versus NP problem was introduced in 1971 by Stephen Cook in his seminal paper "The complexity of theorem proving procedures"[3] (and independently by Leonid Levin in 1973[4]).

The precise statement of the P versus NP problem was introduced in 1971 by Stephen Cook in his seminal paper "The complexity of theorem proving procedures" (and independently by Leonid Levin in 1973).

1971年，多伦多大学教授史蒂芬·库克在他的开创性论文《定理证明过程的复杂性》（英文："The complexity of theorem proving procedures"）中提出了P/NP问题的精确陈述，这个问题后来又在1973年由波士顿大学教授雷纳德·里文独立提出。

Although the P versus NP problem was formally defined in 1971, there were previous inklings of the problems involved, the difficulty of proof, and the potential consequences. In 1955, mathematician John Nash wrote a letter to the NSA, where he speculated that cracking a sufficiently complex code would require time exponential in the length of the key.[5] If proved (and Nash was suitably skeptical) this would imply what is now called P ≠ NP, since a proposed key can easily be verified in polynomial time. Another mention of the underlying problem occurred in a 1956 letter written by Kurt Gödel to John von Neumann. Gödel asked whether theorem-proving (now known to be co-NP-complete) could be solved in quadratic or linear time,[6] and pointed out one of the most important consequences—that if so, then the discovery of mathematical proofs could be automated.

Although the P versus NP problem was formally defined in 1971, there were previous inklings of the problems involved, the difficulty of proof, and the potential consequences. In 1955, mathematician John Nash wrote a letter to the NSA, where he speculated that cracking a sufficiently complex code would require time exponential in the length of the key. If proved (and Nash was suitably skeptical) this would imply what is now called P ≠ NP, since a proposed key can easily be verified in polynomial time. Another mention of the underlying problem occurred in a 1956 letter written by Kurt Gödel to John von Neumann. Gödel asked whether theorem-proving (now known to be co-NP-complete) could be solved in quadratic or linear time, and pointed out one of the most important consequences—that if so, then the discovery of mathematical proofs could be automated.

## 历史

1971年，史蒂芬·库克（Stephen Cook）在他的开创性论文《定理证明过程的复杂性》[3]（"The complexity of theorem proving procedures"）中精确表述了P/NP问题。在1973年雷纳德·里文（Leonid Levin）也独立提出该问题。[4]

## Context

== The relation between the complexity classes P and NP is studied in computational complexity theory, the part of the theory of computation dealing with the resources required during computation to solve a given problem. The most common resources are time (how many steps it takes to solve a problem) and space (how much memory it takes to solve a problem). The relation between the complexity classes P and NP is studied in computational complexity theory, the part of the theory of computation dealing with the resources required during computation to solve a given problem. The most common resources are time (how many steps it takes to solve a problem) and space (how much memory it takes to solve a problem).

= = 提出背景 = = 探讨P/NP类问题是被放在计算复杂性理论大背景中进行的，尤其是有关计算过程资源消耗的问题。这类资源消耗问题主要讨论计算时间（解决问题需要多少步骤）和计算空间（解决问题需要多少内存）。

In such analysis, a model of the computer for which time must be analyzed is required. Typically such models assume that the computer is deterministic (given the computer's present state and any inputs, there is only one possible action that the computer might take) and sequential (it performs actions one after the other). In such analysis, a model of the computer for which time must be analyzed is required. Typically such models assume that the computer is deterministic (given the computer's present state and any inputs, there is only one possible action that the computer might take) and sequential (it performs actions one after the other).

In this theory, the class P consists of all those decision problems (defined below) that can be solved on a deterministic sequential machine in an amount of time that is polynomial in the size of the input; the class NP consists of all those decision problems whose positive solutions can be verified in polynomial time given the right information, or equivalently, whose solution can be found in polynomial time on a non-deterministic machine.[7] Clearly, P ⊆ NP. Arguably, the biggest open question in theoretical computer science concerns the relationship between those two classes:

Is P equal to NP? In this theory, the class P consists of all those decision problems (defined below) that can be solved on a deterministic sequential machine in an amount of time that is polynomial in the size of the input; the class NP consists of all those decision problems whose positive solutions can be verified in polynomial time given the right information, or equivalently, whose solution can be found in polynomial time on a non-deterministic machine.Sipser, Michael: Introduction to the Theory of Computation, Second Edition, International Edition, page 270. Thomson Course Technology, 2006. Definition 7.19 and Theorem 7.20. Clearly, P ⊆ NP. Arguably, the biggest open question in theoretical computer science concerns the relationship between those two classes:
Is P equal to NP?
P类问题指一类由%确定的按顺序的%的计算机完成并能在多项式时间内解决的问题；NP问题指一类可以在多项式时间内验证答案的问题，或者通过%非确定性的%计算机上可以在多项式时间内找到答案的问题。（来源：迈克尔 · 西普塞尔: 美国计算理论学会简介，第二版，国际版，第270页。汤姆森课程科技，2006。定义7.19和定理7.20。）可见，P ⊆ NP。所以说，理论计算科学中最大的开放性问题就是这两个问题类之间的关系: P类问题等价于NP类问题吗？
Since 2002, William Gasarch has conducted three polls of researchers concerning this and related questions.[8][9][10]Confidence that P ≠ NP has been increasing – in 2019, 88% believed P ≠ NP, as opposed to 83% in 2012 and 61% in 2002. When restricted to experts, the 2019 answers became 99% believe P ≠ NP.[10] These polls do not imply anything about whether P=NP is true, as stated by Gasarch himself: ″This does not bring us any closer to solving P=?NP or to knowing when it will be solved, but it attempts to be an objective report on the subjective opinion of this era.″ Since 2002, William Gasarch has conducted three polls of researchers concerning this and related questions. Confidence that P ≠ NP has been increasing – in 2019, 88% believed P ≠ NP, as opposed to 83% in 2012 and 61% in 2002. When restricted to experts, the 2019 answers became 99% believe P ≠ NP. These polls do not imply anything about whether P=NP is true, as stated by Gasarch himself: ″This does not bring us any closer to solving P=?NP or to knowing when it will be solved, but it attempts to be an objective report on the subjective opinion of this era.″
2002年以来，威廉·加萨奇就这一问题对研究人员进行了三次调查。相信P类不等于NP类的人数一直在增加——2019年，88%的人相信P类不等于NP类，而2012年和2002年的这一比例分别为83% 和61%。如果只关注专家的态度，2019年的结果显示99%的人相信P类不等于NP类。这些调查并非代表P = NP，如加萨奇说：“这个调查的目的不是为了更接近真相，而是为了更客观的了解学者们对一个未知真相的主观意见。” ==

P是否等于NP？

## NP-completeness

NP-hard problems are those at least as hard as NP problems; i.e., all NP problems can be reduced (in polynomial time) to them. NP-hard problems need not be in NP; i.e., they need not have solutions verifiable in polynomial time. NP-hard problems are those at least as hard as NP problems; i.e., all NP problems can be reduced (in polynomial time) to them. NP-hard problems need not be in NP; i.e., they need not have solutions verifiable in polynomial time.

NP困难问题是指至少和NP问题一样困难的问题，也就是说，所有NP问题都可以（在多项式时间内）简化为NP困难问题。NP困难问题不一定是NP问题，它们不需要在多项式时间内有可验证的解。

For instance, the Boolean satisfiability problem is NP-complete by the Cook–Levin theorem, so any instance of anyproblem in NP can be transformed mechanically into an instance of the Boolean satisfiability problem in polynomial time. The Boolean satisfiability problem is one of many such NP-complete problems. If any NP-complete problem is in P, then it would follow that P = NP. However, many important problems have been shown to be NP-complete, and no fast algorithm for any of them is known. For instance, the Boolean satisfiability problem is NP-complete by the Cook–Levin theorem, so any instance of any problem in NP can be transformed mechanically into an instance of the Boolean satisfiability problem in polynomial time. The Boolean satisfiability problem is one of many such NP-complete problems. If any NP-complete problem is in P, then it would follow that P = NP. However, many important problems have been shown to be NP-complete, and no fast algorithm for any of them is known.

Based on the definition alone it is not obvious that NP-complete problems exist; however, a trivial and contrived NP-complete problem can be formulated as follows: given a description of a Turing machine M guaranteed to halt in polynomial time, does there exist a polynomial-size input that M will accept?[11] It is in NP because (given an input) it is simple to check whether M accepts the input by simulating M; it is NP-complete because the verifier for any particular instance of a problem in NP can be encoded as a polynomial-time machine M that takes the solution to be verified as input. Then the question of whether the instance is a yes or no instance is determined by whether a valid input exists. Based on the definition alone it is not obvious that NP-complete problems exist; however, a trivial and contrived NP-complete problem can be formulated as follows: given a description of a Turing machine M guaranteed to halt in polynomial time, does there exist a polynomial-size input that M will accept? It is in NP because (given an input) it is simple to check whether M accepts the input by simulating M; it is NP-complete because the verifier for any particular instance of a problem in NP can be encoded as a polynomial-time machine M that takes the solution to be verified as input. Then the question of whether the instance is a yes or no instance is determined by whether a valid input exists.

The first natural problem proven to be NP-complete was the Boolean satisfiability problem, also known as SAT. As noted above, this is the Cook–Levin theorem; its proof that satisfiability is NP-complete contains technical details about Turing machines as they relate to the definition of NP. However, after this problem was proved to be NP-complete, proof by reduction provided a simpler way to show that many other problems are also NP-complete, including the game Sudoku discussed earlier. In this case, the proof shows that a solution of Sudoku in polynomial time could also be used to complete Latin squares in polynomial time.[12] This in turn gives a solution to the problem of partitioning tri-partite graphs into triangles,[13] which could then be used to find solutions for the special case of SAT known as 3-SAT,[14] which then provides a solution for general Boolean satisfiability. So a polynomial time solution to Sudoku leads, by a series of mechanical transformations, to a polynomial time solution of satisfiability, which in turn can be used to solve any other NP-problem in polynomial time. Using transformations like this, a vast class of seemingly unrelated problems are all reducible to one another, and are in a sense "the same problem".

The first natural problem proven to be NP-complete was the Boolean satisfiability problem, also known as SAT. As noted above, this is the Cook–Levin theorem; its proof that satisfiability is NP-complete contains technical details about Turing machines as they relate to the definition of NP. However, after this problem was proved to be NP-complete, proof by reduction provided a simpler way to show that many other problems are also NP-complete, including the game Sudoku discussed earlier. In this case, the proof shows that a solution of Sudoku in polynomial time could also be used to complete Latin squares in polynomial time. This in turn gives a solution to the problem of partitioning tri-partite graphs into triangles, which could then be used to find solutions for the special case of SAT known as 3-SAT, which then provides a solution for general Boolean satisfiability. So a polynomial time solution to Sudoku leads, by a series of mechanical transformations, to a polynomial time solution of satisfiability, which in turn can be used to solve any other NP-problem in polynomial time. Using transformations like this, a vast class of seemingly unrelated problems are all reducible to one another, and are in a sense "the same problem".

## NP完全性

NP难问题是那些至少和NP问题一样难；也就是说所有NP问题都可以（在多项式时间内）归约成它们。NP难问题不一定是NP问题；也就是说它们的解不一定能在多项式时间内验证。

## Harder problems

Although it is unknown whether P = NP, problems outside of P are known. Just as the class P is defined in terms of polynomial running time, the class EXPTIME is the set of all decision problems that have exponential running time. In other words, any problem in EXPTIME is solvable by a deterministic Turing machine in O(2p(n)) time, where p(n) is a polynomial function of n. A decision problem is EXPTIME-complete if it is in EXPTIME, and every problem in EXPTIME has a polynomial-time many-one reduction to it. A number of problems are known to be EXPTIME-complete. Because it can be shown that P ≠ EXPTIME, these problems are outside P, and so require more than polynomial time. In fact, by the time hierarchy theorem, they cannot be solved in significantly less than exponential time. Examples include finding a perfect strategy for chess positions on an N × N board[15] and similar problems for other board games.[16]

Although it is unknown whether P = NP, problems outside of P are known. Just as the class P is defined in terms of polynomial running time, the class EXPTIME is the set of all decision problems that have exponential running time. In other words, any problem in EXPTIME is solvable by a deterministic Turing machine in O(2p(n)) time, where p(n) is a polynomial function of n. A decision problem is EXPTIME-complete if it is in EXPTIME, and every problem in EXPTIME has a polynomial-time many-one reduction to it. A number of problems are known to be EXPTIME-complete. Because it can be shown that P ≠ EXPTIME, these problems are outside P, and so require more than polynomial time. In fact, by the time hierarchy theorem, they cannot be solved in significantly less than exponential time. Examples include finding a perfect strategy for chess positions on an N × N board and similar problems for other board games.

The problem of deciding the truth of a statement in Presburger arithmetic requires even more time. Fischer and Rabin proved in 1974[17] that every algorithm that decides the truth of Presburger statements of length n has a runtime of at least $\displaystyle{ 2^{2^{cn}} }$ for some constant c. Hence, the problem is known to need more than exponential run time. Even more difficult are the undecidable problems, such as the halting problem. They cannot be completely solved by any algorithm, in the sense that for any particular algorithm there is at least one input for which that algorithm will not produce the right answer; it will either produce the wrong answer, finish without giving a conclusive answer, or otherwise run forever without producing any answer at all.

The problem of deciding the truth of a statement in Presburger arithmetic requires even more time. Fischer and Rabin proved in 1974 that every algorithm that decides the truth of Presburger statements of length n has a runtime of at least 2^{2^{cn}} for some constant c. Hence, the problem is known to need more than exponential run time. Even more difficult are the undecidable problems, such as the halting problem. They cannot be completely solved by any algorithm, in the sense that for any particular algorithm there is at least one input for which that algorithm will not produce the right answer; it will either produce the wrong answer, finish without giving a conclusive answer, or otherwise run forever without producing any answer at all.

It is also possible to consider questions other than decision problems. One such class, consisting of counting problems, is called #P: whereas an NP problem asks "Are there any solutions?", the corresponding #P problem asks "How many solutions are there?" Clearly, a #P problem must be at least as hard as the corresponding NP problem, since a count of solutions immediately tells if at least one solution exists, if the count is greater than zero. Surprisingly, some #P problems that are believed to be difficult correspond to easy (for example linear-time) P problems.[18] For these problems, it is very easy to tell whether solutions exist, but thought to be very hard to tell how many. Many of these problems are #P-complete, and hence among the hardest problems in #P, since a polynomial time solution to any of them would allow a polynomial time solution to all other #P problems.

It is also possible to consider questions other than decision problems. One such class, consisting of counting problems, is called #P: whereas an NP problem asks "Are there any solutions?", the corresponding #P problem asks "How many solutions are there?" Clearly, a #P problem must be at least as hard as the corresponding NP problem, since a count of solutions immediately tells if at least one solution exists, if the count is greater than zero. Surprisingly, some #P problems that are believed to be difficult correspond to easy (for example linear-time) P problems. For these problems, it is very easy to tell whether solutions exist, but thought to be very hard to tell how many. Many of these problems are #P-complete, and hence among the hardest problems in #P, since a polynomial time solution to any of them would allow a polynomial time solution to all other #P problems.

## Problems in NP not known to be in P or NP-complete

In 1975, Richard E. Ladner showed that if P ≠ NP then there exist problems in NP that are neither in P nor NP-complete. Such problems are called NP-intermediate problems. The graph isomorphism problem, the discrete logarithm problem and the integer factorization problem are examples of problems believed to be NP-intermediate. They are some of the very few NP problems not known to be in P or to be NP-complete.

1975年，华盛顿大学教授理查德·兰德指出，如果P≠NP，那么在NP类中就存在既不在P类中也不在NP完全类中的问题。这类问题称为NP中间类问题。$图同构问题、离散对数问题和整数分解问题$就是NP中间问题的例子。这几个是极少数几个还不清楚是否属于P类或NP完全类问题的NP类问题，。

The graph isomorphism problem is the computational problem of determining whether two finite graphs are isomorphic. An important unsolved problem in complexity theory is whether the graph isomorphism problem is in P, NP-complete, or NP-intermediate. The answer is not known, but it is believed that the problem is at least not NP-complete.[20] If graph isomorphism is NP-complete, the polynomial time hierarchy collapses to its second level.[21] Since it is widely believed that the polynomial hierarchy does not collapse to any finite level, it is believed that graph isomorphism is not NP-complete. The best algorithm for this problem, due to László Babai, runs in quasi-polynomial time.[22]

The graph isomorphism problem is the computational problem of determining whether two finite graphs are isomorphic. An important unsolved problem in complexity theory is whether the graph isomorphism problem is in P, NP-complete, or NP-intermediate. The answer is not known, but it is believed that the problem is at least not NP-complete. If graph isomorphism is NP-complete, the polynomial time hierarchy collapses to its second level. Since it is widely believed that the polynomial hierarchy does not collapse to any finite level, it is believed that graph isomorphism is not NP-complete. The best algorithm for this problem, due to László Babai, runs in quasi-polynomial time.

The integer factorization problem is the computational problem of determining the prime factorization of a given integer. Phrased as a decision problem, it is the problem of deciding whether the input has a factor less than k. No efficient integer factorization algorithm is known, and this fact forms the basis of several modern cryptographic systems, such as the RSA algorithm. The integer factorization problem is in NP and in co-NP (and even in UP and co-UP[23]). If the problem is NP-complete, the polynomial time hierarchy will collapse to its first level (i.e., NP = co-NP). The best known algorithm for integer factorization is the general number field sieve, which takes expected time

The integer factorization problem is the computational problem of determining the prime factorization of a given integer. Phrased as a decision problem, it is the problem of deciding whether the input has a factor less than k. No efficient integer factorization algorithm is known, and this fact forms the basis of several modern cryptographic systems, such as the RSA algorithm. The integer factorization problem is in NP and in co-NP (and even in UP and co-UPLance Fortnow. Computational Complexity Blog: Complexity Class of the Week: Factoring. 13 September 2002.). If the problem is NP-complete, the polynomial time hierarchy will collapse to its first level (i.e., NP = co-NP). The best known algorithm for integer factorization is the general number field sieve, which takes expected time

$\displaystyle{ O\left (\exp \left ( \left (\tfrac{64n}{9} \log(2) \right )^{\frac{1}{3}} \left ( \log(n\log(2)) \right )^{\frac{2}{3}} \right) \right ) }$
O\left (\exp \left ( \left (\tfrac{64n}{9} \log(2) \right )^{\frac{1}{3}} \left ( \log(n\log(2)) \right )^{\frac{2}{3}} \right) \right )

O left (exp left (left (left (left (tfrac {64n }{9} log (2) right) ^ { frac {1}{3} left (log (n log (2)) right) ^ { frac {2}{3} right))

to factor an n-bit integer. However, the best known quantum algorithm for this problem, Shor's algorithm, does run in polynomial time, although this does not indicate where the problem lies with respect to non-quantum complexity classes.

to factor an n-bit integer. However, the best known quantum algorithm for this problem, Shor's algorithm, does run in polynomial time, although this does not indicate where the problem lies with respect to non-quantum complexity classes.

## 不知道属于P还是NP完全的NP问题

1975年，理查德·E·拉德纳（Richard E.Ladner）证明了如果 P ≠ NP 那么在NP中存在既不是P也不是NP完全的问题。[19]这类问题称为NP中间问题。图同构问题、离散对数问题和整数分解问题是NP中间问题的例子。它们是为数不多的不知道属于P还是NP完全的NP问题。

$\displaystyle{ O\left (\exp \left ( \left (\tfrac{64n}{9} \log(2) \right )^{\frac{1}{3}} \left ( \log(n\log(2)) \right )^{\frac{2}{3}} \right) \right ) }$

## Does P mean "easy"?

The graph shows the running time vs. problem size for a knapsack problem of a state-of-the-art, specialized algorithm. The quadratic fit suggests that the algorithmic complexity of the problem is O((log(n))2).[24]

All of the above discussion has assumed that P means "easy" and "not in P" means "difficult", an assumption known as Cobham's thesis. It is a common and reasonably accurate [citation needed] assumption in complexity theory; however, it has some caveats.

All of the above discussion has assumed that P means "easy" and "not in P" means "difficult", an assumption known as Cobham's thesis. It is a common and reasonably accurate assumption in complexity theory; however, it has some caveats.

= = p 是“容易”的意思吗？= = 所有上述讨论都假定 p 意味着“容易”，而“不在 p 中”意味着“困难”，这一假设被称为 Cobham 的论点。在复杂性理论中，这是一个常见且相当准确的假设; 然而，它也有一些警告。

First, it is not always true in practice. A theoretical polynomial algorithm may have extremely large constant factors or exponents, thus rendering it impractical. For example, the problem of deciding whether a graph G contains H as a minor, where H is fixed, can be solved in a running time of O(n2),[25] where n is the number of vertices in G. However, the big O notation hides a constant that depends superexponentially on H. The constant is greater than $\displaystyle{ 2 \uparrow \uparrow (2 \uparrow \uparrow (2 \uparrow \uparrow (h/2) ) ) }$ (using Knuth's up-arrow notation), and where h is the number of vertices in H.[26]

First, it is not always true in practice. A theoretical polynomial algorithm may have extremely large constant factors or exponents, thus rendering it impractical. For example, the problem of deciding whether a graph G contains H as a minor, where H is fixed, can be solved in a running time of O(n2), where n is the number of vertices in G. However, the big O notation hides a constant that depends superexponentially on H. The constant is greater than 2 \uparrow \uparrow (2 \uparrow \uparrow (2 \uparrow \uparrow (h/2) ) ) (using Knuth's up-arrow notation), and where h is the number of vertices in H.

On the other hand, even if a problem is shown to be NP-complete, and even if P ≠ NP, there may still be effective approaches to tackling the problem in practice. There are algorithms for many NP-complete problems, such as the knapsack problem, the traveling salesman problem and the Boolean satisfiability problem, that can solve to optimality many real-world instances in reasonable time. The empirical average-case complexity (time vs. problem size) of such algorithms can be surprisingly low. An example is the simplex algorithm in linear programming, which works surprisingly well in practice; despite having exponential worst-case time complexity, it runs on par with the best known polynomial-time algorithms.[27]

On the other hand, even if a problem is shown to be NP-complete, and even if P ≠ NP, there may still be effective approaches to tackling the problem in practice. There are algorithms for many NP-complete problems, such as the knapsack problem, the traveling salesman problem and the Boolean satisfiability problem, that can solve to optimality many real-world instances in reasonable time. The empirical average-case complexity (time vs. problem size) of such algorithms can be surprisingly low. An example is the simplex algorithm in linear programming, which works surprisingly well in practice; despite having exponential worst-case time complexity, it runs on par with the best known polynomial-time algorithms.

Finally, there are types of computations which do not conform to the Turing machine model on which P and NP are defined, such as quantum computation and randomized algorithms.

Finally, there are types of computations which do not conform to the Turing machine model on which P and NP are defined, such as quantum computation and randomized algorithms.

## Reasons to believe P ≠ NP or P = NP

Cook provides a restatement of the problem in THE P VERSUS NP PROBLEM as: Does P = NP ?.According to polls,[8]most computer scientists believe that P ≠ NP. A key reason for this belief is that after decades of studying these problems no one has been able to find a polynomial-time algorithm for any of more than 3000 important known NP-complete problems (see List of NP-complete problems). These algorithms were sought long before the concept of NP-completeness was even defined (Karp's 21 NP-complete problems, among the first found, were all well-known existing problems at the time they were shown to be NP-complete). Furthermore, the result P = NP would imply many other startling results that are currently believed to be false, such as NP = co-NP and P = PH.

Cook provides a restatement of the problem in THE P VERSUS NP PROBLEM as: Does P = NP ?. According to polls, most computer scientists believe that P ≠ NP. A key reason for this belief is that after decades of studying these problems no one has been able to find a polynomial-time algorithm for any of more than 3000 important known NP-complete problems (see List of NP-complete problems). These algorithms were sought long before the concept of NP-completeness was even defined (Karp's 21 NP-complete problems, among the first found, were all well-known existing problems at the time they were shown to be NP-complete). Furthermore, the result P = NP would imply many other startling results that are currently believed to be false, such as NP = co-NP and P = PH.

= = 有理由相信 p ≠ NP 或 p = NP = = Cook 重述了《 P/NP问题的问题: p = NP 吗？.根据民意调查，大多数计算机科学家认为 p 不等于 NP。这种看法的一个关键原因是，在对这些问题进行了几十年的研究之后，还没有人能够为3000多个重要的已知 np 完全问题(见 np 完全问题列表)找到一个多项式时间算法。这些算法在 np- 完全性的概念被定义之前很久就已经被研究过了(第一个发现的 Karp 的21个 np- 完全问题，在它们被证明是 np- 完全的时候都是众所周知的存在问题)。此外，p = NP 的结果可能意味着许多其他目前被认为是错误的令人吃惊的结果，例如 NP = co-NP 和 p = ph。

It is also intuitively argued that the existence of problems that are hard to solve but for which the solutions are easy to verify matches real-world experience., point 9.

On the other hand, some researchers believe that there is overconfidence in believing P ≠ NP and that researchers should explore proofs of P = NP as well. For example, in 2002 these statements were made:[8] /* Styling for Template:Quote */ .templatequote { overflow: hidden; margin: 1em 0; padding: 0 40px; } .templatequote .templatequotecite {

   line-height: 1.5em;
/* @noflip */
text-align: left;
/* @noflip */
margin-top: 0;


} /* Styling for Template:Quote */ .templatequote { overflow: hidden; margin: 1em 0; padding: 0 40px; } .templatequote .templatequotecite {

   line-height: 1.5em;
/* @noflip */
text-align: left;
/* @noflip */
margin-top: 0;


}

On the other hand, some researchers believe that there is overconfidence in believing P ≠ NP and that researchers should explore proofs of P = NP as well. For example, in 2002 these statements were made:

## 认为P ≠ NP 或 P = NP的原因

— 斯科特·阿伦森，得克萨斯大学奥斯汀分校（Scott Aaronson, UT Austin）

— 莫斯·Y·瓦迪，莱斯大学（Moshe Y. Vardi, Rice University）

— 安尼尔·内罗德，康奈尔大学（Anil Nerode, Cornell University）

## Consequences of solution

One of the reasons the problem attracts so much attention is the consequences of the some possible answers. Either direction of resolution would advance theory enormously, and perhaps have huge practical consequences as well.

One of the reasons the problem attracts so much attention is the consequences of the some possible answers. Either direction of resolution would advance theory enormously, and perhaps have huge practical consequences as well.

### P = NP

A proof that P = NP could have stunning practical consequences if the proof leads to efficient methods for solving some of the important problems in NP. The potential consequences, both positive and negative, arise since various NP-complete problems are fundamental in many fields.

A proof that P = NP could have stunning practical consequences if the proof leads to efficient methods for solving some of the important problems in NP. The potential consequences, both positive and negative, arise since various NP-complete problems are fundamental in many fields.

= = = p = NP = = = = 证明 p = NP 可以有惊人的实际结果，如果证明导致有效的方法来解决一些重要问题在 NP。由于各种 np 完全问题在许多领域都具有根本性的意义，所以潜在的结果，无论是正面的还是负面的，都会出现。

It is also very possible that a proof would not lead to practical algorithms for NP-complete problems. The formulation of the problem does not require that the bounding polynomial be small or even specifically known. A non-constructive proof might show a solution exists without specifying either an algorithm to obtain it or a specific bound. Even if the proof is constructive, showing an explicit bounding polynomial and algorithmic details, if the polynomial is not very low-order the algorithm might not be sufficiently efficient in practice. In this case the initial proof would be mainly of interest to theoreticians, but the knowledge that a polynomial time solutions are possible would surely spur research into better (and possibly practical) methods to achieve them.

It is also very possible that a proof would not lead to practical algorithms for NP-complete problems. The formulation of the problem does not require that the bounding polynomial be small or even specifically known. A non-constructive proof might show a solution exists without specifying either an algorithm to obtain it or a specific bound. Even if the proof is constructive, showing an explicit bounding polynomial and algorithmic details, if the polynomial is not very low-order the algorithm might not be sufficiently efficient in practice. In this case the initial proof would be mainly of interest to theoreticians, but the knowledge that a polynomial time solutions are possible would surely spur research into better (and possibly practical) methods to achieve them.

An example of a field that could be upended by a solution showing P = NP is cryptography, which relies on certain problems being difficult. A constructive and efficient solution[Note 2] to an NP-complete problem such as 3-SAT would break most existing cryptosystems including:

• Existing implementations of public-key cryptography,[31] a foundation for many modern security applications such as secure financial transactions over the Internet.
• Symmetric ciphers such as AES or 3DES,[32] used for the encryption of communications data.
• Cryptographic hashing, which underlies blockchain cryptocurrencies such as Bitcoin, and is used to authenticate software updates. For these applications, the problem of finding a pre-image that hashes to a given value must be difficult in order to be useful, and ideally should require exponential time. However, if P = NP, then finding a pre-image M can be done in polynomial time, through reduction to SAT.[33]

These would need to be modified or replaced by information-theoretically secure solutions not inherently based on P-NP inequivalence.

An example of a field that could be upended by a solution showing P = NP is cryptography, which relies on certain problems being difficult. A constructive and efficient solutionExactly how efficient a solution must be to pose a threat to cryptography depends on the details. A solution of O(N^2) with a reasonable constant term would be disastrous. On the other hand, a solution that is \Omega(N^4) in almost all cases would not pose an immediate practical danger. to an NP-complete problem such as 3-SAT would break most existing cryptosystems including:

• Existing implementations of public-key cryptography,See for a reduction of factoring to SAT. A 512 bit factoring problem (8400 MIPS-years when factored) translates to a SAT problem of 63,652 variables and 406,860 clauses. a foundation for many modern security applications such as secure financial transactions over the Internet.
• Symmetric ciphers such as AES or 3DES,See, for example, in which an instance of DES is encoded as a SAT problem with 10336 variables and 61935 clauses. A 3DES problem instance would be about 3 times this size. used for the encryption of communications data.
• Cryptographic hashing, which underlies blockchain cryptocurrencies such as Bitcoin, and is used to authenticate software updates. For these applications, the problem of finding a pre-image that hashes to a given value must be difficult in order to be useful, and ideally should require exponential time. However, if P = NP, then finding a pre-image M can be done in polynomial time, through reduction to SAT.

These would need to be modified or replaced by information-theoretically secure solutions not inherently based on P-NP inequivalence.

• 现有的实现的公开密钥加密，请看一个因数化为 SAT。一个512位因式分解问题(因式分解后为8400mips 年)转化为一个由63,652个变量和406,860个子句组成的 SAT 问题。是许多现代安全应用的基础，例如通过互联网进行安全的金融交易。
• 对称密码，例如 AES 或3des---- 例如，将 DES 的一个实例编码为具有10336个变量和61935个子句的 SAT 问题。一个3des 问题实例大约是这个大小的3倍。用来加密通讯数据。
• 加密哈希，是区块链加密货币(如比特币)的基础，用于验证软件更新。对于这些应用程序，要找到一个散列到给定值的预映像一定很困难，而且理想情况下应该需要 EXPTIME。然而，如果 p = NP，则可以在多项式时间内找到一个前图像 m，通过简化到 SAT。这些将需要修改或取代的信息-理论上安全的解决方案不固有地基于 P-NP 不对等。

On the other hand, there are enormous positive consequences that would follow from rendering tractable many currently mathematically intractable problems. For instance, many problems in operations research are NP-complete, such as some types of integer programming and the travelling salesman problem. Efficient solutions to these problems would have enormous implications for logistics. Many other important problems, such as some problems in protein structure prediction, are also NP-complete;[34] if these problems were efficiently solvable, it could spur considerable advances in life sciences and biotechnology.

On the other hand, there are enormous positive consequences that would follow from rendering tractable many currently mathematically intractable problems. For instance, many problems in operations research are NP-complete, such as some types of integer programming and the travelling salesman problem. Efficient solutions to these problems would have enormous implications for logistics. Many other important problems, such as some problems in protein structure prediction, are also NP-complete; if these problems were efficiently solvable, it could spur considerable advances in life sciences and biotechnology.

But such changes may pale in significance compared to the revolution an efficient method for solving NP-complete problems would cause in mathematics itself. Gödel, in his early thoughts on computational complexity, noted that a mechanical method that could solve any problem would revolutionize mathematics:History of this letter and its translation from From pages 359–376 of Optimization Stories, M. Grötschel (editor), a special issue of ¨ Documenta Mathematica, published in August 2012 and distributed to attendees at the 21st International Symposium on Mathematical Programming in Berlin.

Similarly, Stephen Cook (assuming not only a proof, but a practically efficient algorithm) says

/* Styling for Template:Quote */ .templatequote { overflow: hidden; margin: 1em 0; padding: 0 40px; } .templatequote .templatequotecite {

   line-height: 1.5em;
/* @noflip */
text-align: left;
/* @noflip */
margin-top: 0;


}

Research mathematicians spend their careers trying to prove theorems, and some proofs have taken decades or even centuries to find after problems have been stated—for instance, Fermat's Last Theorem took over three centuries to prove. A method that is guaranteed to find proofs to theorems, should one exist of a "reasonable" size, would essentially end this struggle.

Research mathematicians spend their careers trying to prove theorems, and some proofs have taken decades or even centuries to find after problems have been stated—for instance, Fermat's Last Theorem took over three centuries to prove. A method that is guaranteed to find proofs to theorems, should one exist of a "reasonable" size, would essentially end this struggle.

Donald Knuth has stated that he has come to believe that P = NP, but is reserved about the impact of a possible proof{{quote|1=[...] if you imagine a number M that's finite but incredibly large—like say the number 10↑↑↑↑3 discussed in my paper on "coping with finiteness"—then there's a humongous number of possible algorithms that do nM bitwise or addition or shift operations on n given bits, and it's really hard to believe that all of those algorithms fail.

Donald Knuth has stated that he has come to believe that P = NP, but is reserved about the impact of a possible proof: /* Styling for Template:Quote */ .templatequote { overflow: hidden; margin: 1em 0; padding: 0 40px; } .templatequote .templatequotecite {

   line-height: 1.5em;
/* @noflip */
text-align: left;
/* @noflip */
margin-top: 0;


}

### P ≠ NP

A proof that showed that P ≠ NP would lack the practical computational benefits of a proof that P = NP, but would nevertheless represent a very significant advance in computational complexity theory and provide guidance for future research. It would allow one to show in a formal way that many common problems cannot be solved efficiently, so that the attention of researchers can be focused on partial solutions or solutions to other problems. Due to widespread belief in P ≠ NP, much of this focusing of research has already taken place.

A proof that showed that P ≠ NP would lack the practical computational benefits of a proof that P = NP, but would nevertheless represent a very significant advance in computational complexity theory and provide guidance for future research. It would allow one to show in a formal way that many common problems cannot be solved efficiently, so that the attention of researchers can be focused on partial solutions or solutions to other problems. Due to widespread belief in P ≠ NP, much of this focusing of research has already taken place.

= = = = p ≠ NP = = = 证明 p ≠ NP 缺乏证明 p = NP 的实际计算效益，但仍代表了计算复杂性理论的一个重大进展，并为未来的研究提供了指导。这将使人们能够以正式的方式表明许多共同的问题无法有效地解决，从而使研究人员的注意力能够集中在其他问题的部分解决或解决方案上。由于人们普遍相信 p 不等于 NP，这种研究的焦点大部分已经开始了。

Also P ≠ NP still leaves open the average-case complexity of hard problems in NP. For example, it is possible that SAT requires exponential time in the worst case, but that almost all randomly selected instances of it are efficiently solvable. Russell Impagliazzo has described five hypothetical "worlds" that could result from different possible resolutions to the average-case complexity question. These range from "Algorithmica", where P = NP and problems like SAT can be solved efficiently in all instances, to "Cryptomania", where P ≠ NP and generating hard instances of problems outside P is easy, with three intermediate possibilities reflecting different possible distributions of difficulty over instances of NP-hard problems. The "world" where P ≠ NP but all problems in NP are tractable in the average case is called "Heuristica" in the paper. A Princeton University workshop in 2009 studied the status of the five worlds.

Also P ≠ NP still leaves open the average-case complexity of hard problems in NP. For example, it is possible that SAT requires exponential time in the worst case, but that almost all randomly selected instances of it are efficiently solvable. Russell Impagliazzo has described five hypothetical "worlds" that could result from different possible resolutions to the average-case complexity question.R. Impagliazzo, "A personal view of average-case complexity," sct, pp.134, 10th Annual Structure in Complexity Theory Conference (SCT'95), 1995 These range from "Algorithmica", where P = NP and problems like SAT can be solved efficiently in all instances, to "Cryptomania", where P ≠ NP and generating hard instances of problems outside P is easy, with three intermediate possibilities reflecting different possible distributions of difficulty over instances of NP-hard problems. The "world" where P ≠ NP but all problems in NP are tractable in the average case is called "Heuristica" in the paper. A Princeton University workshop in 2009 studied the status of the five worlds.

## 不同结论的影响

### P = NP

• 现有公钥密码的实现，[31]它是当代许多安全应用的基础，比如网上安全金融交易。
• 用于通信数据加密的对称密码，比如AES或3DES[32]
• 哈希加密，它是比特币等区块链加密货币的基础，用于验证软件更新。对于这些应用程序，要想找到一个有用的映射到给定值的预映像是很困难的，而且理想情况下需要指数级的时间。但如果P = NP，则可以在多项式时间内通过归约为SAT来找到预映像M[33]

... 这使计算机找到任何一个定理的证明过程成为可能，而且因为证明过程能在多项式时间内验证，所以证明过程的长度也是能够接受的。这将改变数学。例题可能包括CMI奖中的所有问题。

[...] 如果你想象一个有限但非常大的数字M，比如说10↑↑↑↑3，这在我的论文“应对有限性”中讨论过。然后有大量可行的算法对n个给定的比特进行nM位加法或移位运算，很难相信所有这些算法都失败了。因而我的主要观点是，即使等式P = NP被证明了，我也不相信它会有什么用，因为这样的证明几乎肯定是没有贡献的。

### P ≠ NP

P ≠ NP仍然保留着NP中困难问题的平均复杂度。例如，SAT在最坏的情况下可能需要指数级的时间，但几乎所有随机选择的实例都可以有效解决。拉塞尔·英帕利亚佐（Russell Impagliazzo）描述了五个假设的“世界”，这五个“世界”源于对平均复杂性问题的不同可能回答。[39]范围从“算法”（Algorithmica）世界，这个世界中 P = NP 和像 SAT 这样的问题中的所有例子都可以有效解决，到“密码狂热”（Cryptomania）世界，这个世界是 P ≠ NP 并且容易生成在 P 之外的困难问题，其中有着三种可能性，它们反映了NP难问题中不同可能的难度分布。【没看懂，这节的第二段倒数第三句with three intermediate possibilities reflecting different possible distributions of difficulty over instances of NP-hard problems. 】在这篇论文中，“启发式”（Heuristica）是这样一个“世界”，P ≠ NP但NP中的大部分问题都是比较容易解决的。2009年，普林斯顿大学的一个研讨会研究了五个世界的现状。[40]

## Results about difficulty of proof

Although the P = NP problem itself remains open despite a million-dollar prize and a huge amount of dedicated research, efforts to solve the problem have led to several new techniques. In particular, some of the most fruitful research related to the P = NP problem has been in showing that existing proof techniques are not powerful enough to answer the question, thus suggesting that novel technical approaches are required.

Although the P = NP problem itself remains open despite a million-dollar prize and a huge amount of dedicated research, efforts to solve the problem have led to several new techniques. In particular, some of the most fruitful research related to the P = NP problem has been in showing that existing proof techniques are not powerful enough to answer the question, thus suggesting that novel technical approaches are required.

As additional evidence for the difficulty of the problem, essentially all known proof techniques in computational complexity theory fall into one of the following classifications, each of which is known to be insufficient to prove that P ≠ NP:

Classification Definition
Relativizing proofs Imagine a world where every algorithm is allowed to make queries to some fixed subroutine called an oracle (a black box which can answer a fixed set of questions in constant time, such as a black box that solves any given traveling salesman problem in 1 step), and the running time of the oracle is not counted against the running time of the algorithm. Most proofs (especially classical ones) apply uniformly in a world with oracles regardless of what the oracle does. These proofs are called relativizing. In 1975, Baker, Gill, and Solovay showed that P = NP with respect to some oracles, while P ≠ NP for other oracles.[41] Since relativizing proofs can only prove statements that are uniformly true with respect to all possible oracles, this showed that relativizing techniques cannot resolve P = NP.
Natural proofs In 1993, Alexander Razborov and Steven Rudich defined a general class of proof techniques for circuit complexity lower bounds, called natural proofs.[42] At the time all previously known circuit lower bounds were natural, and circuit complexity was considered a very promising approach for resolving P = NP. However, Razborov and Rudich showed that, if one-way functions exist, then no natural proof method can distinguish between P and NP. Although one-way functions have never been formally proven to exist, most mathematicians believe that they do, and a proof of their existence would be a much stronger statement than P ≠ NP. Thus it is unlikely that natural proofs alone can resolve P = NP.
Algebrizing proofs After the Baker-Gill-Solovay result, new non-relativizing proof techniques were successfully used to prove that IP = PSPACE. However, in 2008, Scott Aaronson and Avi Wigderson showed that the main technical tool used in the IP = PSPACE proof, known as arithmetization, was also insufficient to resolve P = NP.[43]

As additional evidence for the difficulty of the problem, essentially all known proof techniques in computational complexity theory fall into one of the following classifications, each of which is known to be insufficient to prove that P ≠ NP:

Classification Definition
Relativizing proofs Imagine a world where every algorithm is allowed to make queries to some fixed subroutine called an oracle (a black box which can answer a fixed set of questions in constant time, such as a black box that solves any given traveling salesman problem in 1 step), and the running time of the oracle is not counted against the running time of the algorithm. Most proofs (especially classical ones) apply uniformly in a world with oracles regardless of what the oracle does. These proofs are called relativizing. In 1975, Baker, Gill, and Solovay showed that P = NP with respect to some oracles, while P ≠ NP for other oracles. Since relativizing proofs can only prove statements that are uniformly true with respect to all possible oracles, this showed that relativizing techniques cannot resolve P = NP.
Natural proofs In 1993, Alexander Razborov and Steven Rudich defined a general class of proof techniques for circuit complexity lower bounds, called natural proofs. At the time all previously known circuit lower bounds were natural, and circuit complexity was considered a very promising approach for resolving P = NP. However, Razborov and Rudich showed that, if one-way functions exist, then no natural proof method can distinguish between P and NP. Although one-way functions have never been formally proven to exist, most mathematicians believe that they do, and a proof of their existence would be a much stronger statement than P ≠ NP. Thus it is unlikely that natural proofs alone can resolve P = NP.
Algebrizing proofs After the Baker-Gill-Solovay result, new non-relativizing proof techniques were successfully used to prove that IP = PSPACE. However, in 2008, Scott Aaronson and Avi Wigderson showed that the main technical tool used in the IP = PSPACE proof, known as arithmetization, was also insufficient to resolve P = NP.

These barriers are another reason why NP-complete problems are useful: if a polynomial-time algorithm can be demonstrated for an NP-complete problem, this would solve the P = NP problem in a way not excluded by the above results.

These barriers are another reason why NP-complete problems are useful: if a polynomial-time algorithm can be demonstrated for an NP-complete problem, this would solve the P = NP problem in a way not excluded by the above results.

These barriers have also led some computer scientists to suggest that the P versus NP problem may be independent of standard axiom systems like ZFC (cannot be proved or disproved within them). The interpretation of an independence result could be that either no polynomial-time algorithm exists for any NP-complete problem, and such a proof cannot be constructed in (e.g.) ZFC, or that polynomial-time algorithms for NP-complete problems may exist, but it is impossible to prove in ZFC that such algorithms are correct.[44] However, if it can be shown, using techniques of the sort that are currently known to be applicable, that the problem cannot be decided even with much weaker assumptions extending the Peano axioms (PA) for integer arithmetic, then there would necessarily exist nearly-polynomial-time algorithms for every problem in NP.[45] Therefore, if one believes (as most complexity theorists do) that not all problems in NP have efficient algorithms, it would follow that proofs of independence using those techniques cannot be possible. Additionally, this result implies that proving independence from PA or ZFC using currently known techniques is no easier than proving the existence of efficient algorithms for all problems in NP.

These barriers have also led some computer scientists to suggest that the P versus NP problem may be independent of standard axiom systems like ZFC (cannot be proved or disproved within them). The interpretation of an independence result could be that either no polynomial-time algorithm exists for any NP-complete problem, and such a proof cannot be constructed in (e.g.) ZFC, or that polynomial-time algorithms for NP-complete problems may exist, but it is impossible to prove in ZFC that such algorithms are correct.. However, if it can be shown, using techniques of the sort that are currently known to be applicable, that the problem cannot be decided even with much weaker assumptions extending the Peano axioms (PA) for integer arithmetic, then there would necessarily exist nearly-polynomial-time algorithms for every problem in NP.. Therefore, if one believes (as most complexity theorists do) that not all problems in NP have efficient algorithms, it would follow that proofs of independence using those techniques cannot be possible. Additionally, this result implies that proving independence from PA or ZFC using currently known techniques is no easier than proving the existence of efficient algorithms for all problems in NP.

## 关于证明难度的结果

P = NP问题仍然还未解决，虽然它有着100万美元的奖金并且有大量专门的研究，以及为了解决这个问题已经产生了几种新技术。尤其是与P=NP问题相关的一些最富有成效的研究表明，现有的证明技术不足以解决这个问题，因此意味着需要新的技术方法。

## Claimed solutions

While the P versus NP problem is generally considered unsolved,[46] many amateur and some professional researchers have claimed solutions. Gerhard J. Woeginger maintains a list that, as of 2016, contains 62 purported proofs of P = NP, 50 proofs of P ≠ NP, 2 proofs the problem is unprovable, and one proof that it is undecidable.[47] Some attempts at resolving P versus NP have received brief media attention,[48] though these attempts have since been refuted.

While the P versus NP problem is generally considered unsolved, many amateur and some professional researchers have claimed solutions. Gerhard J. Woeginger maintains a list that, as of 2016, contains 62 purported proofs of P = NP, 50 proofs of P ≠ NP, 2 proofs the problem is unprovable, and one proof that it is undecidable. Some attempts at resolving P versus NP have received brief media attention, though these attempts have since been refuted.

## Logical characterizations

The P = NP problem can be restated in terms of expressible certain classes of logical statements, as a result of work in descriptive complexity.

The P = NP problem can be restated in terms of expressible certain classes of logical statements, as a result of work in descriptive complexity.

Consider all languages of finite structures with a fixed signature including a linear order relation. Then, all such languages in P can be expressed in first-order logic with the addition of a suitable least fixed-point combinator. Effectively, this, in combination with the order, allows the definition of recursive functions. As long as the signature contains at least one predicate or function in addition to the distinguished order relation, so that the amount of space taken to store such finite structures is actually polynomial in the number of elements in the structure, this precisely characterizes P.

Consider all languages of finite structures with a fixed signature including a linear order relation. Then, all such languages in P can be expressed in first-order logic with the addition of a suitable least fixed-point combinator. Effectively, this, in combination with the order, allows the definition of recursive functions. As long as the signature contains at least one predicate or function in addition to the distinguished order relation, so that the amount of space taken to store such finite structures is actually polynomial in the number of elements in the structure, this precisely characterizes P.

Similarly, NP is the set of languages expressible in existential second-order logic—that is, second-order logic restricted to exclude universal quantification over relations, functions, and subsets. The languages in the polynomial hierarchy, PH, correspond to all of second-order logic. Thus, the question "is P a proper subset of NP" can be reformulated as "is existential second-order logic able to describe languages (of finite linearly ordered structures with nontrivial signature) that first-order logic with least fixed point cannot?".[49] The word "existential" can even be dropped from the previous characterization, since P = NP if and only if P = PH (as the former would establish that NP = co-NP, which in turn implies that NP = PH).

Similarly, NP is the set of languages expressible in existential second-order logic—that is, second-order logic restricted to exclude universal quantification over relations, functions, and subsets. The languages in the polynomial hierarchy, PH, correspond to all of second-order logic. Thus, the question "is P a proper subset of NP" can be reformulated as "is existential second-order logic able to describe languages (of finite linearly ordered structures with nontrivial signature) that first-order logic with least fixed point cannot?".Elvira Mayordomo. "P versus NP" Monografías de la Real Academia de Ciencias de Zaragoza 26: 57–68 (2004). The word "existential" can even be dropped from the previous characterization, since P = NP if and only if P = PH (as the former would establish that NP = co-NP, which in turn implies that NP = PH).

## 逻辑特征【过多逻辑学的专业词汇，我许多句子看不懂，编辑需要重点关注】

P = NP问题可以用可表达的特定类别的逻辑语句来重新表述，这是描述复杂性这项工作的结果。

## Polynomial-time algorithms

No algorithm for any NP-complete problem is known to run in polynomial time. However, there are algorithms known for NP-complete problems with the property that if P = NP, then the algorithm runs in polynomial time on accepting instances (although with enormous constants, making the algorithm impractical). However, these algorithms do not qualify as polynomial time because their running time on rejecting instances are not polynomial. The following algorithm, due to Levin (without any citation), is such an example below. It correctly accepts the NP-complete language SUBSET-SUM. It runs in polynomial time on inputs that are in SUBSET-SUM if and only if P = NP:

No algorithm for any NP-complete problem is known to run in polynomial time. However, there are algorithms known for NP-complete problems with the property that if P = NP, then the algorithm runs in polynomial time on accepting instances (although with enormous constants, making the algorithm impractical). However, these algorithms do not qualify as polynomial time because their running time on rejecting instances are not polynomial. The following algorithm, due to Levin (without any citation), is such an example below. It correctly accepts the NP-complete language SUBSET-SUM. It runs in polynomial time on inputs that are in SUBSET-SUM if and only if P = NP:

= = = 多项式时间算法 = = 任何 np 完全问题的算法都不能在多项式时间内运行。然而，对于 NP 完全问题，有一些已知的算法具有这样的性质: 如果 p = NP，那么算法在接受实例时运行在多项式时间内(尽管具有大量的常数，使得算法不切实际)。然而，这些算法不符合多项式时间，因为它们拒绝实例的运行时间不是多项式的。下面的算法就是这样一个例子，由于 Levin (没有引用)。它正确地接受 np 完全语言 SUBSET-SUM。当且仅当 p = NP:

// Algorithm that accepts the NP-complete language SUBSET-SUM.
//
// this is a polynomial-time algorithm if and only if P = NP.
//
// "Polynomial-time" means it returns "yes" in polynomial time when
// the answer should be "yes", and runs forever when it is "no".
//
// Input: S = a finite set of integers
// Output: "yes" if any subset of S adds up to 0.
// Runs forever with no output otherwise.
// Note: "Program number M" is the program obtained by
// writing the integer M in binary, then
// considering that string of bits to be a
// program. Every possible program can be
// generated this way, though most do nothing
// because of syntax errors.
FOR K = 1...∞
FOR M = 1...K
Run program number M for K steps with input S
IF the program outputs a list of distinct integers
AND the integers are all in S
AND the integers sum to 0
THEN
OUTPUT "yes" and HALT

// Algorithm that accepts the NP-complete language SUBSET-SUM.
//
// this is a polynomial-time algorithm if and only if P = NP.
//
// "Polynomial-time" means it returns "yes" in polynomial time when
// the answer should be "yes", and runs forever when it is "no".
//
// Input: S = a finite set of integers
// Output: "yes" if any subset of S adds up to 0.
// Runs forever with no output otherwise.
// Note: "Program number M" is the program obtained by
// writing the integer M in binary, then
// considering that string of bits to be a
// program. Every possible program can be
// generated this way, though most do nothing
// because of syntax errors.
FOR K = 1...∞
FOR M = 1...K
Run program number M for K steps with input S
IF the program outputs a list of distinct integers
AND the integers are all in S
AND the integers sum to 0
THEN
OUTPUT "yes" and HALT


If, and only if, P = NP, then this is a polynomial-time algorithm accepting an NP-complete language. "Accepting" means it gives "yes" answers in polynomial time, but is allowed to run forever when the answer is "no" (also known as a semi-algorithm).

If, and only if, P = NP, then this is a polynomial-time algorithm accepting an NP-complete language. "Accepting" means it gives "yes" answers in polynomial time, but is allowed to run forever when the answer is "no" (also known as a semi-algorithm).

This algorithm is enormously impractical, even if P = NP. If the shortest program that can solve SUBSET-SUM in polynomial time is b bits long, the above algorithm will try at least 2b − 1 other programs first.

This algorithm is enormously impractical, even if P = NP. If the shortest program that can solve SUBSET-SUM in polynomial time is b bits long, the above algorithm will try at least other programs first.

## 多项式时间算法

// 接受NP完全语言SUBSET-SUM的算法。
//
// 当且仅当 P = NP时，它是一个多项式时间算法。
//
// "多项式时间" 意味着当答案是"yes"时，它在多项式时间内返回 "yes"
// 当答案是"no"时，它一直运行。
//
// 输入: S = 有限的整数集合
// 输出: 如果S的任何一个子集求和为0，输出"yes"。
// 如果没有输出就一直运行。
// 注意: “M号程序”是通过将整数M以二进制形式表示，
// 然后将这些比特字符串视为一个程序得到的。
// 每一个可能的程序都可以通过这种方式生成，
// 尽管由于语法错误，大多数程序什么也不做。
FOR K = 1...∞
FOR M = 1...K
输入S，运行K步M号程序
IF 程序输出一串不同的整数
AND 所有整数都在S中
AND 这些整数相加为0
THEN
OUTPUT "yes" and HALT

## Formal definitions

### P and NP

Conceptually speaking, a decision problem is a problem that takes as input some string w over an alphabet Σ, and outputs "yes" or "no". If there is an algorithm (say a Turing machine, or a computer program with unbounded memory) that can produce the correct answer for any input string of length n in at most cnk steps, where k and c are constants independent of the input string, then we say that the problem can be solved in polynomial time and we place it in the class P. Formally, P is defined as the set of all languages that can be decided by a deterministic polynomial-time Turing machine. That is,

$\displaystyle{ \mathbf{P} = \{ L : L=L(M) \text{ for some deterministic polynomial-time Turing machine } M \} }$

where

$\displaystyle{ L(M) = \{ w\in\Sigma^{*}: M \text{ accepts } w \} }$

and a deterministic polynomial-time Turing machine is a deterministic Turing machine M that satisfies the following two conditions:

Conceptually speaking, a decision problem is a problem that takes as input some string w over an alphabet Σ, and outputs "yes" or "no". If there is an algorithm (say a Turing machine, or a computer program with unbounded memory) that can produce the correct answer for any input string of length n in at most cnk steps, where k and c are constants independent of the input string, then we say that the problem can be solved in polynomial time and we place it in the class P. Formally, P is defined as the set of all languages that can be decided by a deterministic polynomial-time Turing machine. That is,

\mathbf{P} = \{ L : L=L(M) \text{ for some deterministic polynomial-time Turing machine } M \}

where

L(M) = \{ w\in\Sigma^{*}: M \text{ accepts } w \}

and a deterministic polynomial-time Turing machine is a deterministic Turing machine M that satisfies the following two conditions:

= = = p 和 NP = = = 概念上来说，判定问题是一个将字符串 w 作为字母表 σ 上的输入，并输出“ yes”或“ no”的问题。如果有一个算法(比如说图灵机，或者一个具有无限内存的计算机程序)可以在最多的 cnk 步骤中为任意长度为 n 的输入字符串生成正确的答案，其中 k 和 c 是与输入字符串无关的常数，那么我们说这个问题可以在多项式时间内解决，并且我们把它放在 p 类中形式上，p 被定义为所有语言的集合，可以由一个确定性的多项式时间图灵机决定。也就是说，: mathbf { p } = { l: l = l (m) text { for some deterministic multipical time Turing machine } m }其中: l (m) = { w in Sigma ^ {

• } : m text { accepes } w }和一个确定性多项式时间 Turing 机是一个满足以下两个条件的确定性 Turing 机 m:
1. M halts on all inputs w and
2. there exists $\displaystyle{ k \in N }$ such that $\displaystyle{ T_M(n)\in O(n^k) }$, where O refers to the big O notation and
$\displaystyle{ T_M(n) = \max\{ t_M(w) : w\in\Sigma^{*}, |w| = n \} }$
$\displaystyle{ t_M(w) = \text{ number of steps }M\text{ takes to halt on input }w. }$
1. M halts on all inputs w and
2. there exists k \in N such that T_M(n)\in O(n^k), where O refers to the big O notation and
T_M(n) = \max\{ t_M(w) : w\in\Sigma^{*}, |w| = n \}
t_M(w) = \text{ number of steps }M\text{ takes to halt on input }w.
1. m 中止所有输入 w 和 # n 中存在 k，使得 t _ m (n)在 o (n ^ k)中，其中 o 指的是大 o 符号，并且: t _ m (n) = max { t _ m (w) : w 在 Sigma ^ {
• } ，| w | = n } : t _ m (w) = text { number of steps } m text { takes to halt on input } w。

NP can be defined similarly using nondeterministic Turing machines (the traditional way). However, a modern approach to define NP is to use the concept of certificate and verifier. Formally, NP is defined as the set of languages over a finite alphabet that have a verifier that runs in polynomial time, where the notion of "verifier" is defined as follows.

NP can be defined similarly using nondeterministic Turing machines (the traditional way). However, a modern approach to define NP is to use the concept of certificate and verifier. Formally, NP is defined as the set of languages over a finite alphabet that have a verifier that runs in polynomial time, where the notion of "verifier" is defined as follows.

Let L be a language over a finite alphabet, Σ.

Let L be a language over a finite alphabet, Σ.

L ∈ NP if, and only if, there exists a binary relation $\displaystyle{ R\subset\Sigma^{*}\times\Sigma^{*} }$ and a positive integer k such that the following two conditions are satisfied:

L ∈ NP if, and only if, there exists a binary relation R\subset\Sigma^{*}\times\Sigma^{*} and a positive integer k such that the following two conditions are satisfied:

L ∈ NP 当且仅当存在一个二元关系子集 r σ ^ { * }乘以 σ ^ { * }和一个正整数 k 使得满足以下两个条件:

1. For all x\in\Sigma^{*}, x\in L \Leftrightarrow\exists y\in\Sigma^{*} such that (x, y) ∈ R and |y|\in O(|x|^k); and
2. the language L_{R} = \{ x\# y:(x,y)\in R\} over \Sigma\cup\{\#\} is decidable by a deterministic Turing machine in polynomial time.

• }中的所有 x，l 中的 x 在 Sigma ^ {
• }中存在 y，使得(x，y)∈ r，| y | 在 o (| x | ^ k)中; 以及 | { x，y)在 σ 杯{ # }中的语言 l _ { r } = { x # y: (x，y)由多项式时间的确定性图灵机判定。

A Turing machine that decides LR is called a verifier for L and a y such that (x, y) ∈ R is called a certificate of membership of x in L.

A Turing machine that decides LR is called a verifier for L and a y such that (x, y) ∈ R is called a certificate of membership of x in L.

In general, a verifier does not have to be polynomial-time. However, for L to be in NP, there must be a verifier that runs in polynomial time.

In general, a verifier does not have to be polynomial-time. However, for L to be in NP, there must be a verifier that runs in polynomial time.

#### Example

Let

$\displaystyle{ \mathrm{COMPOSITE} = \left \{x\in\mathbb{N} \mid x=pq \text{ for integers } p, q \gt 1 \right \} }$
$\displaystyle{ R = \left \{(x,y)\in\mathbb{N} \times\mathbb{N} \mid 1\lt y \leq \sqrt x \text{ and } y \text{ divides } x \right \}. }$

Clearly, the question of whether a given x is a composite is equivalent to the question of whether x is a member of COMPOSITE. It can be shown that COMPOSITE ∈ NP by verifying that it satisfies the above definition (if we identify natural numbers with their binary representations).

Let

\mathrm{COMPOSITE} = \left \{x\in\mathbb{N} \mid x=pq \text{ for integers } p, q > 1 \right \}
R = \left \{(x,y)\in\mathbb{N} \times\mathbb{N} \mid 1<y \leq \sqrt x \text{ and } y \text{ divides } x \right \}.

Clearly, the question of whether a given x is a composite is equivalent to the question of whether x is a member of COMPOSITE. It can be shown that COMPOSITE ∈ NP by verifying that it satisfies the above definition (if we identify natural numbers with their binary representations).

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =.显然，给定的 x 是否为复合数的问题等价于 x 是否为 COMPOSITE 的成员的问题。证明了 COMPOSITE ∈ NP 满足上述定义(如果我们用它们的二进制表示来识别自然数)。

COMPOSITE also happens to be in P, a fact demonstrated by the invention of the AKS primality test.[50]

COMPOSITE also happens to be in P, a fact demonstrated by the invention of the AKS primality test.

### NP-completeness

There are many equivalent ways of describing NP-completeness.

There are many equivalent ways of describing NP-completeness.

Let L be a language over a finite alphabet Σ.

Let L be a language over a finite alphabet Σ.

L is NP-complete if, and only if, the following two conditions are satisfied:

L is NP-complete if, and only if, the following two conditions are satisfied:

1. L ∈ NP; and
2. any L in NP is polynomial-time-reducible to L (written as $\displaystyle{ L' \leq_{p} L }$), where $\displaystyle{ L' \leq_{p} L }$ if, and only if, the following two conditions are satisfied:
1. There exists f : Σ* → Σ* such that for all w in Σ* we have: $\displaystyle{ (w\in L' \Leftrightarrow f(w)\in L) }$; and
2. there exists a polynomial-time Turing machine that halts with f(w) on its tape on any input w.
1. L ∈ NP; and
2. any L in NP is polynomial-time-reducible to L (written as L' \leq_{p} L), where L' \leq_{p} L if, and only if, the following two conditions are satisfied:
1. There exists f : Σ* → Σ* such that for all w in Σ* we have: (w\in L' \Leftrightarrow f(w)\in L); and
2. there exists a polynomial-time Turing machine that halts with f(w) on its tape on any input w.
1. l ∈ NP; 而且 NP 中的 # 任意 l 是多项式时间可约的 l (写为 l’leq _ { p } l) ，其中 l’leq _ { p } l 当且仅当满足以下两个条件: # 存在 f: σ
• → σ
• ，使得对于 σ
• 中的所有 w，我们有: (w 在 l’leftarrow f (w)中) ; # # 存在多项式时间图灵机，它在任意输入 w 的磁带上带 f (w)。

Alternatively, if L ∈ NP, and there is another NP-complete problem that can be polynomial-time reduced to L, then L is NP-complete. This is a common way of proving some new problem is NP-complete.

Alternatively, if L ∈ NP, and there is another NP-complete problem that can be polynomial-time reduced to L, then L is NP-complete. This is a common way of proving some new problem is NP-complete.

## 形式化定义

### P和NP

$\displaystyle{ \mathbf{P} = \{ L : L=L(M) M \text{ 是确定多项式时间图灵机 } \} }$

$\displaystyle{ L(M) = \{ w\in\Sigma^{*}: M \text{ 接受 } w \} }$

1. 对所有的输入wM会停机
2. 存在 $\displaystyle{ k \in N }$ 使得$\displaystyle{ T_{M}(n)\in O(n^{k}) }$，其中O指大O表示法 ，并且
$\displaystyle{ T_M(n) = \max\{ t_M(w) : w\in\Sigma^{*}, |w| = n \} }$
$\displaystyle{ t_M(w) = \text{ 输入 }w \text{后 }M\text{ 停机需要的步骤数 }。 }$

NP可以用类似非确定图灵机的方式（传统方式）定义。然而，现在定义NP主流的方法是用验证信息（certificate）与验证算法（verifier）的概念 【备注：certificate和verifier是两个算法复杂度理论中两个专业术语，我难以翻译的非常满意，但我可以解释一下这两个词的意思，供你参考以更好的修改。我们考虑一个判定问题，某个数是否为偶数。certificate就是给出的待验证的信息，对于此问题可以是改数的分解因式。我们根据这些信息输入到算法中，判断这个数是否为偶数，这个算法就是verifier。更形式化的解释见此书，Computational Complexity: A Mordern Approach】。形式上，NP定义为用有限的字母表构建成的语言集合，这个字母表有一个多项式时间运行的验证算法，这个验证算法的步骤如下所示：

1. 对于所有 $\displaystyle{ x\in\Sigma^{*} }$, $\displaystyle{ x\in L \Leftrightarrow\exists y\in\Sigma^{*} }$ 使得 (x, y) ∈ R 并且$\displaystyle{ |y|\in O(|x|^k) }$;
2. 语言 $\displaystyle{ L_{R} = \{ x\# y:(x,y)\in R\} }$$\displaystyle{ \Sigma\cup\{\#\} }$ 中对于确定图灵机来说是多项式时间可判定的。

#### 例子

$\displaystyle{ \mathrm{COMPOSITE} = \left \{x\in\mathbb{N} \mid x=pq \text{ ，整数} p, q \gt 1 \right \} }$
$\displaystyle{ R = \left \{(x,y)\in\mathbb{N} \times\mathbb{N} \mid 1\lt y \leq \sqrt x \text{ 并且} y \text{ 整除} x \right \}. }$

COMPOSITE恰巧也在P中，这个事实在AKS primality test中提到过。[50]

### NP完全

L是有限字母集合Σ中的一种语言。

L是NP完全的当且仅当其满足以下两个条件：

1. L ∈ NP
2. 任何在NP中的L可多项式时间归约为L（记作$\displaystyle{ L' \leq_{p} L }$），其中$\displaystyle{ L' \leq_{p} L }$，当且仅当满足以下两个条件：【无法理解这个逻辑】
1. 存在一个 f : Σ* → Σ* 使得对于所有在Σ*中的w，有$\displaystyle{ (w\in L' \Leftrightarrow f(w)\in L) }$；并且
2. 存在一个多项式时间图灵机，它对于任何输入wf(w) 停机。【不清楚如何翻译解释f(w)，在链接中原句为there exists a polynomial-time Turing machine that halts with f(w) on its tape on any input w.】

## Popular culture

The film Travelling Salesman, by director Timothy Lanzone, is the story of four mathematicians hired by the US government to solve the P versus NP problem.[51]

The film Travelling Salesman, by director Timothy Lanzone, is the story of four mathematicians hired by the US government to solve the P versus NP problem.

In the sixth episode of The Simpsons模板:' seventh season "Treehouse of Horror VI", the equation P=NP is seen shortly after Homer accidentally stumbles into the "third dimension".[52][53]

In the sixth episode of The Simpsons seventh season "Treehouse of Horror VI", the equation P=NP is seen shortly after Homer accidentally stumbles into the "third dimension".

In the second episode of season 2 of Elementary, "Solve for X" revolves around Sherlock and Watson investigating the murders of mathematicians who were attempting to solve P versus NP.[54][55]

In the second episode of season 2 of Elementary, "Solve for X" revolves around Sherlock and Watson investigating the murders of mathematicians who were attempting to solve P versus NP.

## 影视元素

• Game complexity
• List of unsolved problems in mathematics
• Unique games conjecture
• Unsolved problems in computer science

## Notes

1. A nondeterministic Turing machine can move to a state that is not determined by the previous state. Such a machine could solve an NP problem in polynomial time by falling into the correct answer state (by luck), then conventionally verifying it. Such machines are not practical for solving realistic problems but can be used as theoretical models.
2. Exactly how efficient a solution must be to pose a threat to cryptography depends on the details. A solution of $\displaystyle{ O(N^2) }$ with a reasonable constant term would be disastrous. On the other hand, a solution that is $\displaystyle{ \Omega(N^4) }$ in almost all cases would not pose an immediate practical danger.

## 注解

1. 非确定图灵机状态转移时可以不由前一状态决定。这种机器（碰巧）进入有正确答案的状态，然后按部就班进行验证，通过这种方式它可以在多项式时间内求解NP问题。但这种机器并不适用于解决实际问题，不过可以用作理论模型。
2. 算法对于加密方式的威胁有多大取决于这个算法有多高效。常数项不是非常大的$\displaystyle{ O(N^2) }$ 算法威胁非常大。如果大多数情况下算法复杂度是$\displaystyle{ \Omega(N^4) }$，这并不会立刻带来实际性的威胁。

## References

1. Fortnow, Lance (2009). "The status of the P versus NP problem" (PDF). Communications of the ACM. 52 (9): 78–86. CiteSeerX 10.1.1.156.767. doi:10.1145/1562164.1562186. Archived from the original (PDF) on 24 February 2011. Retrieved 26 January 2010. Unknown parameter |s2cid= ignored (help)
2. Fortnow, Lance (2013). The Golden Ticket: P, NP, and the Search for the Impossible. Princeton, NJ: Princeton University Press. ISBN 9780691156491.
3. Cook, Stephen (1971). "The complexity of theorem proving procedures". Proceedings of the Third Annual ACM Symposium on Theory of Computing. pp. 151–158. doi:10.1145/800157.805047. ISBN 9781450374644.
4. L. A. Levin (1973). "Универсальные задачи перебора" (in русский). 9 (3) (Problems of Information Transmission ed.): 115–116. Cite journal requires |journal= (help)
5. NSA (2012). "Letters from John Nash" (PDF).
6. Hartmanis, Juris. "Gödel, von Neumann, and the P = NP problem" (PDF). Bulletin of the European Association for Theoretical Computer Science. 38: 101–107.
7. Sipser, Michael: Introduction to the Theory of Computation, Second Edition, International Edition, page 270. Thomson Course Technology, 2006. Definition 7.19 and Theorem 7.20.
8. William I. Gasarch (June 2002). "The P=?NP poll" (PDF). SIGACT News. 33 (2): 34–47. CiteSeerX 10.1.1.172.1005. doi:10.1145/564585.564599. Unknown parameter |s2cid= ignored (help)
9. William I. Gasarch. "The Second P=?NP poll" (PDF). SIGACT News. 74.
10. "Guest Column: The Third P =? NP Poll1" (PDF). Retrieved 25 May 2020.
11. Scott Aaronson. "PHYS771 Lecture 6: P, NP, and Friends". Retrieved 27 August 2007.
12. "MSc course: Foundations of Computer Science". www.cs.ox.ac.uk. Retrieved 25 May 2020.
13. Colbourn, Charles J. (1984). "The complexity of completing partial Latin squares". Discrete Applied Mathematics. 8 (1): 25–30. doi:10.1016/0166-218X(84)90075-1.
14. I. Holyer (1981). "The NP-completeness of some edge-partition problems". SIAM J. Comput. 10 (4): 713–717. doi:10.1137/0210054.
15. Aviezri Fraenkel and D. Lichtenstein (1981). "Computing a perfect strategy for n × n chess requires time exponential in n". Journal of Combinatorial Theory, Series A. 31 (2): 199–214. doi:10.1016/0097-3165(81)90016-9.
16. Fischer, Michael J.; Rabin, Michael O. (1974). "Super-Exponential Complexity of Presburger Arithmetic". Proceedings of the SIAM-AMS Symposium in Applied Mathematics. 7: 27–41. Archived from the original on 15 September 2006. Retrieved 15 October 2017.
17. Valiant, Leslie G. (1979). "The complexity of enumeration and reliability problems". SIAM Journal on Computing. 8 (3): 410–421. doi:10.1137/0208032.
18. R. E. Ladner "On the structure of polynomial time reducibility," Journal of the ACM 22, pp. 151–171, 1975. Corollary 1.1. ACM site.
19. Arvind, Vikraman; Kurur, Piyush P. (2006). "Graph isomorphism is in SPP". Information and Computation. 204 (5): 835–852. doi:10.1016/j.ic.2006.02.002.
20. Schöning, Uwe (1988). "Graph isomorphism is in the low hierarchy". Journal of Computer and System Sciences. 37 (3): 312–323. doi:10.1016/0022-0000(88)90010-4.
21. Babai, László (2018). "Group, graphs, algorithms: the graph isomorphism problem". Proceedings of the International Congress of Mathematicians—Rio de Janeiro 2018. Vol. IV. Invited lectures. World Sci. Publ., Hackensack, NJ. pp. 3319–3336. MR 3966534.
22. Lance Fortnow. Computational Complexity Blog: Complexity Class of the Week: Factoring. 13 September 2002.
23. Pisinger, D. 2003. "Where are the hard knapsack problems?" Technical Report 2003/08, Department of Computer Science, University of Copenhagen, Copenhagen, Denmark
24. Kawarabayashi, K. I.; Kobayashi, Y.; Reed, B. (2012). "The disjoint paths problem in quadratic time". Journal of Combinatorial Theory, Series B. 102 (2): 424–435. doi:10.1016/j.jctb.2011.07.004.
25. Johnson, David S. (1987). "The NP-completeness column: An ongoing guide (edition 19)". Journal of Algorithms. 8 (2): 285–303. CiteSeerX 10.1.1.114.3864. doi:10.1016/0196-6774(87)90043-5.
26. Gondzio, Jacek; Terlaky, Tamás (1996). "3 A computational view of interior point methods". In J. E. Beasley. Advances in linear and integer programming. Oxford Lecture Series in Mathematics and its Applications. 4. New York: Oxford University Press. pp. 103–144. MR 1438311. Postscript file at website of Gondzio and at McMaster University website of Terlaky.
27. Cook, Stephen (April 2000). "The P versus NP Problem" (PDF). Clay Mathematics Institute. Retrieved 18 October 2006.
28. Rosenberger, Jack (May 2012). "P vs. NP poll results". Communications of the ACM. 55 (5): 10.
29. Scott Aaronson. "Reasons to believe"., point 9.
30. See Horie, S.; Watanabe, O. (1997). "Hard instance generation for SAT". Algorithms and Computation. Lecture Notes in Computer Science. 1350. Springer. pp. 22–31. arXiv:cs/9809117. Bibcode 1998cs........9117H. doi:10.1007/3-540-63890-3_4. ISBN 978-3-540-63890-2.  for a reduction of factoring to SAT. A 512 bit factoring problem (8400 MIPS-years when factored) translates to a SAT problem of 63,652 variables and 406,860 clauses.
31. See, for example, Massacci, F.; Marraro, L. (2000). "Logical cryptanalysis as a SAT problem". Journal of Automated Reasoning. 24 (1): 165–203. CiteSeerX 10.1.1.104.962. doi:10.1023/A:1006326723002. Unknown parameter |name-list-style= ignored (help); Unknown parameter |s2cid= ignored (help) in which an instance of DES is encoded as a SAT problem with 10336 variables and 61935 clauses. A 3DES problem instance would be about 3 times this size.
32. De, Debapratim; Kumarasubramanian, Abishek; Venkatesan, Ramarathnam (2007). "Inversion attacks on secure hash functions using SAT solvers". Theory and Applications of Satisfiability Testing--SAT 2007. International Conference on Theory and Applications of Satisfiability Testing. Springer. pp. 377–382. doi:10.1007/978-3-540-72788-0_36.
33. Berger B, Leighton T (1998). "Protein folding in the hydrophobic-hydrophilic (HP) model is NP-complete". J. Comput. Biol. 5 (1): 27–40. CiteSeerX 10.1.1.139.5547. doi:10.1089/cmb.1998.5.27. PMID 9541869.
34. History of this letter and its translation from Michael Sipser. "The History and Status of the P versus NP question" (PDF).
35. David S. Johnson (2012). "A Brief History of NP-Completeness, 1954–2012". CiteSeerX 10.1.1.399.1480. From pages 359–376 of Optimization Stories, M. Grötschel (editor), a special issue of ¨ Documenta Mathematica, published in August 2012 and distributed to attendees at the 21st International Symposium on Mathematical Programming in Berlin.
36. Knuth, Donald E. (20 May 2014). Twenty Questions for Donald Knuth. informit.com. InformIT. Retrieved 20 July 2014.
37. L. R. Foulds (October 1983). "The Heuristic Problem-Solving Approach". Journal of the Operational Research Society. 34 (10): 927–934. doi:10.2307/2580891. JSTOR 2580891.
38. R. Impagliazzo, "A personal view of average-case complexity," sct, pp.134, 10th Annual Structure in Complexity Theory Conference (SCT'95), 1995
39. "Tentative program for the workshop on "Complexity and Cryptography: Status of Impagliazzo's Worlds"". Archived from the original on 15 November 2013.
40. T. P. Baker; J. Gill; R. Solovay. (1975). "Relativizations of the P =? NP Question". SIAM Journal on Computing. 4 (4): 431–442. doi:10.1137/0204037.
41. Razborov, Alexander A.; Steven Rudich (1997). "Natural proofs". Journal of Computer and System Sciences. 55 (1): 24–35. doi:10.1006/jcss.1997.1494.
42. S. Aaronson; A. Wigderson (2008). Algebrization: A New Barrier in Complexity Theory (PDF). Proceedings of ACM STOC'2008. pp. 731–740. doi:10.1145/1374376.1374481. Unknown parameter |name-list-style= ignored (help)
43. Ben-David, Shai; Halevi, Shai (1992). "On the independence of P versus NP". Technical Report. 714. Technion. Cite journal requires |journal= (help).
44. John Markoff (8 October 2009). "Prizes Aside, the P-NP Puzzler Has Consequences". The New York Times.
45. Gerhard J. Woeginger. "The P-versus-NP page". Retrieved 24 June 2018.
46. Markoff, John (16 August 2010). "Step 1: Post Elusive Proof. Step 2: Watch Fireworks". The New York Times. Retrieved 20 September 2010.
47. Elvira Mayordomo. "P versus NP" -{zh-cn:互联网档案馆; zh-tw:網際網路檔案館; zh-hk:互聯網檔案館;}-存檔，存档日期16 February 2012. Monografías de la Real Academia de Ciencias de Zaragoza 26: 57–68 (2004).
48. Agrawal, Manindra; Kayal, Neeraj; Saxena, Nitin (2004). "PRIMES is in P" (PDF). Annals of Mathematics. 160 (2): 781–793. doi:10.4007/annals.2004.160.781. JSTOR 3597229.
49. Geere, Duncan (26 April 2012). "'Travelling Salesman' movie considers the repercussions if P equals NP". Wired UK. Retrieved 26 April 2012.
50. Hardesty, Larry. "Explained: P vs. NP".
51. Shadia, Ajam. "What is the P vs. NP problem? Why is it important?".
52. Gasarch, William (7 October 2013). "P vs NP is Elementary? No— P vs NP is ON Elementary". blog.computationalcomplexity.org (in English). Retrieved 6 July 2018.
53. Kirkpatrick, Noel (4 October 2013). "Elementary Solve for X Review: Sines of Murder". TV.com. Retrieved 6 July 2018.