{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Week 11: P, NP, and NP-Complete" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tuesday\n", "\n", "Up until now, we have not concerned ourselves at all with time or space efficiency, writing machines that are ridiculously inefficient. In this unit, we will finally turn our attention to the issue of time complexity. (Space complexity is an advanced topic that we will not cover.)\n", "\n", "
\n", "

Watch W11E1: P and NP

\n", "
\n", "\n", "### Time complexity\n", "\n", "I assume you're familiar with how to analyze time complexity of algorithms. Here's a little self-quiz you can take:\n", "\n", "- True or false: $O(2n)$ and $O(3n)$ are the same complexity class.\n", "\n", "- True or false: $O(n^2)$ and $O(n^2 + n)$ are the same complexity class.\n", "\n", "- True or false: $O(2^n)$ and $O(3^n)$ are the same complexity class.\n", "\n", "- True or false: Big-O ($O(\\cdot)$) measures worst-case time complexity and small-o ($o(\\cdot)$) measures best-case time complexity.\n", "\n", "
\n", "

Read Section 7.1, pages 275-281 if you need to review big-O notation.

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Models of computation\n", "\n", "
\n", "

Read Section 7.1, pages 282-284.

\n", "
\n", "\n", "Complexity analysis always assumes an underlying model of computation. In the past, you've always analyzed your programs for the platform you're actually running on -- which is fine because differences in platforms usually only affect running time by constant factors, so they don't impact big-O time complexity at all. However, in this class, we're trying to consider a wider range of models of computation, wide enough that the same algorithm implemented in two different models might have different big-O time complexities.\n", "\n", "The book, in 7.1, analyzes multitape Turing machines and nondeterministic Turing machines in relation to standard Turing machines. The analysis has the form: if a computation takes $O(t(n))$ time on some machine, how long would the equivalent computation take on a standard Turing machine?" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "With multitape Turing machines, recall that the tapes are stored like this:\n", "\n", "![image.png](attachment:image.png)\n", "\n", "To analyze this, first note that a $k$-tape TM can write at most $k$ symbols per timestep. So in total, it can write at most $kt(n)$ symbols. So the single-tape TM can also write only $O(t(n))$ symbols.\n", "\n", "In the multitape TM, accessing the current cell requires 1 operation, but simulating this in a single-tape TM takes $O(t(n))$ time, because you might have to rewind or fast-forward through another tape to get to the cell you want to access. \n", "\n", "So the total running time of the simulation is $O(t(n)^2)$." ] }, { "attachments": { "image.png": { "image/png": "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IIAAAggggAACCCCAAAIIIIAAAggggEAxCRBgLaazRVkRQAABBBBAAAEEEEAAAQQQQAABBBBAoKAECLAW1OmgMAgggAACCCCAAAIIIIAAAggggAACCCBQTAIEWIvpbFFWBBBAAAEEEEAAAQQQQAABBBBAAAEEECgoAQKsBXU6KAwCCCCAAAIIIIAAAggggAACCCCAAAIIFJMAAdZiOluUFQEEEEAAAQQQQAABBBBAAAEEEEAAAQQKSoAAa0GdDgqDAAIIIIAAAggggAACCCCAAAIIIIAAAsUkQIC1mM4WZUUAAQQQQAABBBBAAAEEEEAAAQQQQACBghIgwFpQp4PCIIAAAggggAACCCCAAAIIIIAAAggggEAxCRBgLaazRVkRQAABBBBAAAEEEEAAAQQQQAABBBBAoKAESjbAWlFRIaX4r1+/fgV1AVEYBBBAAAEEEEAAAQQQQAABBBBAAAEEylmgZAOspXpSR40aVaqHxnEhgAACCCCAAAIIIIAAAggggAACCCBQdAI1iq7ECRY4FAoluGbxrKYtckkIIIAAAggggAACCCCAAAIIIIAAAgggUDgCWQ2wrl27ViorK2XJkiWybt06adOmjXTq1EkaNmzoE9i8ebM7X61aNalevbo7zwQCCCCAAAIIIIAAAggggAACCCCAAAIIIFCoAlkJsC5dulSefPJJ+eKLL8QbPHUQmjVrJv3795czzjhDZs2aJVdccYWTJZdffrkceuih7jwTCCCAAAIIIIAAAggggAACCCCAAAIIIIBAoQpkPMCqLVZvvfVWWb58ecxj1hatw4cPt8HVAw44wLdex44dffPMIIAAAggggAACCCCAAAIIIIAAAggggAAChSqQ0QDrJ598Ivfee69s2rTJd7wtWrQQ/bd69WqZP3++bNy40eZPnDhRvvnmG3fdOnXq2G4E3AVMIIAAAggggAACCCCAAAIIIIAAAggggAACBSyQsQDrtGnT5M477/Qdart27eTCCy+UHj16uMs3bNggL7zwgowcOVKqqqpky5Ytbp72z6p9sJIQQAABBBBAAAEEEEAAAQQQQAABBBBAAIFiEMhYgPXpp5/2HW+XLl3klltukfr16/uW165dW4YMGSKhUEhGjBjhy+vatatvnhkEEEAAAQQQQAABBBBAAAEEEEAAAQQQQKCQBTLSXHT8+PG+R/21Jertt98e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IIAAAggggAACCCCAAAIIIIBAkAAB1iAd8hBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgQABAqwBOGQhgAACCCCAAAIIIIAAAggggAACCCCAAAJBAgRYg3TIQwABBBBAAAEEEEAAAQQQQAABBBBAAAEEAgQIsAbgkIUAAggggAACCCCAAAIIIIAAAggggAACCAQJEGAN0iEPAQQQQAABBBBAAAEEEEAAAQQQQAABBBAIECDAGoBDFgIIIIAAAggggAACCCCAAAIIIIAAAgggECRAgDVIhzwEEEAAAQQQQAABBBBAAAEEEEAAAQQQQCBAgABrAA5ZCCCAAAIIIIAAAggggAACCCCAAAIIIIBAkAAB1iAd8hBAAAEEEEhA4LzzzpO+ffvKm2++mcDarIKAX2Dr1q2i/0gIpCJA/ROsxucr2IdcBBDIngD1c/Zs2TMChShQoxALRZkQQAABBApHYMqUKW5hunfvLtWqbf9trrKyUjZv3mzzO3bsKLVr13bXLaeJsWPHyoQJE2Tx4sXldNgca4oC69atk2eeeUaeffZZmTp1qqxZs8YGWHfZZRfp16+fDB06VH75y1+muPfS2oz6J/75pP7xG/H58nswl7oA9U/qdmy5TYD6mSshVQHqn1Tl8rsdAdb8+vPuCCCAQEEL6Jf77rvv7pZRA6qdO3e286tXr5bddttNtmzZYuffeustOfzww911y3EiFAqV42FzzEkI6GfqpJNOsoHV8M3mz58vzz//vP03ZMgQefDBB6Vu3brhq5XNPPVPcqea+keEz1dy1wxrxxag/oltQ07yAuVcPy9fvlw+/vhjmThxoujfDnvuuaf06dNHOnXqlDxkmWxB/VO8J5oAa/GeO0qOAAIIZF3gww8/dN9j5513doOruvDTTz91g6vVq1eX3r17u+uW60Q530CX6zlP5rg1gHrooYfKjz/+GHezp556SlauXCkjRoyQioqKuOuX4grUP8md1XKvf/h8JXe9sHawAPVPsA+5yQmUa/38n//8R84999yIJ7z074YrrrhCbr75Ztlhhx2SwyyDtal/ivckE2At3nNHyRFAAIGsC3i/4A855BDf+33wwQfu/D777CMNGzZ058thYtGiRTJu3DgZP368zJkzxx7y008/LfPmzZP27dtLjx49RF30JpKEgAqceuqpvuCq/lFx/PHHy8EHHyybNm2y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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "With nondeterministic Turing machines, recall that we had to do a breadth-first search through the possible configurations of the NTM. \n", "\n", "![image.png](attachment:image.png)\n", "\n", "Since the number of configurations is exponential in $t(n)$, the running time of the equivalent deterministic TM is $O(c^{t(n)})$ for some $c$, which the book writes as $2^{O(t(n)}$.\n", "\n", "(Moreover, for each configuration, there is an additional $O(t(n))$ factor required for moving back and forth between where the previous configuration and next configuration are stored, but that gets absorbed into $c$.)" ] }, { "attachments": { "image.png": { "image/png": "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vXu7kWwBNYumQAACEKhQBLwipyR0mlIF7tlnn00B8/TTT4tOaepUJQECEIAABCCQbwRKFbkddthBtttuu7RTdzqdt+eee0qLFi0S2rVkyRLp16+fNG/eXBo1aiS9evWSzz//PMxz/vnny7nnnisPPvigaPm1a9cWne5csGCBDB48WLbddlupUaOG7LbbbjJ9+vTwPD24++67pXPnzs6u9briiitk9erVYZ4zzjjDpb3++uuy//77yx577OHy33HHHWEePfjpp59c+n333ZeQrpGuXbvKY4895tL1Wtdcc407/vnnn93U7eabb+7WKZs0aSKXXHKJ6LqkhldffdWVqVz22Wcf2WSTTWTrrbeWCy64QFatWuXyBP/odTt16iS1atVyeZ988snAxDcEIAABCJQVAX1Ac0nB/ggb/dxyyy3GOp8YKwxh1i+++EIf7Gzuv/9+07JlS7Pffvs5mxUc06FDB2NFypxzzjnmwgsvNJtuuqlp2rSp+f77712eAw880Ngfd1OnTh1z3nnnGbvm58pq1qyZqVq1qjnmmGPcuXrN9u3bh9e89NJLXT6t05VXXmm0HK2DfgfBCqPZcccdTf369U3Dhg3NRRddZFq3bm222mqrIIv7vvfee9257777bkK6Rk4//XRjhdbZTzzxRHPPPfe4PFYwHYfjjjvOXHfddWb33Xd3eR566CFnt0Ll4lqnnXfe2VgBNt26dXNpBxxwgMuj/1x11VUu7eCDDzYDBw40VuiNHQ2bp556KszDAQQgAAEIbDwBXXMqMQQiN3fuXPcjbEdZYd6rr77aCZIdfSWI3F133eV+wO1aXZjXOnG4vCpMGgJxevPNN8M8duTjzov+0Kv46Y//ypUrzbfffmus96bZa6+9jAppEOyI0Z03fvx4l6QipyJz6qmnGjt6cmk33HCDS5s2bVpwmhPldu3ahfHkgwEDBrhz7LqkM/3www8ubtfpwqy///67S1Oh1hCI3N577522jnakZ+bMmWOsM4/RegdB26PC3KZNmyCJbwhAAAIQKAMCpU5XWsFw05E6/RZ4G9rrik6vHXroodKgQQPNEoZJkyaJHUW5tboJEyaIfn788UexozR5/vnnw3xt27Z103RBgh1pSfXq1UW9NYNgR2DO8UPX/d5++21XphUf580Z5LFi6w71ukHQqU4rtq48Tevbt69bW3zmmWdcll9//VUmT54sp512WnBKqd+NGzd2U5xDhw4VnY595513xIqnO0/rFw0XX3xxQh2tuDuzTqFqO/744w+xAuvYKJ/XXntNOnbsKF9//bXMmjUrWhTHEIAABCCwEQQy3thmR0bSv39/t7b222+/iR2RyG233ZZyaTvikkWLFslhhx2WYosKoq7DRYM6uOj6lH6CEN2b991337lkXeOKhlatWjlBsaPNMFnFMXotXRu004YycuRIGTRokHOiUc9R9Z7MNOgewIkTJ8qtt94qn332mRPf5LXIoCw7IgsO3bcKuAatY82aNd2xriWmC7pWqGuNBAhAAAIQ2HgCGYucXYcSdRjR0ZyKXN26deWII45IqYE6YyxdulReeumlFNvGeGHa9TVX3sKFCxPK1VGVjow222yzMD3IGybYA3VIsetrMnXqVBkzZozYNTLnGBPN4zueMmWKE0V1SlGx22mnnaRevXpi1xVTTlM+0aCir0HrpXw0jB071jnYuEjkHxVkAgQgAAEIlA2BjKYr9VL6g3744YfLI488Ijrtpx6TOr2YHPTHf968ee7pJ9ZpRPSjIxmdMrQOLMnZM47bNSuXN5gyDU4M4oE9SE/+Pvroo93o7l//+pfo1KZvg3vyuRp/66233Ojt9ttvd16byuPLL7+UZcuWufToOcmekqNGjXJm9SRVPhr03ICPfqs3p/INPDVdJv6BAAQgAIGNIpDxSE6volOWOgoKjt1B0j/Wm1GsN6J0797drVnptKRurH7//fflrLPOSsqdedR6MrptBsOGDXNTfjqK1O0F119/vVszLG19TQX55JNPFutV6Vz7jz32WO/Fg2nTf/7zn27tULcNaNDzdXuETsveeOONLm3mzJliHVPcsf6jfwjo9gHrPenW2aw3pRvBKT+drtSpU92WoNsKdIuDdYgRFU8dXeoImQABCEAAAmVEwOe8ot6V6gofBPUCtGtdxq5FmcDrUG26hSDqIm+nBN02AltF532o5di1sKAY512p3oTRoN6G6vYfDVbA3Pl2tOSSFy9e7LwmrWC5dN1iYPfCmdmzZ4enqXelejemC+pdqXWygpjOnJD24YcfGjt16PLrNoIVK1aYHj16uLiWYcXKqIepbnfQuHqeBt6Vum1C26Lp6h26yy67GN1yEQT1SLUjYedlqXmsgBo7nWrsE2SCLHxDAAIQgEAZECjS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ME1FyY6wzHfffRemPffccy5fIHI333yziz/00ENhnvnz5zth1PI++eQTl64ip3EVQjsSc2l2hGjsKM0sWbIkPPcf//iHy/fhhx86UatataoTmSBDjx49zL777uuiKno+e3BO9Fvbp/V45plnwuS99trLCe+yZcvCtEMOOcQJmiYEIqeiZtf0wjyvvPKKK6t///4urbT2hCdyAAEIQAACG0XAO105Y8YM+fjjj91028KFC0U/3bp1s7/9IrpOp8H+4MtHH30kdlTlpgtdov3nyCOPdNOKQXzy5MlSr149N40XpNnRjuj0ZHKwIiF33XWX2NGbm3J85513ZKeddpK3337bTZ3q9GmrVq3caVZM3XSieoB27dpVhg0bJnbEJC+99JK88cYbLo9ON/rsLlMG/zz77LPy1VdfuanKmTNnyvDhw2XatGluCjd6+lFHHSXt2rULk+yo0NVfp2B1CrW09oQncgABCEAAAhtHwCeROt1nS0/70elEHWnNmjXL2a+//vqUog4//HATjOS23377lGlOPeGxxx5z50dHcu3btw/LsmtZaa8f1Ovss882K1ascFOTOpoM0rUMu07oyinNHl4scpBuJGe3ObhRo47U9Dp2Tc5NQyoLDcFI7qqrroqU9P+HdjuFG01m0p6Uk0mAAAQgAIENIlDF/linDTryeeqpp6RNmzbSr1+/hDxTpkyRF154QXQUpc4gGhYtWpSQRyMLFiwI0xo3bixffPFFGA8OonmCNLsWFxxKkyZN3LEVM7nooovC9ODArnVJzZo13cjvtttucy7/do1Q7r//funZs6d8//33otfWkaHPHpRX0rduWrdToLJy5Uqxa3bOKaZZs2Zi19xk3LhxCaf99ttvCXGNKB91QsmkPSknkwABCEAAAhtGoCRptJu+3WjFCkNKlmD0puteGnS9zP7gh2tomqZOFpUrVw5Hcpdeeqkrz07ZqdkFdWQJ1uCiIzlds4oGOzVprNdiNMnY6U+j6SNGjDDWC9PYac8E+7XXXuuu99Zbb5VqTzjxz0jySO7rr7925Q0YMCDMbr06QycZTQxGclZUzfLly8N8P/30k3PEsZ6iLq209oQncgABCEAAAhtFoETHE7um5jwmrdt/2gvYNTInYmq/7777nACoo8eoUaPMk08+aewI0KUF05XqlKLTfI0aNTLqfKJTiXY7gctj5TnB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XIw7j6pDAAIQgICfACLn54MVAhCAAARiTACRi3HnUXUIQAACEPATQOT8fLBCAAIQgECMCXjfJ1epUiUxxsS4eVQdAhCAAAQqIgF9315xcbF4Ra4igqHNEIAABCBQOASYriycvqQlEIAABCCQRACRSwJCFAIQgAAECocAIlc4fUlLIAABCEAgiQAilwSEKAQgAAEIFA4BRK5w+pKWQAACEIBAEgFELgkIUQhAAAIQKBwCiFzh9CUtgQAEIACBJAKIXBIQohCAAAQgUDgEELnC6UtaAgEIQAACSQQQuSQgRCEAAQhAoHAIIHKF05e0BAIQgAAEkgggcklAiEIAAhCAQOEQqLI+TVmwYIF8/fXXsmbNGmnVqpU0a9ZsfU4v97zr1q1zb1GoUmW9mlnu9eSCEIAABCCQHQIZjeR+//13Ofnkk6VJkyay++67S9euXaV58+ay//77yzfffJOdmiWVOn78eJk8eXJSqj96yCGHyG677ebPlMa6IddKUwxJEIAABCCQYwIZiVzv3r1lxIgRcv7558uUKVNkzJgx0rdvX3njjTfkqKOOciO7bLfjggsukLvvvnu9LqPvEtLP+oYNudb6XoP8EIAABCCQfQKlzuOtWrVKJkyYIN27d5c777wzrNExxxwjs2fPljfffFM++eQT6dy5c2jjAAIQgAAEIJAPBEodyS1ZssSN1HQdLjnceuutcs4554iufQVBR3c6jbnppptKw4YNRcXwq6++cuYnnnhCdtllF/n111/d9GejRo1k/vz58vPPP0ufPn1k8803l8qVK7tp0UsuucSV+8477zgB/fHHH+W1115zxyqsGrScU0891U2d1qxZ05U9duxYZ4v+o/XU6VUte4cddpBJkyZFzeGx71qvv/66m6atU6eOVKtWTTp06CCjRo0Kzx0wYIAcffTRbrS5/fbbi9anS5cu8uijj4Z59EB59uvXz9VH29+rVy/5/PPPE/IQgQAEIACBMiJgMgjbbrutsZczRxxxhHnhhReMXaNLe5YVIWOdPEzTpk2Nndo0xx13nKlevbpp2bKlWbp0qbn99ttdOd26dXPpO++8s1m0aJHZY489jBUgl/+6664zdt3P5XvooYfMRx99ZE466SRTu3ZtY9cE3fH7779vli9fblq3bm0qVapkTjzxRHPeeeeZLbbYwsVfeeUVV78DDzzQlaN1OOus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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "In Algorithms class, you will (implicitly) analyze algorithms on the RAM machine, which was an optional topic in Week 8. In this model, each tape square holds a (arbitrarily large) natural number. You can instantly jump to any square. You can add, subtract, and compare squares. You can also treat a square as a pointer, reading its value $x$ and accessing the square at position $x$. A RAM machine program can be simulated by a multitape TM ([Cook and Reckhow](https://doi.org/10.1016/S0022-0000%2873%2980029-7)). Recall that the simulation looks like this:\n", "\n", "![image.png](attachment:image.png)\n", "\n", "If we assume that accessing a memory location with value $x$ takes $O(\\log_2 x)$ time (linear in the number of bits), then a RAM machine program that runs in $t(n)$ time can be simulated by a multitape TM in $O(t(n)^2)$ time. As in the multitape-to-single-tape construction, the basic idea is that getting to a memory cell may take $O(t(n))$ time, so the simulation slows down by a factor of $O(t(n))$.\n", "\n", "So simulating a RAM machine computation with $t(n)$ steps on a *single-tape* TM would take $O((t(n)^2)^2) = O(t(n)^4)$ time. I suspect this can be improved to $O(t(n)^2)$ time if we go straight from a RAM machine to a single-tape TM." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Digression: Which model is the most realistic?\n", "\n", "Which of these models is an actual computer most like? Having programmed Turing machines, you probably feel that they're very unlike actual computers, and the RAM machine is more like an actual computer. But the truth is somewhere in between. Accessing memory is never instantaneous; it always depends on how large the memory is:\n", "\n", "- Magnetic tape (which is still surprisingly common) is a lot like a Turing machine tape: to access a location, you have to rewind or fast-forward to the right place on the tape, which takes time $O(n)$ where $n$ is the size of the tape.\n", "\n", "- Memory access time also depends on the length of the wire to the memory location: Prof. Joshi tells me that the longer the wire, the larger the capacitor used for a bit, which takes longer to charge. Most memory is laid out in two dimensions, making the access time something like $O(n^{1/2})$, although three-dimensional memory is starting to be used, which would be $O(n^{1/3})$.\n", "\n", "- Hard disks are also two dimensional: you have to move the head to the right track, then wait for the disk to spin so that the location you want is under the head.\n", "\n", "So a one-dimensional, two-dimensional, or three-dimensional tape would seem to be a good model of actual memory, depending on how the memory is physically laid out. Most memory these days is two-dimensional, so I say that a two-dimensional tape is the most realistic." ] }, { "attachments": { "image.png": { "image/png": "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0c3mUEmABEiABEiABEggYIy/yZMnIyYmBg6Ho8xd+fzzz9GrVy+kpaWhffv2GDVqFA4cOFCi3q5du3D99dejVatWqF+/Pk499VT88MMPJeroh6pqq6avV9G+lxkwd5AACZAACZAACZCANwErAEpOTo7VsWNHS/plFRcXl+jRp59+avafeeaZ1tixY62HH37YiouLs4YNG+app+d06dLFSk5Otv79739b77zzjtWvXz8rMjLSmjlzpqdeVbVV09fTAVSk756BcoMESIAESIAESIAEfBCAj/01snvMmDHG6IuIiDAGXnnGX6dOnaxu3bpZLpfL06dXXnnF1J81a5bZ98knn5jPX375pafOoUOHrOzsbOu0007z7Kuqtmr6ejqAivTdM1BukAAJkAAJkAAJkIAPArU67XvCCSfglltuwYsvvogLL7zQ2yFptrdt24YlS5bg0ksvhRiInuOXXHIJxKsHnSrWMmXKFIjXD2eccYanTmxsLM4//3xMmzYNTqcTVdlWTV+von33DJ4bJEACJEACJEACJOCDQLSP/TWyu0ePHtCXFjFO8fHHH5e47po1a8zndu3aldiflJSEzMxMrF271uzXem3bti1hIOoBjQ8sKirCpk2bzEv3VUVbNX097X9F+m4q8R8SIAESIAESIAES8EOgVo0/P/0yh/bv32/e1dgrXRITE2Ef13dfdfQ8PW7X9VXPPl7Rtny1U13X03Z9XdPuu9Y52jJp0qSjPZXnkQAJkAAJkAAJBAkBCYdDQBt/6g3UIvF+ZZDqMXu/97Z3Re/zvbe96+i29/ne2971vM+vaB093+5j6bbs/VXZlvc1KrutDwMLCZAACZAACZBA6BOo1Zi/I+GtW7euqVJQUFCman5+PuLj481+reerjlbQelXdVk1fT8fh65o2B63DQgIkQAIkQAIkQAL+CAS08desWTPTd0kFU2IMagRpHFzTpk3Nfq1Xuo4e0H26UKRJkyao6rZq+nr2eMyAD/9TmoP3MW6TAAmQAAmQAAmQQHkEAtr4a968uTHcxo8fX6LvktLFTKf26dPH7Nd3Tbr8008/eerpCt+vvvoKXbt2heQFRFW2VdPXq2jfPYPnBgmQAAmQAAmQAAn4IiAxZwFRJN2LydVXOsnzv/71L7P/b3/7myVpX6z333/fEk+eddxxx1may0/Lnj17LFn9a8nqXksU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tAr3TqdxNS5Pz/O3+lana3URiC5m8VXU66n/XcQILpN70Nc53E8CJEACJEACgUaAxl+g3RH2hwRIgARIgARIgASqkUDFXSjV2Ak2TQIkQAIkQAIkQAIkUDMEaPzVDGdehQRIgARIgARIgAQCggCNv4C4DewECZAACZAACZAACdQMARp/NcOZVyEBEiABEiABEiCBgCBA4y8gbgM7QQIkQAIkQAIkQAI1Q4DGX81w5lVIgARIgARIgARIICAI0PgLiNvATpAACZAACZAACZBAzRCg8VcznHkVEiABEiABEiABEggIAjT+AuI2sBMkQAIkQAIkQAIkUDMEaPzVDGdehQRIgARIgARIgAQCggCNv4C4DewECZAACZAACZAACdQMARp/NcOZVyEBEiABEiABEiCBgCBA4y8gbgM7QQIkQAIkQAIkQAI1Q4DGX81w5lVIgARIgARIgARIICAI0PgLiNvATpAACZAACZAACZBAzRCg8VcznHkVEiABEiABEiABEggIAjT+AuI2sBMkQAIkQAIkQAIkUDMEaPzVDGdehQRIgARIgARIgAQCggCNv4C4DewECZAACZAACZAACdQMARp/NcOZVyEBEiABEiABEiCBgCBA4y8gbgM7QQIkQAIkQAIkQAI1Q4DGX81w5lVIgARIgARIgARIICAI0PgLiNvATpAACZAACZAACZBAzRCg8VcznHkVEiABEiABEiABEggIAjT+AuI2sBMkQAIkQAIkQAIkUDMEaPzVDGdehQRIgARIgARIgAQCggCNv4C4DewECZAACZAACZAACdQMARp/NcOZVyEBEiABEiABEiCBgCBA4y8gbgM7QQIkQAIkQAIkQAI1Q4DGX81w5lVIgARIgARIgARIICAI0PgLiNvATpAACZAACZAACZBAzRCg8VcznHkVEiABEiABEiABEggIAjT+AuI2sBMkQAIkQAIkQAIkUDMEaPzVDGdehQRIgARIgARIgAQCggCNv4C4DewECZAACZAACZBAqBHIL7ZgWVbADYvGX8DdEnaIBEiABEiABEggmAmowfftKieu+rwIU9a4Am4o0QHXI3aIBEiABEiABEiABIKUwNLtLrw0x4Gc3W6P3y+5LgxpFRVQo6HxF1C3g50hARIgARIgARIIRgI7D1p49TcHpq11e/qSY4pxeYdinHV8csANh8ZfwN0SdogE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U04xr4r0RReHnHTSScjJyalIdXOtGTNmmGnjrKysCp1TXZVo/FUXWbZLAiRAAiRAAmFAQCXZJq1y4Y35IslWCKhoWtfknRiUtgkNk+pI6pYWSElJCajULePHjzcLPjTOT1+aQFqna88991zcfPPNSEpKqtCd08Ufs2fPhi4gOVLRulp0arm2C42/2r4DvD4JkAAJkAAJBCmBxSLJNnquAzkin6alRfxBDJPULVkJDpFky0SDBg3MCtiaWMFbGYS6ulgXYsydOxeTJk3Cjz/+aGL91JDT6dxZs2YhOzv7iE0WFRWZ1C/x8fEVqquVdAVwbRcaf7V9B3h9EiABEiABEggyAjsOWnhNJNmmrbMl2YoxOHUjTkwJfEk2jfU7ePCg8e51794d+tKi3rt7770XL774Iu6//3688847R7wr6sVTj15FpOfWrVtn2qvtKV/tBBd8mFvBf0iABEiABEiABI5E4JBIsr230IE/jy8yhl9MpIWB6Vvw16yl6N3UhTZt2hiPmcb2VcQgOtL1quP4a6+9htTUVOPt824/MTERzz77LPRdU70cqSxevBhLly5Fp06djlTVHP/www/NIhdlVNuFnr/avgO8PgmQAAmQAAkEAYHp65147VcHth10d7aTSLINTctFRpJKsmUjWCTZOnfubAbw+uuvo3///iXI7969G/n5+UfMxbd3717oCl4tmsDZX9H8f+pJXL58OW699VZjePqrXxPHaPzVBGVegwRIgARIgASClMCa3S68KJJsi7e74/oy4wolX996tEmqHUm2Y8WoK3o1x58qdGjaF83RpyuAVeZNkzGrpJsmcPYumvz5u+++M4mbNVXLuHHjsHPnTrM4RFO4eBdN5KwpY7Ro+9988w0WLFiA448/3kwre9etre0IsUjdd7O2esDrkgAJkAAJkAAJBByBvEILb8kK3ok5LqihkBDlwMC0zeiWugtpMm2amZkJXejgT+s24AZ1uEPqufu///s/vPHGG9Ckz3bRKVmVdLvkkkvMrgceeACPPPKIfdhMZbds2RIdOnQwSZtVycMuOg18wgkn2B/NuxqVWnfgwIHGQ6iSb4FQaPwFwl1gH0iABEiABEggQAg4XRa++N2Jd0SS7WCRSrIBJydvN7F9KsmmRp+uWK1pSbbqwKOGny7a0OleXbihK3xrI/F0dYzNX5s0/vzR4TESIAES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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "Across levels of the memory hierarchy, one would expect a roughly similar relationship to hold, from the fastest and smallest level to the slowest and largest level. A *very* naive scatter plot of access time vs. memory size shows that the relationship is worse than $x^{1/2}$:\n", "\n", "![image.png](attachment:image.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### P and NP\n", "\n", "
\n", "

Read Section 7.2, pages 284-286.

\n", "
\n", "\n", "The point of the above discussion is that all the *deterministic* models of computation differ from each other only polynomially, in the sense that an algorithm that takes time $t(n)$ on a multitape TM or a RAM machine can be simulated on a standard TM in time $O(t(n)^l)$ for some $l$. In particular, if $t(n)$ is polynomial in $n$, that is, $t(n) \\in O(n^k)$, then the simulation on a standard TM is still polynomial-time, $O(n^{k+l})$.\n", "\n", "So, just as we used to ignore the difference between (say) $2n$ and $3n$, because this difference could simply be due to running on a 3 GHz machine and a 2 GHz machine, we also now ignore the difference between (say) $n^2$ and $n^3$, to abstract away from the differences between single-tape, multi-tape, or RAM machines. We will simply talk about P, the class of languages decidable in polynomial time by a deterministic machine, whether it's a single-tape or multi-tape Turing machine or a RAM machine or some other machine.\n", "\n", "However, nondeterminism is very different from the other TM variants. You can imagine building physical versions of the deterministic machines (my digression on RAM notwithstanding) but not of a nondeterministic TM. And simulating a nondeterministic TM on a standard TM is much slower than the other simulations. Therefore we don't lump NTMs in with the other TM variants, and we define NP to be the class of languages decidable in polynomial time by a NTM." ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "### More about NP\n", "\n", "
\n", "

Read Section 7.3. Although you skipped the examples of problems in P, I think it's important to read this section in its entirety.

\n", "

Watch W11E2: More About NP

\n", "
\n", "\n", "An example of a problem in NP is HAMPATH (Hamiltonian path): Given a directed graph $G$ with $n$ nodes and two nodes $s$ and $t$, is there a Hamiltonian path from $s$ to $t$? A Hamiltonian path is a sequence of nodes $v_1, \\ldots, v_n$ such that\n", "\n", "- $v_1 = s$\n", "- $v_n = t$\n", "- for all $i$, $(v_i, v_{i+1})$ is an edge\n", "- for all $i \\neq j$, $v_i \\neq v_j$\n", "\n", "For example, this is a Hamiltonian path:\n", "\n", "![image.png](attachment:image.png)\n", "\n", "Proving that a language $A$ is in NP technically requires describing a NTM that decides $A$, plus a complexity analysis of the NTM. For HAMPATH, we might say that it's decided by $N = {}$On input $\\langle G, s, t\\rangle$:\n", "\n", "1. Nondeterministically consider all possible paths of $n$ nodes, $v_1 \\cdots v_n$.\n", "2. For each,\n", " 1. Check that $v_1 = s$ and $v_n = t$.\n", " 2. Check that for all $i$, $(v_i, v_{i+1})$ is an edge in $G$.\n", " 3. Check that for all $i \\neq j$, $v_i \\neq v_j$.\n", " 4. If all of the above are true, *accept*.\n", " \n", "This runs in time $O(n^2)$ (step 2C isn't very efficient).\n", "\n", "More examples:\n", "\n", "- COMPOSITES is given an integer $x$ with $n$ bits and searches for a nontrivial factorization $pq = x$.\n", "- CLIQUE is given a graph with $n$ nodes and searches for a $k$-clique (a fully connected subgraph with $k$ nodes).\n", "- SUBSET-SUM is given a set of $n$ integers and searches for a subset that adds up to $t$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, NTMs are inconvenient to define and analyze. The book actually defines NP differently, and in a way that is easier to prove membership in. (The two definitions are equivalent by Theorem 7.20.) NP problems usually involve some sort of search. A *verifier* for $A$ is a (deterministic) Turing machine that can verify whether something is the thing being searched for. That is, a verifier decides a language $A'$ such that $A = \\{ w \\mid \\text{$\\langle w, c\\rangle \\in A'$ for some $c$} \\}$. A polynomial-time verifier runs in time polynomial in $|w|$.\n", "\n", "For example, a verifier for HAMPATH would be $V = {}$On input $\\langle \\langle G, s, t\\rangle, v_1\\cdots v_n\\rangle$:\n", "\n", "1. Check that $v_1 = s$ and $v_n = t$.\n", "2. Check that for all $i$, $(v_i, v_{i+1})$ is an edge in $G$.\n", "3. Check that for all $i \\neq j$, $v_i \\neq v_j$.\n", "4. If all of the above are true, *accept*.\n", "\n", "This runs in time $O(n^2)$.\n", "\n", "More examples:\n", "\n", "- A verifier for COMPOSITES just has to check that $pq = x$, which takes time quadratic in $n$.\n", "- A verifier for CLIQUE just has to check that the subgraph has $k$ nodes and is fully connected, which is quadratic in $n$.\n", "- A verifier for SUBSET-SUM just has to check that the integers in the subset add up to $t$, which is linear in $n$.\n", "\n", "So, to show that $A$ is in NP, it's enough, and usually easier, to give a polynomial-time verifier for $A$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A note on search versus decision problems\n", "\n", "One quibble with the definition of NP is that there are lots of interesting problems that are not decision problems. For example, finding the shortest distance in a graph from one node to another. Problems that are not decision problems cannot be in NP.\n", "\n", "At the beginning of the class, I tried to convince you that every problem could be converted into a decision problem. For example, the problem $A = {}$\"What is the shortest distance between nodes $u$ and $v$?\" can be converted into the problem $B = {}$\"Is the shortest distance between $u$ and $v$ less than or equal to $d$?\". If we want to solve $A$ but only have a box that can solve $B$, we can try values of $d$ until we find the minimal $d$ for which the answer to $B$ is \"yes.\" That works if we're only concerned about what languages a computational model can recognize, but now we are also concerned about efficiency.\n", "\n", "So assume that the box that solves $B$ runs in polynomial time. Can we solve $A$ in polynomial time too? Since $0 \\leq d \\leq |E| \\leq |V|^2$, the brute-force search for the minimal $d$ causes \"only\" a slowdown by a factor of $|V|^2$, so our solution for $A$ is still polynomial time.\n", "\n", "What if $A = {}$\"What is the shortest path between nodes $u$ and $v$?\" Can we converting it to the decision problem $B ={}$\"Is the shortest path between $u$ and $v$ equal to $\\pi$\" (where $\\pi$ is a sequence of nodes)? No, because there could be exponentially many possible paths, so even if we have a polynomial-time box to solve $B$, we don't get a polynomial-time solution to $A$.\n", "\n", "But we can rescue this by generating the solution bit by bit. That is, convert $A$ to the decision problem $C ={}$\"Does the shortest path between $u$ and $v$ start with prefix $\\pi$?\" Then we can solve $A$ like this:\n", "\n", "- $\\pi \\leftarrow [u]$\n", "- While $\\pi$ does not end in $v$\n", " - Let $x$ be the last node of $\\pi$\n", " - For each neighbor $x'$ of $x$,\n", " - $\\pi' \\leftarrow \\pi + [x']$\n", " - Ask the $C$-box whether the shortest path between $u$ and $v$ starts with $\\pi'$.\n", " - If yes, $\\pi \\leftarrow \\pi'$ and break.\n", "\n", "The inner for-loop runs at most $|V|$ times, and the outer while-loop runs at most $|V|$ times. So the slowdown is at most a factor of $|V|^2$, so this solution for $A$ is still polynomial time." ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "## Thursday\n", "\n", "
\n", "

