{"id":966,"date":"2021-02-20T14:48:00","date_gmt":"2021-02-20T14:48:00","guid":{"rendered":"http:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/?p=966"},"modified":"2021-04-30T11:32:15","modified_gmt":"2021-04-30T11:32:15","slug":"the-p-vs-np-problem","status":"publish","type":"post","link":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/the-p-vs-np-problem\/","title":{"rendered":"The P vs NP Problem"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"966\" class=\"elementor elementor-966\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b4877dc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b4877dc\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fa30cd6\" data-id=\"fa30cd6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5bae1a2 elementor-widget elementor-widget-text-editor\" data-id=\"5bae1a2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In today&#8217;s blog post I want to give a very brief overview of a problem that is so important it features in the Clay Mathematical Institute&#8217;s &#8220;<a href=\"https:\/\/www.claymath.org\/millennium-problems\" target=\"_blank\" rel=\"noopener\">Millennium Problems<\/a>&#8220;, a list of problems that were considered the most important and challenging unsolved problems in the field of mathematics at the turn of the millennium.<\/p><p>The problem I am going to touch upon today is the enticingly named the &#8220;P vs NP problem&#8221; (don&#8217;t worry the meaning of P and NP will be explained soon). This problem is probably the easiest for a non-mathematician to grasp and even solve if you happen to be minesweeper prodigy (more on this later). It also has great relevance to the field of operational research, so it was a natural choice for a blog post.<\/p><p><b>Note: Saying that this problem has great relevance to operational research is putting things a bit lightly &#8230; more on this later in the post.<\/b><\/p><h3>The meaning behind P and NP<\/h3><p>The crux of this problem is one of computational efficiency. It has stemmed from the desire of researchers to know how efficiently certain problems can be solved by supplying a computer with an algorithm (a set of instructions that will solve the problem for every possible input to that problem). An extremely simple example of an algorithm, and one that most of us are probably familiar with, is shown in the gif below. That&#8217;s right, the long multiplication technique that we all learned at school consists of a set of instructions for multiplying two n digit numbers that we could easily program into a computer to let it do the hard work for us. Taking a moment to think about how many steps we would expect this algorithm would take for two relatively small numbers can be quite illuminating. Essentially, we multiply each digit in one of the numbers by all the digits in the other. So for two five digit numbers we would end up multiplying 25 or \\( 5^{2} \\)<span style=\"font-style: normal;font-weight: 400;font-size: 12px;line-height: 0\"><i>\u00a0<\/i><\/span><span style=\"font-size: 16px\">digits together in 25 steps. There would also be some additional steps for carrying numbers and addition but the bulk of the steps involve these individual multiplications. In general we say that this algorithm is of order (of order just means that we look at the steps that contribute most) \\( n^{2} \\)<\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">, where \\( n \\) is the number of digits in the numbers being multiplied.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-465bf2b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"465bf2b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cdb7c56\" data-id=\"cdb7c56\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5bd241a elementor-widget elementor-widget-image\" data-id=\"5bd241a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1200\" height=\"848\" src=\"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/ezgif.com-gif-maker-1.gif\" class=\"attachment-full size-full wp-image-1007\" alt=\"A gif showing that long multiplication can be considered as an algorithm\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0f121a9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0f121a9\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ca327f9\" data-id=\"ca327f9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9f9f52b elementor-widget elementor-widget-text-editor\" data-id=\"9f9f52b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">Before defining <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> and <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">, it is important to note that they are defined with respect to decision problems. A decision problem is just a problem in which the solution is a yes or no answer (i.e. does a solution exist?: Yes\/No).\u00a0 This isn&#8217;t really a limitation because most problems can be configured into decision problems with a bit of thought.<\/span><\/p><p><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">\u00a0A decision problem is said to belong to the set of problems, <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">, if it has an algorithm associated with it that takes polynomial time. This means that if you have an input of size \\(\u00a0<\/span><i>n \\)<\/i><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">, the worst case running time of the algorithm is of order \\( n^{k} \\)\u00a0<\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">, where<i>\u00a0\\( k\u00a0 \\)\u00a0<\/i>is some constant. The multiplication algorithm given above is an example of a polynomial time algorithm that falls into class <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">.\u00a0 A look at the table below shows why this is an important consideration when trying to create an algorithm. As you can see, we have a range of different polynomial running times, expressed in terms of the input size \\( n \\), along with what kind of problem sizes we would expect to be able to solve on an average desktop computer and computers 100 and 1000 times faster than it. The main takeaway here is that a polynomial time algorithm, even when\u00a0<\/span><i>\\( k\u00a0 \\)\u00a0<\/i><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">is quite large (in practice, most algorithms in <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> have<\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">\u00a0\\( k \u2264 4 \\)), has the scope to be applied to problems with large n and that n will increase appreciably with an increase in computing power. Note too that increases in computing power of these sizes is very realistic, especially if an algorithm can be designed to run on many computers at once. The second takeaway is in the final row which shows a common running time for an algorithm not in <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">. You can see why algorithms that do not belong to <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> are generally considered unusable for large problem instances. Using 1000 times the computing power results in only being able to compute an input size that has approximately 10 additional inputs. This is a shocking result!<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5addee0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5addee0\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9bdee7b\" data-id=\"9bdee7b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7de1df7 elementor-widget elementor-widget-image\" data-id=\"7de1df7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"375\" src=\"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/tableCompComplex-1024x375.png\" class=\"attachment-large size-large wp-image-1008\" alt=\"TableCompComplex\" srcset=\"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/tableCompComplex-1024x375.png 1024w, https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/tableCompComplex-300x110.png 300w, https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/tableCompComplex-768x282.png 768w, https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/tableCompComplex-1536x563.png 1536w, https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/tableCompComplex.png 1942w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-be65e68 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"be65e68\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-85c16ca\" data-id=\"85c16ca\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2951bc2 elementor-widget elementor-widget-text-editor\" data-id=\"2951bc2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>So, what does <b>NP<\/b> mean? <b>NP<\/b> stands for Non-deterministic Polynomial time and is a set of problems that do not have a algorithm that can find a solution in polynomial time. However, if you have a solution, there are algorithms that can check if that solution is correct in polynomial time. An example of a problem that is in the set <b>NP<\/b> is shown below. It is the problem of trying to find out whether a Hamiltonian cycle exists for a given connected graph of vertices. A Hamiltonian cycle is the name given to a path taken around the graph that visits every vertex once before returning to the start. It is shown in red on the graph below. It turns out that there isn&#8217;t an algorithm that we know of that works out whether a given graph has a Hamiltonian cycle that takes polynomial time. On the other hand, if we are given a graph with a Hamiltonian cycle, it is a fairly trivial matter of checking if it is a true Hamiltonian cycle and we have a polynomial time algorithm to do so.\u00a0<span style=\"font-size: 16px;font-style: normal;font-weight: 400\">\u00a0<\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">A quick note here that all problems in the set<\/span><span style=\"font-size: 16px;font-style: normal\"><b> P<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> belong to the set <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> as solving a problem in polynomial time means that by extension we can check it in polynomial time.\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7a8655a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7a8655a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ee32ad7\" data-id=\"ee32ad7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ed21b4f elementor-widget elementor-widget-image\" data-id=\"ed21b4f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"300\" height=\"287\" src=\"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/1024px-Hamiltonian_path.svg-300x287.png\" class=\"attachment-medium size-medium wp-image-1009\" alt=\"1024px Hamiltonian path.svg\" srcset=\"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/1024px-Hamiltonian_path.svg-300x287.png 300w, https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/1024px-Hamiltonian_path.svg-768x735.png 768w, https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-content\/uploads\/sites\/24\/2021\/03\/1024px-Hamiltonian_path.svg.png 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Christoph Sommer, CC BY-SA 3.0 , via Wikimedia Commons<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b48d0b6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b48d0b6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3b7a7ec\" data-id=\"3b7a7ec\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cd6b948 elementor-widget elementor-widget-text-editor\" data-id=\"cd6b948\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">There is a subset of problems that belong to the set <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> that have a property known as <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP-completeness<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">. A problem is said to be <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP-complete<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> if all of the other problems in <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> can be transformed into it in polynomial time. I won&#8217;t go into great detail about the concept of transforming a problem here but it essentially involves adding extra features to a problem so that by solving it you solve a different problem. Transforming in polynomial time just means that any steps involved in the transformation take polynomial time.<\/span><span style=\"font-size: 16px;font-style: normal\"><b> NP-completeness<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> is a compelling thing because if we could discover a polynomial time algorithm for an<\/span><span style=\"font-size: 16px;font-style: normal\"><b> NP-complete <\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">problem them we would have a polynomial time algorithm we could apply to every problem in <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">It turns out that a lot of important problems in many important fields belong to the set <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">, an example being the travelling salesman problem in operational research. The &#8220;<\/span><span style=\"font-size: 16px;font-style: normal\"><b>P vs NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> problem&#8221; is the problem that we don&#8217;t kn<\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">ow whether&nbsp; the fact that we do not have polynomial time algorithms for <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> problems is due to a lack of human inventiveness or due to the fact that there will never be a polynomial time algorithm for <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> problems. Most researchers currently believe that<\/span><span style=\"font-size: 16px;font-style: normal\"><b> P \u2260 NP <\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">but it would be necessary to produce a rigorous mathematical proof of this to put the <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P vs NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> problem to rest. This is not a straightforward task at all, how do you go about showing that there will never be a method that can be used to solve any <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">-complete problem in polynomial time. In fact, there is research that shows that current methods of obtaining mathematical proofs are not powerful enough to prove&nbsp;<\/span><span style=\"font-size: 16px;font-style: normal\"><b>P \u2260 NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">&nbsp;On the other hand, there is the enticing possibility that <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P = NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">. In theory, this is a much easier thing to prove because it would require the creation of a polynomial time algorithm for one of the many thousands of <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP-complete<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> problems. This is where minesweeper comes in, it turns out that minesweeper has been proven to be an <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP-complete<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> problem and therefore if you were to able to come up with an algorithm that solves a minesweeper grid of size \\( n \\) in time \\( n^k \\), you will have proved that <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P = NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">. The hilarious conclusion to this would be that it would turn out that the best way to solve serious operational research problems such as integer programming and travelling salesman would be to convert them into a game of minesweeper.&nbsp;<\/span><\/p>\n<p><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">I think that sums up the consequences of a proof that <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P = NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">. It would be completely insane and world altering. Suddenly we would be able to solve incredibly complicated problems that we could have only dreamed of solving before such as protein folding and cryptography and that&#8217;s just thinking of immediate and somewhat narrow minded consequences. Not all problems belong to just the sets <\/span><span style=\"font-size: 16px;font-style: normal\"><b>P<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> and <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> however, there are other problems such as deciding if a chess move is the best possible move that take non-polynomial time to even evaluate whether a given solution is the best move (you essentially have to play every possible continuation to the chess game after that move). A proof of<\/span><span style=\"font-size: 16px;font-style: normal\"><b> P = NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> would not mean that we could easily solve every possible problem.<\/span><\/p>\n<p><span style=\"font-size: 16px;font-style: normal;font-weight: 400\">A proof that&nbsp;<\/span><span style=\"font-size: 16px;font-style: normal\"><b>P \u2260 NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> would certainly be a bit more mundane but it would still put the problem to rest and allow researchers to completely focus on alternative heuristic solutions to <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> problems which attempt to give good solutions in most but not all cases of the problem. In fact, the fruitlessness of the search for polynomial time algorithms for <\/span><span style=\"font-size: 16px;font-style: normal\"><b>NP<\/b><\/span><span style=\"font-size: 16px;font-style: normal;font-weight: 400\"> problems means that this shift in research focus has already begun to happen but there are still many who have not given up hope of finding that elusive algorithm just yet &#8230;<\/span><\/p>\n<p style=\"font-size: 16px;font-style: normal;font-weight: 400\"><span style=\"font-size: 16px;font-weight: bold\">Relevant Links<\/span><\/p>\n<p style=\"font-size: 16px;font-style: normal;font-weight: 400\"><a href=\"https:\/\/www.claymath.org\/sites\/default\/files\/pvsnp.pdf\">Statement of the P vs NP problem<\/a><\/p>\n<p style=\"font-size: 16px;font-style: normal;font-weight: 400\"><a href=\"https:\/\/link.springer.com\/content\/pdf\/10.1007\/BF03025367.pdf\">Minesweeper is NP complete<\/a><\/p>\n<p style=\"font-size: 16px;font-style: normal;font-weight: 400\"><a href=\"https:\/\/www.win.tue.nl\/~gwoegi\/P-versus-NP.htm\">Proposed (and debunked) proofs&nbsp;<\/a><\/p>\n<p style=\"font-size: 16px;font-style: normal;font-weight: 400\">\n<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>In today&#8217;s blog post I want to give a very brief overview of a problem that is so important it features in the Clay Mathematical Institute&#8217;s &#8220;Millennium Problems&#8220;, a list of problems that were considered the most important and challenging unsolved problems in the field of mathematics at the turn of the millennium. The problem [&hellip;]<\/p>\n","protected":false},"author":19,"featured_media":1073,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"slim_seo":{"title":"The P vs NP Problem - JACK TRAINER","description":"In today's blog post I want to give a very brief overview of a problem that is so important it features in the Clay Mathematical Institute's \" Millennium Proble"},"footnotes":""},"categories":[14],"tags":[19,17,20,18],"class_list":["post-966","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-computer-science","tag-algorithms","tag-computer-science","tag-millennium-problem","tag-programming"],"_links":{"self":[{"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/posts\/966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/comments?post=966"}],"version-history":[{"count":50,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/posts\/966\/revisions"}],"predecessor-version":[{"id":1178,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/posts\/966\/revisions\/1178"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/media\/1073"}],"wp:attachment":[{"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/media?parent=966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/categories?post=966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lancaster.ac.uk\/stor-i-student-sites\/jack-trainer\/wp-json\/wp\/v2\/tags?post=966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}