Watch W11E3: NP-Completeness.

\n", "
\n", "\n", "### Non-polynomial languages\n", "\n", "Whenever we've introduced a new language class, we've proceeded to learn how to prove that certain languages do not belong to that class. In the case of decidable languages, we did that by proving one language ($A_{\\mathsf{TM}}$) undecidable by diagonalization, then proving other languages undecidable using reductions. As a reminder, these proofs went like this:\n", "\n", "Suppose that the language (say, the halting problem) is decidable by a TM $R$. Then we can implement a decider for $A_{\\mathsf{TM}}$ as follows:\n", "\n", "1. Convert the input to an \"adapter\" $P$.\n", "2. Run $R$ on $P$.\n", "3. If $R$ accepts, *accept*; else, *reject*.\n", "\n", "![image.png](attachment:image.png)\n", "\n", "This is a reduction from $A_{\\mathsf{TM}}$ to the halting problem, showing that the halting problem is at least as hard as $A_{\\mathsf{TM}}$. Since $A_{\\mathsf{TM}}$ is undecidable, the halting problem must be undecidable too." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Can we use the same strategy for P, proving that some language is not in P by diagonalization, then proving other languages are not in P using polynomial-time reductions? Yes and no. We can indeed use this strategy to prove some interesting languages non-polynomial, like [given a set of chess pieces on an $n \\times n$ board, can white win?](https://www.sciencedirect.com/science/article/pii/0097316581900169) But these proofs are beyond the scope of this course. (They are covered in Chapter 9.) In this course, we are focusing on languages in NP, and unfortunately, no one has yet proven that there is a language in NP but not P. In particular, diagonalization does not work for NP. (Also Chapter 9.)" ] }, { "attachments": { "image.png": { "image/png": "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8PuYDQ0NMr1bmhjinnLKKfLNN9/IWWedJbvuuqvgeQoRIAK1QaAixfRVY4gLBcXi0DnnnCM77LCDv8UjESACVSAQq5gwOlh99dVloYUWiq3ioYceklNPPVVat24t5557rmyxxRax+XmTCBCBeARiFRPD03nmmUd69uwpvXv3ljZt2kSWhmHwPffcI6eddprlg4JutNFGkfl5gwgQgWgEyi7+jB071rZJsOAD5ZwyZUpoaVDiXXbZRZD/oIMOkn333Vc6d+4sr7zySmh+JhIBIhCNQFnFbNu2rVxxxRXyzjvvyE8//WRWQZhXfvfdd6GlzjDDDNKjRw/58MMPbVFoxx13lO22207eeuut0PxMJAJEoDECZRXTPwKroKuuusoMDiZNmmRWQaeffrr88MMPPkvRccYZZ5QDDzxQPvnkE5tzbrnlltajvv/++0X5eEEEiEBjBKZbMf2j//vf/+S6666T119/Xb766iszOsCWSZRd7UwzzSRHHnmkfPrpp9KxY0fZcMMNrUeFwlKIABEIR6DJiumLWWyxxeTGG2+0OeTHH39sCooFn59//tlnKTrOOuuscsIJJ1gPivnqWmutZT3qF198UZSPF0SACIhUrJgePBi6wwpo1KhR8t5775ld7QUXXCC//PKLz1J0nHPOOW3lFj3mggsuKKuuuqr1qDBWoBABIvAvAlUrpgcSrmKDBw+WF154Qd544w3rQS+66CL57bfffJaiI7Zh0MN+8MEHguHuCiusIL169Ypc9S16mBdEoM4RqJliepyWW245M3x/+umn5eWXXw48U37//XefpeiIvdGLL77YVn0xDMYwN25RqehhXhCBOkWg5orpcVpxxRXl7rvvlscff1yee+4560Gx7RLlOtauXTtb9R09erR8+eWXtup73nnnRQ6JfT08EoF6RCAxxfRgrbLKKjJ06FB5+OGH5YknnjCFu/rqq+XPP//0WYqOWFS66aabbM6KvVO4ml1yySUS1eMWPcwLIlAvCMC7BKLf59+Tgr9haQW3Kzp99dVXnfILuUUXXdRde+21Tn07Y8tRuhPXrVs3p4YO7sorr3Sq0LH5eZMI1AMCgTaGKWFYWq2+9EsvveTU2N116NDB6bZLWQXVIa4ptO6jOu1R3d9//12rprAcIpA5BFJTTI+E+na6zTbbzOmQ1em2S1mFe/HFF90mm2zillpq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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "### NP-completeness\n", "\n", "However, that doesn't stop us from carrying out the second part of the strategy, which is to prove relationships among languages in NP using polynomial-time reductions. We're especially interested in the hardest languages in NP, known as *NP-complete* languages, which *every* language in NP is polynomial-time reducible to.\n", "\n", "![image.png](attachment:image.png)\n", "\n", "This picture tries to illustrate the relationship between P, NP, and NP-complete, assuming that P $\\neq$ NP.\n", "\n", "Take some NP-complete problem as an example -- say, the traveling salesman problem (TSP):\n", "\n", "- If someone proves that some language in NP is not in P, then TSP is not in P.\n", "- If someone proves that TSP is in P, then every language in NP is in P.\n", "\n", "There are thousands of interesting and practical problems that are known to be NP-complete. No one has succeeded in proving that any of them is in P or not in P. But if any of them is in P, they all are, and if any of them is not in P, they all aren't.\n", "\n", "
\n", "

Read Section 7.4, up to but not including \"The Cook-Levin Theorem\" (pages 299-304).

\n", "
" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "More formally, we say that a language $B$ is NP-complete if:\n", "\n", "- $B$ is in NP.\n", "- $B$ is *NP-hard*.\n", "\n", "NP-hardness is sometimes informally stated as \"If $B$ can be decided in polynomial time, then all languages in NP can be decided in polynomial time.\" We might prove this as follows.\n", "\n", "Suppose that $B$ can be decided in polynomial time by $R$. Then, for any language $A$ in NP, we can write a TM $S$ that decides $A$ in polynomial time and has the following form:\n", "\n", "1. Convert $w$ to $f(w)$.\n", "2. Run $R$ on $f(w)$.\n", "3. If $R$ accepts, *accept*; else, *reject*.\n", "\n", "![image.png](attachment:image.png)\n", "\n", "But the standard definition of NP-hardness is stricter. Essentially, we require that the implementation of $S$ has the above form. (For example, you can't invoke $R$ twice, or invert its output.) Then $f$ is called a *polynomial-time mapping reduction* (or many-one reduction, or Karp reduction). The advantage of this definition of reduction is that it classifies languages more finely. But whether it leads to a different set of NP-complete languages is actually unknown." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To prove that a language $B$ is NP-complete, then, you must do the following.\n", "\n", "- To prove that $B$ is in NP, you either:\n", " - Give a polynomial-time deterministic verifier for it, or \n", " - Give a polynomial-time NTM for it.\n", "- To prove that $B$ is NP-hard, assume that $B$ can be decided in polynomial time by $R$, and for any NP language $A$, and construct a polynomial-time decider $S={}$\"On input $w$, 1. Compute $f(w)$. 2. Run $R$ on $f(w)$. 3. If $R$ accepts, *accept*; else, *reject*.\"\n", "You fill in:\n", " - Define a mapping $f$ from instances of $A$ to instances of $B$.\n", " - Prove that $w \\in A$ iff $f(w) \\in B$.\n", " - Prove that $f$ runs in polynomial time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### An NP-complete language\n", "\n", "
\n", "

Watch W11E4: An NP-Complete Language.

\n", "
\n", "\n", "Recall that in the chapter on undecidability we frequently used the language\n", "\n", "$$ \\mathit{A}_{\\mathsf{TM}} = \\{ \\langle M, w\\rangle \\mid \\text{TM $M$ accepts $w$} \\}. $$\n", "\n", "Our first example of an NP-complete language is like it:\n", "\n", "$$ \\mathit{TIME}_{\\mathsf{NTM}} = \\{ \\langle N, w, \\texttt{1}^t\\rangle \\mid \\text{NTM $N$ accepts $w$ within $t$ steps} \\}. $$\n", "\n", "This language is like $\\mathit{A}_{\\mathsf{TM}}$, but uses NTMs and has a time limit $t$. It appears in Sipser only as an exercise (Problem 7.37, where it's called $U$), but I thought it would be a good first step, because it's probably the easiest language to prove NP-complete \"from scratch.\" And it will simplify the next NP-completeness proof slightly.\n", "\n", "First, we can show that it is NP by giving a nondeterministic polynomial-time TM that decides it. It's a universal TM, but it's nondeterministic and has a time limit. On input $\\langle N, w, \\texttt{1}^t\\rangle$:\n", "\n", "1. Set the current configuration to the start configuration.\n", "2. Repeat for up to $t$ steps:\n", " 1. If the current configuration is an accepting configuration, *accept*.\n", " 2. Find all transitions of $N$ that match the current configuration.\n", " 3. For each transition, use a different branch of computation to apply the transition to the current configuration.\n", "3. *Reject*.\n", "\n", "Using multiple tapes, this runs in time $O(t|N|)$: the $t$ factor is because we simulate at most $t$ steps, and the $|N|$ factor is because at each step, we have to do a linear search through $N$'s transitions to find the matching one(s). Since both $t$ and $|N|$ are shorter than the input ($\\langle N, w, \\texttt{1}^t\\rangle$), this runs in at most quadratic time.\n", "\n", "Second, we show that it is NP-hard. Suppose $\\mathit{TIME}_{\\mathsf{NTM}}$ could be decided by a deterministic, polynomial-time TM $R$. For any language $A$ in NP, we want to show that we can decide $A$ in deterministic polynomial time. By definition of NP, there must be a NTM $N$ that decides $A$ in at most $p(|w|)$ steps (where $w$ is the input and $p$ is some polynomial). We can construct a deterministic, polynomial-time TM that decides $A$ as follows. $S = {}$On input $w$:\n", "\n", "1. Form the triple $\\langle N, w, \\texttt{1}^{p(|w|)}\\rangle$.\n", "2. Run $R$ on $\\langle N, w, \\texttt{1}^{p(|w|)}\\rangle$.\n", "3. If $R$ accepts, *accept*; else, *reject*.\n", "\n", "To prove that $S$ decides $A$:\n", "- If $w \\in A$, then $N$ accepts $w$ in at most $p(|w|)$ steps. So\n", " $\\langle N, w, \\texttt{1}^{p|w|}\\rangle \\in \\mathit{TIME}_{\\mathsf{NTM}}$.\n", "- If $w \\not\\in A$, then $N$ does not accept $w$ within $p(|w|)$ steps. So $\\langle N, w, \\texttt{1}^{p|w|}\\rangle \\not\\in \\mathit{TIME}_{\\mathsf{NTM}}$.\n", "\n", "Finally, $S$ runs in polynomial-time because $R$ does.\n", "\n", "Therefore, $\\mathit{TIME}_{\\mathsf{NTM}}$ is NP-complete." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.1" } }, "nbformat": 4, "nbformat_minor": 1 }