<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://complexity.subwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vipul</id>
	<title>Complexity - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://complexity.subwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vipul"/>
	<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/wiki/Special:Contributions/Vipul"/>
	<updated>2026-05-14T17:09:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.2</generator>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=91</id>
		<title>MediaWiki:Sitenotice</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=91"/>
		<updated>2024-09-15T23:04:43Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Want site search autocompletion? See [[Project:Enabling site search autocompletion|here]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Encountering 429 Too Many Requests errors when browsing the site? See [[Project:429 Too Many Requests error|here]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=90</id>
		<title>User:Vipul/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=90"/>
		<updated>2024-09-15T23:04:05Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &amp;lt;math&amp;gt;\sqrt{7 + 2}!! + 3 = 723&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\sqrt{7 + \sqrt{4}}!! + 4! = 744&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;9^{\sqrt{7 + 2}} = 729&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;(7 + 2)^{\sqrt{9}} = 729&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;5^{1 + 2} = 125&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;6^{2 + 1} = 216&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=89</id>
		<title>MediaWiki:Sitenotice</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=89"/>
		<updated>2024-09-08T18:09:49Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;This site is in the process of being migrated to a new server. Edits made until this notice has been removed may be lost.&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Want site search autocompletion? See [[Project:Enabling site search autocompletion|here]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Encountering 429 Too Many Requests errors when browsing the site? See [[Project:429 Too Many Requests error|here]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=88</id>
		<title>MediaWiki:Sitenotice</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=88"/>
		<updated>2024-08-18T19:53:37Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Want site search autocompletion? See [[Project:Enabling site search autocompletion|here]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Encountering 429 Too Many Requests errors when browsing the site? See [[Project:429 Too Many Requests error|here]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Complexity:429_Too_Many_Requests_error&amp;diff=87</id>
		<title>Complexity:429 Too Many Requests error</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Complexity:429_Too_Many_Requests_error&amp;diff=87"/>
		<updated>2024-08-18T19:52:39Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;This content is copied from Ref:Ref:429 Too Many Requests error.  If you get a 429 Too Many Requests error when browsing this site, read on.  You&amp;#039;re probably seeing this error because a large number of requests have been made from your IP address over a short period of time. That&amp;#039;s probably a lot of requests from you or others who share your IP address (such as your home wi-fi network). Waiting a minute and then retrying should generally work.  If you are an actual h...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This content is copied from [[Ref:Ref:429 Too Many Requests error]].&lt;br /&gt;
&lt;br /&gt;
If you get a 429 Too Many Requests error when browsing this site, read on.&lt;br /&gt;
&lt;br /&gt;
You&#039;re probably seeing this error because a large number of requests have been made from your IP address over a short period of time. That&#039;s probably a lot of requests from you or others who share your IP address (such as your home wi-fi network). Waiting a minute and then retrying should generally work.&lt;br /&gt;
&lt;br /&gt;
If you are an actual human being with a legitimate reason to be browsing the site heavily, first, thank you and sorry about this! We set rate limits to prevent bots, spiders, spammers, and malicious actors from consuming too much of our server&#039;s resources so that our server&#039;s resources can be devoted to real humans like you. Consider writing to vipulnaik1@gmail.com with your IP address to have the IP address whitelisted. You can get your IP address by [https://www.google.com/search?q=my+ip+address Googling &amp;quot;my IP address&amp;quot;] (scroll down a little bit to where Google includes the IP address in a box). NOTE: If you have both an IPv4 address and an IPv6 address, you should send both; the server supports both IPv4 and IPv6, so either may end up getting used. To check if you have an IPv6 address, try visiting [https://ipv6.google.com/ ipv6.google.com].&lt;br /&gt;
&lt;br /&gt;
If your IP address changes, or you are away from your home network, then you&#039;ll get rate-limited again. So if you find yourself getting rate-limited after already having been whitelisted, check if you are on a different IP address than the one for which you requested whitelisting.&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=File:Site_search_autocompletion_working.png&amp;diff=86</id>
		<title>File:Site search autocompletion working.png</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=File:Site_search_autocompletion_working.png&amp;diff=86"/>
		<updated>2024-08-18T19:51:10Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=File:Site_search_autocompletion_broken.png&amp;diff=85</id>
		<title>File:Site search autocompletion broken.png</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=File:Site_search_autocompletion_broken.png&amp;diff=85"/>
		<updated>2024-08-18T19:50:44Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Complexity:Enabling_site_search_autocompletion&amp;diff=84</id>
		<title>Complexity:Enabling site search autocompletion</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Complexity:Enabling_site_search_autocompletion&amp;diff=84"/>
		<updated>2024-08-18T19:46:32Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;Content copied from Ref:Ref:Enabling site search autocompletion. Images used are specific to this site (Complexity).  Site search autocompletion is currently broken by default on this site. This page includes details on how to get it to work, and what&amp;#039;s going on.  ==What&amp;#039;s wrong with site search autocompletion and how to fix it==  ===What&amp;#039;s wrong===  When you start typing something in the site search bar, you&amp;#039;ll see it stuck at &amp;quot;Loading search suggestions&amp;quot; as shown i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Content copied from [[Ref:Ref:Enabling site search autocompletion]]. Images used are specific to this site (Complexity).&lt;br /&gt;
&lt;br /&gt;
Site search autocompletion is currently broken by default on this site. This page includes details on how to get it to work, and what&#039;s going on.&lt;br /&gt;
&lt;br /&gt;
==What&#039;s wrong with site search autocompletion and how to fix it==&lt;br /&gt;
&lt;br /&gt;
===What&#039;s wrong===&lt;br /&gt;
&lt;br /&gt;
When you start typing something in the site search bar, you&#039;ll see it stuck at &amp;quot;Loading search suggestions&amp;quot; as shown in the screenshot below:&lt;br /&gt;
&lt;br /&gt;
[[File:Site search autocompletion broken.png]]&lt;br /&gt;
&lt;br /&gt;
Note that the actual search is still working -- you just have to hit Enter after typing the search query and it&#039;ll go to the search results page. It&#039;s the autocompletion before you hit Enter that is broken.&lt;br /&gt;
&lt;br /&gt;
===How to fix it===&lt;br /&gt;
&lt;br /&gt;
To fix it, you need to follow these steps:&lt;br /&gt;
&lt;br /&gt;
* Write to vipulnaik1@gmail.com asking for a login to the site. Please include the following with your request: preferred username, preferred initial password (you can change it after logging in), real name (if you want it entered), email address to use (if you want an actual email address by which you can be contacted), and whether you want edit access as well. You don&#039;t need edit access for enabling site search autocompletion.&lt;br /&gt;
* Log in to the site. Then go to [[Special:Preferences]]. Go to the Appearance section and switch the Skin from &amp;quot;Vector (2022)&amp;quot; to &amp;quot;Vector legacy (2010)&amp;quot;.&lt;br /&gt;
* Make sure to hit &amp;quot;Save&amp;quot; at the bottom.&lt;br /&gt;
* Now you can reload the page or load a new page.&lt;br /&gt;
&lt;br /&gt;
Site search autocompletion should now work. Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Site search autocompletion working.png]]&lt;br /&gt;
&lt;br /&gt;
==More background==&lt;br /&gt;
&lt;br /&gt;
We&#039;ve recently upgraded the MediaWiki version of this wiki from 1.35.13 to 1.41.2 (see [[Special:Version]]). The upgrade allows us to migrate the wiki to a more modern operating system version running PHP 8. With the current setup for MediaWiki 1.41.2, we&#039;re in this situation:&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;Vector legacy (2010)&amp;quot; skin has site search autocompletion working, but it doesn&#039;t render well on small screens. Specifically, even on small mobile screens, it still shows the left menu, and doesn&#039;t properly use the MobileFrontend extension settings.&lt;br /&gt;
* The &amp;quot;Vector (2022)&amp;quot; skin doesn&#039;t have site search autocompletion working (see screenshots in preceding section) but it does render fine on mobile devices.&lt;br /&gt;
&lt;br /&gt;
It is possible to set only one default skin (that is applicable to all non-logged-in users and is the default for logged-in users who have not configured a skin for themselves). So, the selection of default skin comes down to whether it&#039;s more important for casual users to have the mobile experience working or to have site search autocompletion working. Based on a general understanding of user behavior, we believe that having a usable mobile experience is more important for casual users than having site search autocompletion.&lt;br /&gt;
&lt;br /&gt;
However, for power users who are using the site extensively, site search autocompletion may be important. That&#039;s why we&#039;ve written this page giving guidance on how to set up site search autocompletion.&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=83</id>
		<title>MediaWiki:Sitenotice</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=83"/>
		<updated>2024-08-18T19:42:02Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=82</id>
		<title>User:Vipul/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=82"/>
		<updated>2024-08-18T19:40:04Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &amp;lt;math&amp;gt;\sqrt{7 + 2}!! + 3 = 723&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\sqrt{7 + \sqrt{4}}!! + 4! = 744&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;9^{\sqrt{7 + 2}} = 729&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;(7 + 2)^{\sqrt{9}} = 729&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;5^{1 + 2} = 125&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=81</id>
		<title>User:Vipul/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=81"/>
		<updated>2024-08-18T19:35:48Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &amp;lt;math&amp;gt;\sqrt{7 + 2}!! + 3 = 723&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\sqrt{7 + \sqrt{4}}!! + 4! = 744&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;9^{\sqrt{7 + 2}} = 729&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;(7 + 2)^{\sqrt{9}} = 729&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=78</id>
		<title>User:Vipul/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=78"/>
		<updated>2024-08-18T19:31:09Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &amp;lt;math&amp;gt;\sqrt{7 + 2}!! + 3 = 723&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\sqrt{7 + \sqrt{4}}!! + 4! = 744&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;9^{\sqrt{7 + 2}} = 729&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=77</id>
		<title>MediaWiki:Sitenotice</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=MediaWiki:Sitenotice&amp;diff=77"/>
		<updated>2024-08-18T19:22:49Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;This wiki is in the process of being upgraded. The site may go down intermittently. Please try to avoid editing until this notice has been removed.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=76</id>
		<title>User:Vipul/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=76"/>
		<updated>2024-07-14T22:54:11Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &amp;lt;math&amp;gt;\sqrt{7 + 2}!! + 3 = 723&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\sqrt{7 + \sqrt{4}}!! + 4! = 744&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=75</id>
		<title>User:Vipul/Sandbox</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=User:Vipul/Sandbox&amp;diff=75"/>
		<updated>2024-07-14T22:50:13Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;* &amp;lt;math&amp;gt;\sqrt{7 + 2}!! + 3 = 723&amp;lt;/math&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* &amp;lt;math&amp;gt;\sqrt{7 + 2}!! + 3 = 723&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Cobham-Edmonds_thesis&amp;diff=63</id>
		<title>Cobham-Edmonds thesis</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Cobham-Edmonds_thesis&amp;diff=63"/>
		<updated>2011-12-28T02:48:51Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Redirected page to Cobham&amp;#039;s thesis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Cobham&#039;s thesis]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Church-Turing_conjecture&amp;diff=62</id>
		<title>Church-Turing conjecture</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Church-Turing_conjecture&amp;diff=62"/>
		<updated>2011-12-28T02:47:29Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Redirected page to Church-Turing thesis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Church-Turing thesis]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Church%27s_conjecture&amp;diff=61</id>
		<title>Church&#039;s conjecture</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Church%27s_conjecture&amp;diff=61"/>
		<updated>2011-12-28T02:46:35Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Redirected page to Church-Turing thesis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Church-Turing thesis]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Turing%27s_conjecture&amp;diff=60</id>
		<title>Turing&#039;s conjecture</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Turing%27s_conjecture&amp;diff=60"/>
		<updated>2011-12-28T02:46:05Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Redirected page to Church-Turing thesis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Church-Turing thesis]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Turing%27s_thesis&amp;diff=59</id>
		<title>Turing&#039;s thesis</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Turing%27s_thesis&amp;diff=59"/>
		<updated>2011-12-28T02:45:40Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Redirected page to Church-Turing thesis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Church-Turing thesis]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Church%27s_thesis&amp;diff=58</id>
		<title>Church&#039;s thesis</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Church%27s_thesis&amp;diff=58"/>
		<updated>2011-12-28T02:45:05Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Redirected page to Church-Turing thesis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Church-Turing thesis]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Church-Turing_thesis&amp;diff=57</id>
		<title>Church-Turing thesis</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Church-Turing_thesis&amp;diff=57"/>
		<updated>2011-12-28T02:44:33Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;{{intuition-to-formalism bridge thesis}}  ==Statement==  The &amp;#039;&amp;#039;&amp;#039;Church-Turing thesis&amp;#039;&amp;#039;&amp;#039; states that if a computation can be effectively carried out by some machine, then it can b...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{intuition-to-formalism bridge thesis}}&lt;br /&gt;
&lt;br /&gt;
==Statement==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Church-Turing thesis&#039;&#039;&#039; states that if a computation can be effectively carried out by some machine, then it can be carried out by any of these equivalent machines or formalisms:&lt;br /&gt;
&lt;br /&gt;
#  [[Turing machine]]s&lt;br /&gt;
# [[lambda-calculus]]&lt;br /&gt;
# recursive definition&lt;br /&gt;
&lt;br /&gt;
Note that (1)-(3) are known to be equivalent in terms of the power of things they can express and compute. What the Church-Turing thesis states is that &#039;&#039;any&#039;&#039; thing that can be effectively calculated is equivalent to all of these.&lt;br /&gt;
&lt;br /&gt;
The Church-Turing thesis is a thesis that bridges between an intuitive notion of effective computability and a formal model of computation. It cannot be proved in this form, because the intuitive notion of effective computability has no prior formal definition. However, if a reasonable notion of effective computability is postulated that cannot be carried out by a Turing machine, then that would disprove the Church-Turing thesis.&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Nondeterministic_time_hierarchy_theorem&amp;diff=56</id>
		<title>Nondeterministic time hierarchy theorem</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Nondeterministic_time_hierarchy_theorem&amp;diff=56"/>
		<updated>2011-12-28T02:38:48Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;==Statement==  If &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; are time-constructible functions and &amp;lt;math&amp;gt;f(n + 1) = o(g(n))&amp;lt;/math&amp;gt;, then &amp;lt;math&amp;gt;\operatorname{NTIME}(f(n))&amp;lt;/math&amp;gt; is stri...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Statement==&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; are [[time-constructible function]]s and &amp;lt;math&amp;gt;f(n + 1) = o(g(n))&amp;lt;/math&amp;gt;, then &amp;lt;math&amp;gt;\operatorname{NTIME}(f(n))&amp;lt;/math&amp;gt; is strictly contained in &amp;lt;math&amp;gt;\operatorname{NTIME}(g(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Related facts==&lt;br /&gt;
&lt;br /&gt;
* [[Deterministic time hierarchy theorem]]&lt;br /&gt;
* [[Nondeterministic space hierarchy theorem]]&lt;br /&gt;
* [[Deterministic space hierarchy theorem]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Deterministic_time_hierarchy_theorem&amp;diff=55</id>
		<title>Deterministic time hierarchy theorem</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Deterministic_time_hierarchy_theorem&amp;diff=55"/>
		<updated>2011-12-28T02:35:05Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;==Statement==  ===Existential version===  Suppose &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is a time-constructible function. Then, there exists a deterministic time complexity class that is strict...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Statement==&lt;br /&gt;
&lt;br /&gt;
===Existential version===&lt;br /&gt;
&lt;br /&gt;
Suppose &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is a [[time-constructible function]]. Then, there exists a [[deterministic time complexity class]] that is strictly larger than &amp;lt;math&amp;gt;DTIME(f(n))&amp;lt;/math&amp;gt;. The explicit description of this depends on the choice of model of computation that we are using to define &amp;lt;math&amp;gt;DTIME&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Explicit version===&lt;br /&gt;
&lt;br /&gt;
With a suitable model of computation, we can show that &amp;lt;math&amp;gt;DTIME(f(n))&amp;lt;/math&amp;gt; is strictly contained in &amp;lt;math&amp;gt;DTIME(f(n) \log f(n))&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==Proof==&lt;br /&gt;
&lt;br /&gt;
The key idea behind the proof is the [[diagonalization argument]].&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Time-constructible_function&amp;diff=54</id>
		<title>Time-constructible function</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Time-constructible_function&amp;diff=54"/>
		<updated>2011-12-28T02:18:37Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;==Definition==  A &amp;#039;&amp;#039;&amp;#039;time-constructible function&amp;#039;&amp;#039;&amp;#039; is a function &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; from the set of natural numbers to itself such that there exists a Turing machine that takes ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;time-constructible function&#039;&#039;&#039; is a function &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; from the set of natural numbers to itself such that there exists a [[Turing machine]] that takes as input &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; and outputs &amp;lt;math&amp;gt;f(n)&amp;lt;/math&amp;gt; in time &amp;lt;math&amp;gt;O(f(n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Any function that bounds from above the time taken by a Turing machine must be a time-constructible function.&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Template:Fillin&amp;diff=53</id>
		<title>Template:Fillin</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Template:Fillin&amp;diff=53"/>
		<updated>2011-12-28T02:15:43Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;&amp;#039;&amp;#039;Fill this in later&amp;#039;&amp;#039;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Fill this in later&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=DTIME&amp;diff=52</id>
		<title>DTIME</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=DTIME&amp;diff=52"/>
		<updated>2011-12-28T02:15:17Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Redirected page to Deterministic time complexity class&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[deterministic time complexity class]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Diagonalization_argument&amp;diff=51</id>
		<title>Diagonalization argument</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Diagonalization_argument&amp;diff=51"/>
		<updated>2011-12-28T02:14:42Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;diagonalization argument&#039;&#039;&#039; is a general format of argument that is used to show the existence of a language that lies outside a certain complexity class or cannot be decided by machines of a certain type.&lt;br /&gt;
&lt;br /&gt;
These arguments are adaptations of the [[Canton diagonalization argument]] that shows that a set (whether finite or infinite) cannot be put in bijection with its power set.&lt;br /&gt;
&lt;br /&gt;
The rough idea behind the relevance of the diagonalization argument is as follows: The number of available Turing machines is &#039;&#039;small&#039;&#039; because any Turing machine can itself be described by a string that is input to a universal Turing machine. On the other hand, the number of languages is &#039;&#039;large&#039;&#039; because it involves choosing arbitrary subsets of the set of all permissible strings. Thus, we can mimic the diagonalization argument and try to derive a contradiction from the assumption that all languages can be decided by machines.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
* The existence of [[undecidable language]]s, i.e., it is possible for there to be a language such that membership of the language cannot be decided by any Turing machine.&lt;br /&gt;
* The unsolvability of the [[halting problem]], i.e., it is not possible to construct a Turing machine that can take as input a string and the code for a Turing machine and determine whether the Turing machine will halt on that string.&lt;br /&gt;
* [[Deterministic time hierarchy theorem]]&lt;br /&gt;
* [[Nondeterministic time hierarchy theorem]]&lt;br /&gt;
* [[Deterministic space hierarchy theorem]]&lt;br /&gt;
* [[Nondeterministic space hierarchy theorem]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Diagonalization_argument&amp;diff=50</id>
		<title>Diagonalization argument</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Diagonalization_argument&amp;diff=50"/>
		<updated>2011-12-28T02:03:40Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;diagonalization argument&#039;&#039;&#039; is a general format of argument that is used to show the existence of a language that lies outside a certain complexity class or cannot be decided by machines of a certain type. The classic application is to showing the existence of [[undecidable language]]s via the [[halting problem]].&lt;br /&gt;
&lt;br /&gt;
These arguments are adaptations of the [[Canton diagonalization argument]] that shows that a set (whether finite or infinite) cannot be put in bijection with its power set.&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Diagonalization_argument&amp;diff=49</id>
		<title>Diagonalization argument</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Diagonalization_argument&amp;diff=49"/>
		<updated>2011-12-28T02:02:54Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;==Definition==  A &amp;#039;&amp;#039;&amp;#039;diagonalization argument&amp;#039;&amp;#039;&amp;#039; is a general format of argument that is used to show the existence of a language that lies outside a certain complexity class or ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;diagonalization argument&#039;&#039;&#039; is a general format of argument that is used to show the existence of a language that lies outside a certain complexity class or cannot be decided by machines of a certain type. The classic application is to showing the existence of [[undecidable language]]s via the [[halting problem]].&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Deterministic_time_complexity_class&amp;diff=48</id>
		<title>Deterministic time complexity class</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Deterministic_time_complexity_class&amp;diff=48"/>
		<updated>2011-12-28T01:57:58Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;==Definition==  ===Given a model of computation for a single function===  We consider here a model of computation where deterministic Turing machines with certain constraints are...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
===Given a model of computation for a single function===&lt;br /&gt;
&lt;br /&gt;
We consider here a model of computation where deterministic Turing machines with certain constraints are allowed, and strings all over a fixed alphabet. The goal of the Turing machine is to determine whether the string is in a particular language or not.&lt;br /&gt;
&lt;br /&gt;
Suppose &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; is an (Eventually) increasing function from positive integers to positive integers. The deterministic time complexity class &amp;lt;math&amp;gt;DTIME(f(n))&amp;lt;/math&amp;gt; is defined as the collection of all languages for which, for sufficiently large &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, there exists a deterministic Turing machine that can, in at most &amp;lt;math&amp;gt;f(n)&amp;lt;/math&amp;gt; steps, determine whether the string is in the language or not, where &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; is the length of the string.&lt;br /&gt;
&lt;br /&gt;
There are three key aspects to note:&lt;br /&gt;
&lt;br /&gt;
* The function is in terms of the length of the string, but the Turing machine itself is independent of the length of the string.&lt;br /&gt;
* The time complexity is &#039;&#039;worst case&#039;&#039; complexity over all strings of length &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
* We are interested in the behavior for sufficiently large &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
===Given a model of computation for a family of functions===&lt;br /&gt;
&lt;br /&gt;
{{fillin}}&lt;br /&gt;
&lt;br /&gt;
===General definition===&lt;br /&gt;
&lt;br /&gt;
In general, deterministic time complexity classes are ill defined because the smallest number of steps that can be taken by an algorithm depends heavily on the model of computation. Roughly speaking, the specifics of the model of computation can introduce a multiplicative error that is roughly polynomial in the length of the string. Thus, in practice, we consider deterministic time complexity classes for families of functions with the property that multiplying a function in the family by a polynomial with positive leading coefficient gives a function that is still bounded from above by a function in the family.&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=P&amp;diff=47</id>
		<title>P</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=P&amp;diff=47"/>
		<updated>2011-12-28T01:49:14Z</updated>

		<summary type="html">&lt;p&gt;Vipul: /* Formal definitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
===Loose definition===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;polynomial time&#039;&#039;&#039; complexity class, denoted &#039;&#039;&#039;PTIME&#039;&#039;&#039; or &#039;&#039;&#039;P&#039;&#039;&#039;, is a [[deterministic time complexity class]] defined loosely as follows. A language is said to be in the polynomial time complexity class if there is a polynomial time algorithm for determining whether a string is in the language. Here, the &#039;&#039;polynomial&#039;&#039; is an &#039;&#039;upper bound&#039;&#039; on the time taken, it is in terms of the &#039;&#039;length&#039;&#039; of the string, it is a &#039;&#039;worst case&#039;&#039; measure (i.e., worst case over all possible strings of the length), and we are interested in the &#039;&#039;asymptotic&#039;&#039; behavior for sufficiently large strings.&lt;br /&gt;
&lt;br /&gt;
===Formal definitions===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! No. !! Shorthand !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| 1 || single tape Turing machine || there exists a (deterministic) [[Turing machine]] using a single tape for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || multiple tape Turing machine || there exists a (deterministic) [[Turing machine]] with access to finitely many read/write tapes, including one for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || machine with log-time random access || there exists a program that can perform random access on a read/write memory in time logarithmic to the amount of memory used, &#039;&#039;and&#039;&#039; the program accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Loosely speaking, a language is in P if there is a polynomial time algorithm for recognition of the language.&lt;br /&gt;
&lt;br /&gt;
==Key features==&lt;br /&gt;
&lt;br /&gt;
===Robustness based on complexity-theoretic Church-Turing thesis===&lt;br /&gt;
&lt;br /&gt;
The [[complexity-theoretic Church-Turing thesis]] states the notion of &#039;&#039;polynomial time&#039;&#039; is robust and does not change based on the nature of the machine, as long as we are dealing with &#039;&#039;deterministic&#039;&#039; machines, and we do not have access to random oracles or quantum computing. &lt;br /&gt;
&lt;br /&gt;
However, the &#039;&#039;degree&#039;&#039; of the polynomial that can be achieved does depend on the machine specifications (so some algorithms may be much faster with log-time random access than with sequential access as for the tapes in a Turing machine). There may be an algorithm on one kind of machine that takes time &amp;lt;math&amp;gt;O(N\log N)&amp;lt;/math&amp;gt; but on another machine takes time &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; is the length of the string.&lt;br /&gt;
&lt;br /&gt;
===Independence of algorithm from length of the string===&lt;br /&gt;
&lt;br /&gt;
The Turing machine, or more generally the program or algorithm used to determine whether a string is in the language, is &#039;&#039;independent&#039;&#039; of the length of the string. (Internally, it may make cases based on the length of the string, but that&#039;s a different matter). A related complexity class where the algorithm can take polynomial-sized advice based on the length of the string is termed [[P/poly]].&lt;br /&gt;
&lt;br /&gt;
===Asymptotic nature===&lt;br /&gt;
&lt;br /&gt;
The definition of the complexity class depends only on the asymptotic nature of the time taken as a function of the length of the string. In particular, if two languages have cofinite intersection (i.e., they are the same except for finitely many strings in each language that is not in the other) then one is in P if and only if the other is in P.&lt;br /&gt;
&lt;br /&gt;
===Worst case rather than average case===&lt;br /&gt;
&lt;br /&gt;
{{further|[[Worst case versus average case]]}}&lt;br /&gt;
&lt;br /&gt;
As for most complexity classes, the definition of polynomial time must take into account the &#039;&#039;worst case&#039;&#039; time taken among possible input strings, including both the strings that are in the language and the strings that are not in the language. We are not trying to compute the &#039;&#039;average&#039;&#039; time taken among all possible input strings. It is true that a polynomial time algorithm must be polynomial time on average as well, but the converse need not be true.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::RP]] (randomized polynomial time) || allows use of random bits. In polynomial time, the algorithm returns a &#039;&#039;Yes&#039;&#039; or &#039;&#039;Maybe&#039;&#039; with &#039;&#039;Yes&#039;&#039; indicating that the string is definitely in the language. Probability of saying &#039;&#039;Maybe&#039;&#039; if the string is in the language is bounded away from 1. || [[RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-RP]] || complement of a language in RP. || [[co-RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|co-RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::ZPP]] (zero-error probabilistic polynomial time) || intersection of RP and co-RP || || || {{intermediate complexity classes|P|ZPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::BPP]] (bounded-error probabilistic polynomial time)|| allows use of random bits, probability of errors both ways. || [[BPP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PP]] (probabilistic polynomial time) || error rates are allowed to come close to half. || [[PP contains P]] || || {{intermediate complexity classes|P|PP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP]] (nondeterministic polynomial time) || allows coming up magically with a string that helps provide &amp;quot;proof&amp;quot; || [[NP contains P]] || [[P equals NP conjecture]]. Separation is widely believed, i.e., it is believed that P is not equal to NP. || {{intermediate complexity classes|P|NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-NP]] || complement of a language in NP. || [[co-NP contains P]] || equivalent to [[P equals NP conjecture]] || {{intermediate complexity classes|P|co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP intersect co-NP]] || the language is both in NP and co-NP || [[NP intersect co-NP contains P]] || Unknown, separation plausible but unclear. || {{intermediate complexity classes|P|NP intersect co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P]] || || || || {{intermediate complexity classes|P|Sigma2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Pi2P]] || || || || {{intermediate complexity classes|P|Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Delta2P]] || || || || {{intermediate complexity classes|P|Delta2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PH]] (polynomial hierarchy) || || || ||{{intermediate complexity classes|P|PH}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PSPACE]] (polynomial space)|| algorithm that requires polynomial space to write on in addition to the read-only input. || || || {{intermediate complexity classes|P|PSPACE}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Quasipolynomial time]] (sometimes abbreviated QP, but that might be confused with quantum polynomial time) || time taken is exponential in a polynomial of the logarithm of the input length || || || {{intermediate complexity classes|P|Quasipolynomial time}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::SUBEXP]] (subexponential time) || || || || {{intermediate complexity classes|P|SUBEXP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::NL]] (nondeterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Can be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|NL|P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::L]] (deterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Must be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|L|P}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Property !! Satisfied? !! Proof !! Statement with symbols&lt;br /&gt;
|-&lt;br /&gt;
| [[satisfies property::self-complementary complexity class]] || Yes || [[P is self-complementary]] || If &amp;lt;math&amp;gt;L \in P&amp;lt;/math&amp;gt;, then the complement &amp;lt;math&amp;gt;L^c&amp;lt;/math&amp;gt;, defined as the set of strings &#039;&#039;not&#039;&#039; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, is also in &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| determined by almost everywhere || Yes || ? || If &amp;lt;math&amp;gt;L_1 \in P&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;L_2&amp;lt;/math&amp;gt; is another language such that &amp;lt;math&amp;gt;L_1 \setminus L_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;L_2 \setminus L_1&amp;lt;/math&amp;gt; are both finite sets of strings, then &amp;lt;math&amp;gt;L_2 \in P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=P&amp;diff=46</id>
		<title>P</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=P&amp;diff=46"/>
		<updated>2011-12-28T01:48:45Z</updated>

		<summary type="html">&lt;p&gt;Vipul: /* Loose definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
===Loose definition===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;polynomial time&#039;&#039;&#039; complexity class, denoted &#039;&#039;&#039;PTIME&#039;&#039;&#039; or &#039;&#039;&#039;P&#039;&#039;&#039;, is a [[deterministic time complexity class]] defined loosely as follows. A language is said to be in the polynomial time complexity class if there is a polynomial time algorithm for determining whether a string is in the language. Here, the &#039;&#039;polynomial&#039;&#039; is an &#039;&#039;upper bound&#039;&#039; on the time taken, it is in terms of the &#039;&#039;length&#039;&#039; of the string, it is a &#039;&#039;worst case&#039;&#039; measure (i.e., worst case over all possible strings of the length), and we are interested in the &#039;&#039;asymptotic&#039;&#039; behavior for sufficiently large strings.&lt;br /&gt;
&lt;br /&gt;
===Formal definitions===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! No. !! Shorthand !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| 1 || single tape Turing machine || there exists a [[Turing machine]] using a single tape for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || multiple tape Turing machine || there exists a [[Turing machine]] with access to finitely many read/write tapes, including one for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || machine with log-time random access || there exists a program that can perform random access on a read/write memory in time logarithmic to the amount of memory used, &#039;&#039;and&#039;&#039; the program accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Loosely speaking, a language is in P if there is a polynomial time algorithm for recognition of the language. &lt;br /&gt;
==Key features==&lt;br /&gt;
&lt;br /&gt;
===Robustness based on complexity-theoretic Church-Turing thesis===&lt;br /&gt;
&lt;br /&gt;
The [[complexity-theoretic Church-Turing thesis]] states the notion of &#039;&#039;polynomial time&#039;&#039; is robust and does not change based on the nature of the machine, as long as we are dealing with &#039;&#039;deterministic&#039;&#039; machines, and we do not have access to random oracles or quantum computing. &lt;br /&gt;
&lt;br /&gt;
However, the &#039;&#039;degree&#039;&#039; of the polynomial that can be achieved does depend on the machine specifications (so some algorithms may be much faster with log-time random access than with sequential access as for the tapes in a Turing machine). There may be an algorithm on one kind of machine that takes time &amp;lt;math&amp;gt;O(N\log N)&amp;lt;/math&amp;gt; but on another machine takes time &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; is the length of the string.&lt;br /&gt;
&lt;br /&gt;
===Independence of algorithm from length of the string===&lt;br /&gt;
&lt;br /&gt;
The Turing machine, or more generally the program or algorithm used to determine whether a string is in the language, is &#039;&#039;independent&#039;&#039; of the length of the string. (Internally, it may make cases based on the length of the string, but that&#039;s a different matter). A related complexity class where the algorithm can take polynomial-sized advice based on the length of the string is termed [[P/poly]].&lt;br /&gt;
&lt;br /&gt;
===Asymptotic nature===&lt;br /&gt;
&lt;br /&gt;
The definition of the complexity class depends only on the asymptotic nature of the time taken as a function of the length of the string. In particular, if two languages have cofinite intersection (i.e., they are the same except for finitely many strings in each language that is not in the other) then one is in P if and only if the other is in P.&lt;br /&gt;
&lt;br /&gt;
===Worst case rather than average case===&lt;br /&gt;
&lt;br /&gt;
{{further|[[Worst case versus average case]]}}&lt;br /&gt;
&lt;br /&gt;
As for most complexity classes, the definition of polynomial time must take into account the &#039;&#039;worst case&#039;&#039; time taken among possible input strings, including both the strings that are in the language and the strings that are not in the language. We are not trying to compute the &#039;&#039;average&#039;&#039; time taken among all possible input strings. It is true that a polynomial time algorithm must be polynomial time on average as well, but the converse need not be true.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::RP]] (randomized polynomial time) || allows use of random bits. In polynomial time, the algorithm returns a &#039;&#039;Yes&#039;&#039; or &#039;&#039;Maybe&#039;&#039; with &#039;&#039;Yes&#039;&#039; indicating that the string is definitely in the language. Probability of saying &#039;&#039;Maybe&#039;&#039; if the string is in the language is bounded away from 1. || [[RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-RP]] || complement of a language in RP. || [[co-RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|co-RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::ZPP]] (zero-error probabilistic polynomial time) || intersection of RP and co-RP || || || {{intermediate complexity classes|P|ZPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::BPP]] (bounded-error probabilistic polynomial time)|| allows use of random bits, probability of errors both ways. || [[BPP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PP]] (probabilistic polynomial time) || error rates are allowed to come close to half. || [[PP contains P]] || || {{intermediate complexity classes|P|PP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP]] (nondeterministic polynomial time) || allows coming up magically with a string that helps provide &amp;quot;proof&amp;quot; || [[NP contains P]] || [[P equals NP conjecture]]. Separation is widely believed, i.e., it is believed that P is not equal to NP. || {{intermediate complexity classes|P|NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-NP]] || complement of a language in NP. || [[co-NP contains P]] || equivalent to [[P equals NP conjecture]] || {{intermediate complexity classes|P|co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP intersect co-NP]] || the language is both in NP and co-NP || [[NP intersect co-NP contains P]] || Unknown, separation plausible but unclear. || {{intermediate complexity classes|P|NP intersect co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P]] || || || || {{intermediate complexity classes|P|Sigma2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Pi2P]] || || || || {{intermediate complexity classes|P|Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Delta2P]] || || || || {{intermediate complexity classes|P|Delta2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PH]] (polynomial hierarchy) || || || ||{{intermediate complexity classes|P|PH}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PSPACE]] (polynomial space)|| algorithm that requires polynomial space to write on in addition to the read-only input. || || || {{intermediate complexity classes|P|PSPACE}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Quasipolynomial time]] (sometimes abbreviated QP, but that might be confused with quantum polynomial time) || time taken is exponential in a polynomial of the logarithm of the input length || || || {{intermediate complexity classes|P|Quasipolynomial time}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::SUBEXP]] (subexponential time) || || || || {{intermediate complexity classes|P|SUBEXP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::NL]] (nondeterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Can be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|NL|P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::L]] (deterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Must be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|L|P}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Property !! Satisfied? !! Proof !! Statement with symbols&lt;br /&gt;
|-&lt;br /&gt;
| [[satisfies property::self-complementary complexity class]] || Yes || [[P is self-complementary]] || If &amp;lt;math&amp;gt;L \in P&amp;lt;/math&amp;gt;, then the complement &amp;lt;math&amp;gt;L^c&amp;lt;/math&amp;gt;, defined as the set of strings &#039;&#039;not&#039;&#039; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, is also in &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| determined by almost everywhere || Yes || ? || If &amp;lt;math&amp;gt;L_1 \in P&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;L_2&amp;lt;/math&amp;gt; is another language such that &amp;lt;math&amp;gt;L_1 \setminus L_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;L_2 \setminus L_1&amp;lt;/math&amp;gt; are both finite sets of strings, then &amp;lt;math&amp;gt;L_2 \in P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=P&amp;diff=45</id>
		<title>P</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=P&amp;diff=45"/>
		<updated>2011-12-28T01:48:15Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
===Loose definition===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;polynomial time&#039;&#039;&#039; complexity class, denoted &#039;&#039;&#039;PTIME&#039;&#039;&#039; or &#039;&#039;&#039;P&#039;&#039;&#039;, is a [[time complexity class]] defined loosely as follows. A language is said to be in the polynomial time complexity class if there is a polynomial time algorithm for determining whether a string is in the language. Here, the &#039;&#039;polynomial&#039;&#039; is an &#039;&#039;upper bound&#039;&#039; on the time taken, it is in terms of the &#039;&#039;length&#039;&#039; of the string, it is a &#039;&#039;worst case&#039;&#039; measure (i.e., worst case over all possible strings of the length), and we are interested in the &#039;&#039;asymptotic&#039;&#039; behavior for sufficiently large strings.&lt;br /&gt;
&lt;br /&gt;
===Formal definitions===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! No. !! Shorthand !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| 1 || single tape Turing machine || there exists a [[Turing machine]] using a single tape for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || multiple tape Turing machine || there exists a [[Turing machine]] with access to finitely many read/write tapes, including one for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || machine with log-time random access || there exists a program that can perform random access on a read/write memory in time logarithmic to the amount of memory used, &#039;&#039;and&#039;&#039; the program accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Loosely speaking, a language is in P if there is a polynomial time algorithm for recognition of the language. &lt;br /&gt;
==Key features==&lt;br /&gt;
&lt;br /&gt;
===Robustness based on complexity-theoretic Church-Turing thesis===&lt;br /&gt;
&lt;br /&gt;
The [[complexity-theoretic Church-Turing thesis]] states the notion of &#039;&#039;polynomial time&#039;&#039; is robust and does not change based on the nature of the machine, as long as we are dealing with &#039;&#039;deterministic&#039;&#039; machines, and we do not have access to random oracles or quantum computing. &lt;br /&gt;
&lt;br /&gt;
However, the &#039;&#039;degree&#039;&#039; of the polynomial that can be achieved does depend on the machine specifications (so some algorithms may be much faster with log-time random access than with sequential access as for the tapes in a Turing machine). There may be an algorithm on one kind of machine that takes time &amp;lt;math&amp;gt;O(N\log N)&amp;lt;/math&amp;gt; but on another machine takes time &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; is the length of the string.&lt;br /&gt;
&lt;br /&gt;
===Independence of algorithm from length of the string===&lt;br /&gt;
&lt;br /&gt;
The Turing machine, or more generally the program or algorithm used to determine whether a string is in the language, is &#039;&#039;independent&#039;&#039; of the length of the string. (Internally, it may make cases based on the length of the string, but that&#039;s a different matter). A related complexity class where the algorithm can take polynomial-sized advice based on the length of the string is termed [[P/poly]].&lt;br /&gt;
&lt;br /&gt;
===Asymptotic nature===&lt;br /&gt;
&lt;br /&gt;
The definition of the complexity class depends only on the asymptotic nature of the time taken as a function of the length of the string. In particular, if two languages have cofinite intersection (i.e., they are the same except for finitely many strings in each language that is not in the other) then one is in P if and only if the other is in P.&lt;br /&gt;
&lt;br /&gt;
===Worst case rather than average case===&lt;br /&gt;
&lt;br /&gt;
{{further|[[Worst case versus average case]]}}&lt;br /&gt;
&lt;br /&gt;
As for most complexity classes, the definition of polynomial time must take into account the &#039;&#039;worst case&#039;&#039; time taken among possible input strings, including both the strings that are in the language and the strings that are not in the language. We are not trying to compute the &#039;&#039;average&#039;&#039; time taken among all possible input strings. It is true that a polynomial time algorithm must be polynomial time on average as well, but the converse need not be true.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::RP]] (randomized polynomial time) || allows use of random bits. In polynomial time, the algorithm returns a &#039;&#039;Yes&#039;&#039; or &#039;&#039;Maybe&#039;&#039; with &#039;&#039;Yes&#039;&#039; indicating that the string is definitely in the language. Probability of saying &#039;&#039;Maybe&#039;&#039; if the string is in the language is bounded away from 1. || [[RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-RP]] || complement of a language in RP. || [[co-RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|co-RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::ZPP]] (zero-error probabilistic polynomial time) || intersection of RP and co-RP || || || {{intermediate complexity classes|P|ZPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::BPP]] (bounded-error probabilistic polynomial time)|| allows use of random bits, probability of errors both ways. || [[BPP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PP]] (probabilistic polynomial time) || error rates are allowed to come close to half. || [[PP contains P]] || || {{intermediate complexity classes|P|PP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP]] (nondeterministic polynomial time) || allows coming up magically with a string that helps provide &amp;quot;proof&amp;quot; || [[NP contains P]] || [[P equals NP conjecture]]. Separation is widely believed, i.e., it is believed that P is not equal to NP. || {{intermediate complexity classes|P|NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-NP]] || complement of a language in NP. || [[co-NP contains P]] || equivalent to [[P equals NP conjecture]] || {{intermediate complexity classes|P|co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP intersect co-NP]] || the language is both in NP and co-NP || [[NP intersect co-NP contains P]] || Unknown, separation plausible but unclear. || {{intermediate complexity classes|P|NP intersect co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P]] || || || || {{intermediate complexity classes|P|Sigma2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Pi2P]] || || || || {{intermediate complexity classes|P|Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Delta2P]] || || || || {{intermediate complexity classes|P|Delta2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PH]] (polynomial hierarchy) || || || ||{{intermediate complexity classes|P|PH}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PSPACE]] (polynomial space)|| algorithm that requires polynomial space to write on in addition to the read-only input. || || || {{intermediate complexity classes|P|PSPACE}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Quasipolynomial time]] (sometimes abbreviated QP, but that might be confused with quantum polynomial time) || time taken is exponential in a polynomial of the logarithm of the input length || || || {{intermediate complexity classes|P|Quasipolynomial time}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::SUBEXP]] (subexponential time) || || || || {{intermediate complexity classes|P|SUBEXP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::NL]] (nondeterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Can be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|NL|P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::L]] (deterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Must be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|L|P}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Property !! Satisfied? !! Proof !! Statement with symbols&lt;br /&gt;
|-&lt;br /&gt;
| [[satisfies property::self-complementary complexity class]] || Yes || [[P is self-complementary]] || If &amp;lt;math&amp;gt;L \in P&amp;lt;/math&amp;gt;, then the complement &amp;lt;math&amp;gt;L^c&amp;lt;/math&amp;gt;, defined as the set of strings &#039;&#039;not&#039;&#039; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, is also in &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| determined by almost everywhere || Yes || ? || If &amp;lt;math&amp;gt;L_1 \in P&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;L_2&amp;lt;/math&amp;gt; is another language such that &amp;lt;math&amp;gt;L_1 \setminus L_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;L_2 \setminus L_1&amp;lt;/math&amp;gt; are both finite sets of strings, then &amp;lt;math&amp;gt;L_2 \in P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Template:Decision_complexity_class&amp;diff=44</id>
		<title>Template:Decision complexity class</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Template:Decision_complexity_class&amp;diff=44"/>
		<updated>2011-12-28T01:45:17Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{quotation|This article defines a [[decision complexity class]], i.e., a complexity class for decision problems. This means that given any language, the language is either a member of the decision complexity class or it is not a member of the decision complexity class.&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; [[:Category:Complexity classes|View a list of complexity classes]]}}&amp;lt;includeonly&amp;gt;[[Category:Decision complexity classes]][[Page class::Term| ]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Template:Complexity_class&amp;diff=43</id>
		<title>Template:Complexity class</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Template:Complexity_class&amp;diff=43"/>
		<updated>2011-12-28T01:43:58Z</updated>

		<summary type="html">&lt;p&gt;Vipul: moved Template:Complexity class to Template:Decision complexity class&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Decision complexity class]]&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Template:Decision_complexity_class&amp;diff=42</id>
		<title>Template:Decision complexity class</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Template:Decision_complexity_class&amp;diff=42"/>
		<updated>2011-12-28T01:43:58Z</updated>

		<summary type="html">&lt;p&gt;Vipul: moved Template:Complexity class to Template:Decision complexity class&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{quotation|This article defines a [[complexity class]]. &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; [[:Category:Complexity classes|View a list of complexity classes]]}}&amp;lt;includeonly&amp;gt;[[Category:Complexity classes]][[Page class::Term| ]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Complexity:Copyrights&amp;diff=41</id>
		<title>Complexity:Copyrights</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Complexity:Copyrights&amp;diff=41"/>
		<updated>2011-12-28T01:39:03Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;This is a common copyright notice to all subject wikis.  ==General license information==  All content is put up under the [http://creativecommons.org/licenses/by-sa/3.0/ Creative...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a common copyright notice to all subject wikis.&lt;br /&gt;
&lt;br /&gt;
==General license information==&lt;br /&gt;
&lt;br /&gt;
All content is put up under the [http://creativecommons.org/licenses/by-sa/3.0/ Creative Commons Attribute Share-Alike 3.0 license (unported)] (shorthand: CC-by-SA). Read the [http://creativehttp://ref.subwiki.org/w/skins/common/images/button_media.pngcommons.org/licenses/by-sa/3.0/legalcode full legal code here].&lt;br /&gt;
&lt;br /&gt;
===Exceptions===&lt;br /&gt;
&lt;br /&gt;
The software engine that runs the wiki is MediaWiki, and this software is licensed under the GNU General Public License, which is distinct from and currently incompatible with the Creative Commons license. Similarly, some of the extensions to the software engine are licensed by their developers using the GPL, which is incompatible with Creative Commons licenses.&lt;br /&gt;
&lt;br /&gt;
More information on the version of MediaWiki and extensions: [[Special:Version]].&lt;br /&gt;
&lt;br /&gt;
In addition, some templates may have been copied or adapted from Wikipedia or other wiki-based websites that use licenses other than Creative Commons licenses. Wikipedia uses the GNU Free Documentation License (GFDL) that, as of now, is incompatible with CC licenses. In such cases, it is clearly indicated on the page that it is licensed differently.&lt;br /&gt;
&lt;br /&gt;
===Short description of the license===&lt;br /&gt;
&lt;br /&gt;
The CC-by-SA license has the following features:&lt;br /&gt;
&lt;br /&gt;
# Content can be used and reused for any purposes, commercial or noncommercial.&lt;br /&gt;
# Any public use or reuse of the material requires attribution of the original source (for attribution formats, see later in the document).&lt;br /&gt;
# In case of adaptation or creation of derivative works, the newly created works must also be licensed under the same license (CC-by-SA) unless the creator of the derivative work takes &#039;&#039;explicit&#039;&#039; permission from the creator of the original work.&lt;br /&gt;
&lt;br /&gt;
===Fair use and other rights===&lt;br /&gt;
&lt;br /&gt;
The license cannot and does not limit fair use rights. Fair use may include quoting or copying select passages for the purposes of criticism and review.&lt;br /&gt;
&lt;br /&gt;
The license also cannot limit the use of data or information contained in the content on subject wikis. This means that anybody can use or reuse the facts or knowledge they gain from the subject wiki in any way they want.&lt;br /&gt;
&lt;br /&gt;
==Applicability of license to the subject wiki==&lt;br /&gt;
&lt;br /&gt;
===Examples of personal use that do not necessitate use of the license terms===&lt;br /&gt;
&lt;br /&gt;
* Saving, making copies, or taking printouts of pages on the subject wiki, as long as these copies are meant for personal use and are not to be distributed to others.&lt;br /&gt;
* Learning facts from the subject wikis and using those facts as part of instruction or research.&lt;br /&gt;
* Providing links to pages on the subject wikis.&lt;br /&gt;
* Quoting short passages from the subject wiki in a criticism or review (it is preferable, though not legally enforceable, that a link to the original content being reviewed be provided).&lt;br /&gt;
&lt;br /&gt;
===Examples of personal use that necessitate use of the license terms===&lt;br /&gt;
&lt;br /&gt;
* Creating a mirror website by exporting pages or content in bulk: In this case, the mirror website must release the mirrored content under the same license terms and &#039;&#039;also&#039;&#039; attribute the original source with a link. Attribution formats are discussed below.&lt;br /&gt;
* Giving handouts of pages or collections of pages to a group of people, such as students in a course: In this case, the handouts should be accompanied by an attribution that makes clear both the source and the original license terms, as well as a link to the Uniform Resource Identifier (URI) of the subject wiki.&lt;br /&gt;
&lt;br /&gt;
Attribution formats:&lt;br /&gt;
&lt;br /&gt;
* For websites: &#039;&#039;This content is from [{{fullurl:Main Page}} {{SITENAME}}]&#039;&#039; or &#039;&#039;This content is from [{{fullurl:Main Page}} {{fullsitetitle}}]&#039;&#039;. Preferably, also a link to the specific pages (if any) used. The language of the attribution may be modified somewhat to indicate whether the content has been used as such, or whether changes have been made.&lt;br /&gt;
* For print materials: &#039;&#039;This content is from {{SITENAME}}. The site URL is http://{{SITENAME}}.subwiki.org&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Attribution of individuals who have contributed content to the subject wiki entries is &#039;&#039;not&#039;&#039; necessary. (However, this list of individuals can be tracked down, as discussed in the next section).&lt;br /&gt;
&lt;br /&gt;
==Uses not within the ambit of the license or fair use rights==&lt;br /&gt;
&lt;br /&gt;
Those who have contributed all the content to a particular subject wiki entry can republish the same content anywhere else &#039;&#039;without restriction&#039;&#039; and can also release the content elsewhere under a different license, since they own the full copyright to their content.&lt;br /&gt;
&lt;br /&gt;
To use the content on the wiki in a manner that is outside the terms of the license or beyond fair use rights, the individuals who have contributed that particular content need to be contacted. For any particular page, this information can be accessed using the history tab of the page. The users who have made edits to the page are the ones who need to be contacted.&lt;br /&gt;
&lt;br /&gt;
In case of difficulty doing this, please contact vipul.wikis@gmail.com or vipul@math.uchicago.edu for more information.&lt;br /&gt;
&lt;br /&gt;
==Copyright violations==&lt;br /&gt;
&lt;br /&gt;
All users using subject wikis are requested not to violate copyright of other authors or publishers. This includes providing links that may aid and abet copyright violation. Examples of things that may be considered copyright violation:&lt;br /&gt;
&lt;br /&gt;
* Putting up links to personal copies of restricted-access journal articles acquired through a personal or library subscription: This usually goes against the Terms of Service of the subscription. The exception is when the content of the articles is out of copyright.&lt;br /&gt;
* Giving links to personal copies, or copies on filesharing systems, of books that are under copyright and where either owning or sharing a copy in that manner is against the terms of copyright.&lt;br /&gt;
&lt;br /&gt;
In case copyright violations are detected, please email vipul.wikis@gmail.com and vipul@math.uchicago.edu to have the matter looked into immediately.&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=ZPP&amp;diff=40</id>
		<title>ZPP</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=ZPP&amp;diff=40"/>
		<updated>2011-12-27T21:02:14Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{complexity class}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;zero-error probabilistic polynomial time&#039;&#039;&#039; complexity class, abbreviated &#039;&#039;&#039;ZPP&#039;&#039;&#039;, is defined as follows. A language &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is in ZPP if there exists a [[Turing machine]] that has access to a random oracle and runs in polynomial time and has one of three outputs: &#039;&#039;Yes&#039;&#039;, &#039;&#039;No&#039;&#039;, and &#039;&#039;Undecided&#039;&#039;. If the output is &#039;&#039;Yes&#039;&#039;, the string is in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;. If the output is &#039;&#039;No&#039;&#039;, the string is not in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;. if the output is &#039;&#039;Undecided&#039;&#039;, then the string may or may not be in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;. Further, for any fixed choice of input string, the probability of returning &#039;&#039;Maybe&#039;&#039; is bounded from above by a number strictly less than 1.&lt;br /&gt;
&lt;br /&gt;
This complexity class can also be defined as the intersection of the [[RP]] and [[co-RP]] complexity classes.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[contained in::RP]] (randomized polynomial time) || Unlike ZPP, there is no definitive &#039;&#039;No&#039;&#039; answer type here but only a &#039;&#039;Yes&#039;&#039; and a &#039;&#039;Maybe&#039;&#039; || || || {{intermediate complexity classes|ZPP|RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[contained in::co-RP]] || Unlike ZPP, there is no definitive &#039;&#039;Yes&#039;&#039; answer type here but only a &#039;&#039;No&#039;&#039; and a &#039;&#039;Maybe&#039;&#039; || || || {{intermediate complexity classes|ZPP|co-RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[contained in::BPP]] (bounded-error probabilistic polynomial time) || There are only &#039;&#039;maybe yes&#039;&#039; and &#039;&#039;maybe no&#039;&#039; answers, no definitive answers, but bounds on error rates || || || {{intermediate complexity classes|ZPP|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[contained in::PP]] (probabilistic polynomial time) || Like BPP, weaker bounds on error rates || || || {{intermediate complexity classes|ZPP|PP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[contained in::NP intersect co-NP]] || || || || {{intermediate complexity classes|ZPP|NP intersect co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[contained in::NP]] || || || || &lt;br /&gt;
|-&lt;br /&gt;
| [[contained in::co-NP]] || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[contains::P]] || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=ZPP&amp;diff=39</id>
		<title>ZPP</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=ZPP&amp;diff=39"/>
		<updated>2011-12-27T20:56:01Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;{{complexity class}}  ==Definition==  The &amp;#039;&amp;#039;&amp;#039;zero-error probabilistic polynomial time&amp;#039;&amp;#039;&amp;#039; complexity class, abbreviated &amp;#039;&amp;#039;&amp;#039;ZPP&amp;#039;&amp;#039;&amp;#039;, is defined as follows. A language &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{complexity class}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;zero-error probabilistic polynomial time&#039;&#039;&#039; complexity class, abbreviated &#039;&#039;&#039;ZPP&#039;&#039;&#039;, is defined as follows. A language &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is in ZPP if there exists a [[Turing machine]] that has access to a random oracle and runs in polynomial time and has one of three outputs: &#039;&#039;Yes&#039;&#039;, &#039;&#039;No&#039;&#039;, and &#039;&#039;Undecided&#039;&#039;. If the output is &#039;&#039;Yes&#039;&#039;, the string is in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;. If the output is &#039;&#039;No&#039;&#039;, the string is not in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;. if the output is &#039;&#039;Undecided&#039;&#039;, then the string may or may not be in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;. Further, for any fixed choice of input string, the probability of returning &#039;&#039;Maybe&#039;&#039; is bounded from above by a number strictly less than 1.&lt;br /&gt;
&lt;br /&gt;
This complexity class can also be defined as the intersection of the [[RP]] and [[co-RP]] complexity classes.&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=P&amp;diff=38</id>
		<title>P</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=P&amp;diff=38"/>
		<updated>2011-12-27T20:52:01Z</updated>

		<summary type="html">&lt;p&gt;Vipul: /* Larger complexity classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;polynomial time&#039;&#039;&#039; complexity class, denoted &#039;&#039;&#039;PTIME&#039;&#039;&#039; or &#039;&#039;&#039;P&#039;&#039;&#039;, is defined as follows. A language &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is said to be in the polynomial time complexity class if it satisfies the following equivalent conditions:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! No. !! Shorthand !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| 1 || single tape Turing machine || there exists a [[Turing machine]] using a single tape for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || multiple tape Turing machine || there exists a [[Turing machine]] with access to finitely many read/write tapes, including one for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || machine with log-time random access || there exists a program that can perform random access on a read/write memory in time logarithmic to the amount of memory used, &#039;&#039;and&#039;&#039; the program accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Loosely speaking, a language is in P if there is a polynomial time algorithm for recognition of the language. &lt;br /&gt;
==Key features==&lt;br /&gt;
&lt;br /&gt;
===Robustness based on complexity-theoretic Church-Turing thesis===&lt;br /&gt;
&lt;br /&gt;
The [[complexity-theoretic Church-Turing thesis]] states the notion of &#039;&#039;polynomial time&#039;&#039; is robust and does not change based on the nature of the machine, as long as we are dealing with &#039;&#039;deterministic&#039;&#039; machines, and we do not have access to random oracles or quantum computing. &lt;br /&gt;
&lt;br /&gt;
However, the &#039;&#039;degree&#039;&#039; of the polynomial that can be achieved does depend on the machine specifications (so some algorithms may be much faster with log-time random access than with sequential access as for the tapes in a Turing machine). There may be an algorithm on one kind of machine that takes time &amp;lt;math&amp;gt;O(N\log N)&amp;lt;/math&amp;gt; but on another machine takes time &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; is the length of the string.&lt;br /&gt;
&lt;br /&gt;
===Independence of algorithm from length of the string===&lt;br /&gt;
&lt;br /&gt;
The Turing machine, or more generally the program or algorithm used to determine whether a string is in the language, is &#039;&#039;independent&#039;&#039; of the length of the string. (Internally, it may make cases based on the length of the string, but that&#039;s a different matter). A related complexity class where the algorithm can take polynomial-sized advice based on the length of the string is termed [[P/poly]].&lt;br /&gt;
&lt;br /&gt;
===Asymptotic nature===&lt;br /&gt;
&lt;br /&gt;
The definition of the complexity class depends only on the asymptotic nature of the time taken as a function of the length of the string. In particular, if two languages have cofinite intersection (i.e., they are the same except for finitely many strings in each language that is not in the other) then one is in P if and only if the other is in P.&lt;br /&gt;
&lt;br /&gt;
===Worst case rather than average case===&lt;br /&gt;
&lt;br /&gt;
{{further|[[Worst case versus average case]]}}&lt;br /&gt;
&lt;br /&gt;
As for most complexity classes, the definition of polynomial time must take into account the &#039;&#039;worst case&#039;&#039; time taken among possible input strings, including both the strings that are in the language and the strings that are not in the language. We are not trying to compute the &#039;&#039;average&#039;&#039; time taken among all possible input strings. It is true that a polynomial time algorithm must be polynomial time on average as well, but the converse need not be true.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::RP]] (randomized polynomial time) || allows use of random bits. In polynomial time, the algorithm returns a &#039;&#039;Yes&#039;&#039; or &#039;&#039;Maybe&#039;&#039; with &#039;&#039;Yes&#039;&#039; indicating that the string is definitely in the language. Probability of saying &#039;&#039;Maybe&#039;&#039; if the string is in the language is bounded away from 1. || [[RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-RP]] || complement of a language in RP. || [[co-RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|co-RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::ZPP]] (zero-error probabilistic polynomial time) || intersection of RP and co-RP || || || {{intermediate complexity classes|P|ZPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::BPP]] (bounded-error probabilistic polynomial time)|| allows use of random bits, probability of errors both ways. || [[BPP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PP]] (probabilistic polynomial time) || error rates are allowed to come close to half. || [[PP contains P]] || || {{intermediate complexity classes|P|PP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP]] (nondeterministic polynomial time) || allows coming up magically with a string that helps provide &amp;quot;proof&amp;quot; || [[NP contains P]] || [[P equals NP conjecture]]. Separation is widely believed, i.e., it is believed that P is not equal to NP. || {{intermediate complexity classes|P|NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-NP]] || complement of a language in NP. || [[co-NP contains P]] || equivalent to [[P equals NP conjecture]] || {{intermediate complexity classes|P|co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP intersect co-NP]] || the language is both in NP and co-NP || [[NP intersect co-NP contains P]] || Unknown, separation plausible but unclear. || {{intermediate complexity classes|P|NP intersect co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P]] || || || || {{intermediate complexity classes|P|Sigma2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Pi2P]] || || || || {{intermediate complexity classes|P|Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Delta2P]] || || || || {{intermediate complexity classes|P|Delta2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PH]] (polynomial hierarchy) || || || ||{{intermediate complexity classes|P|PH}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PSPACE]] (polynomial space)|| algorithm that requires polynomial space to write on in addition to the read-only input. || || || {{intermediate complexity classes|P|PSPACE}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Quasipolynomial time]] (sometimes abbreviated QP, but that might be confused with quantum polynomial time) || time taken is exponential in a polynomial of the logarithm of the input length || || || {{intermediate complexity classes|P|Quasipolynomial time}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::SUBEXP]] (subexponential time) || || || || {{intermediate complexity classes|P|SUBEXP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::NL]] (nondeterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Can be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|NL|P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::L]] (deterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Must be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|L|P}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Property !! Satisfied? !! Proof !! Statement with symbols&lt;br /&gt;
|-&lt;br /&gt;
| [[satisfies property::self-complementary complexity class]] || Yes || [[P is self-complementary]] || If &amp;lt;math&amp;gt;L \in P&amp;lt;/math&amp;gt;, then the complement &amp;lt;math&amp;gt;L^c&amp;lt;/math&amp;gt;, defined as the set of strings &#039;&#039;not&#039;&#039; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, is also in &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| determined by almost everywhere || Yes || ? || If &amp;lt;math&amp;gt;L_1 \in P&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;L_2&amp;lt;/math&amp;gt; is another language such that &amp;lt;math&amp;gt;L_1 \setminus L_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;L_2 \setminus L_1&amp;lt;/math&amp;gt; are both finite sets of strings, then &amp;lt;math&amp;gt;L_2 \in P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Template:Further&amp;diff=37</id>
		<title>Template:Further</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Template:Further&amp;diff=37"/>
		<updated>2011-12-27T20:50:36Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;&amp;lt;tt&amp;gt;Further information: {{{1}}}&amp;lt;/tt&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;tt&amp;gt;Further information: {{{1}}}&amp;lt;/tt&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=P&amp;diff=36</id>
		<title>P</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=P&amp;diff=36"/>
		<updated>2011-12-27T20:50:20Z</updated>

		<summary type="html">&lt;p&gt;Vipul: /* Key features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;polynomial time&#039;&#039;&#039; complexity class, denoted &#039;&#039;&#039;PTIME&#039;&#039;&#039; or &#039;&#039;&#039;P&#039;&#039;&#039;, is defined as follows. A language &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is said to be in the polynomial time complexity class if it satisfies the following equivalent conditions:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! No. !! Shorthand !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| 1 || single tape Turing machine || there exists a [[Turing machine]] using a single tape for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || multiple tape Turing machine || there exists a [[Turing machine]] with access to finitely many read/write tapes, including one for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || machine with log-time random access || there exists a program that can perform random access on a read/write memory in time logarithmic to the amount of memory used, &#039;&#039;and&#039;&#039; the program accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Loosely speaking, a language is in P if there is a polynomial time algorithm for recognition of the language. &lt;br /&gt;
==Key features==&lt;br /&gt;
&lt;br /&gt;
===Robustness based on complexity-theoretic Church-Turing thesis===&lt;br /&gt;
&lt;br /&gt;
The [[complexity-theoretic Church-Turing thesis]] states the notion of &#039;&#039;polynomial time&#039;&#039; is robust and does not change based on the nature of the machine, as long as we are dealing with &#039;&#039;deterministic&#039;&#039; machines, and we do not have access to random oracles or quantum computing. &lt;br /&gt;
&lt;br /&gt;
However, the &#039;&#039;degree&#039;&#039; of the polynomial that can be achieved does depend on the machine specifications (so some algorithms may be much faster with log-time random access than with sequential access as for the tapes in a Turing machine). There may be an algorithm on one kind of machine that takes time &amp;lt;math&amp;gt;O(N\log N)&amp;lt;/math&amp;gt; but on another machine takes time &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; is the length of the string.&lt;br /&gt;
&lt;br /&gt;
===Independence of algorithm from length of the string===&lt;br /&gt;
&lt;br /&gt;
The Turing machine, or more generally the program or algorithm used to determine whether a string is in the language, is &#039;&#039;independent&#039;&#039; of the length of the string. (Internally, it may make cases based on the length of the string, but that&#039;s a different matter). A related complexity class where the algorithm can take polynomial-sized advice based on the length of the string is termed [[P/poly]].&lt;br /&gt;
&lt;br /&gt;
===Asymptotic nature===&lt;br /&gt;
&lt;br /&gt;
The definition of the complexity class depends only on the asymptotic nature of the time taken as a function of the length of the string. In particular, if two languages have cofinite intersection (i.e., they are the same except for finitely many strings in each language that is not in the other) then one is in P if and only if the other is in P.&lt;br /&gt;
&lt;br /&gt;
===Worst case rather than average case===&lt;br /&gt;
&lt;br /&gt;
{{further|[[Worst case versus average case]]}}&lt;br /&gt;
&lt;br /&gt;
As for most complexity classes, the definition of polynomial time must take into account the &#039;&#039;worst case&#039;&#039; time taken among possible input strings, including both the strings that are in the language and the strings that are not in the language. We are not trying to compute the &#039;&#039;average&#039;&#039; time taken among all possible input strings. It is true that a polynomial time algorithm must be polynomial time on average as well, but the converse need not be true.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::RP]] (randomized polynomial time) || allows use of random bits. In polynomial time, the algorithm returns a &#039;&#039;Yes&#039;&#039; or &#039;&#039;Maybe&#039;&#039; with &#039;&#039;Yes&#039;&#039; indicating that the string is definitely in the language. Probability of saying &#039;&#039;Maybe&#039;&#039; if the string is in the language is bounded away from 1. || [[RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-RP]] || complement of a language in RP. || [[co-RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|co-RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::BPP]] (bounded-error probabilistic polynomial time)|| allows use of random bits, probability of errors both ways. || [[BPP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PP]] (probabilistic polynomial time) || error rates are allowed to come close to half. || [[PP contains P]] || || {{intermediate complexity classes|P|PP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP]] (nondeterministic polynomial time) || allows coming up magically with a string that helps provide &amp;quot;proof&amp;quot; || [[NP contains P]] || [[P equals NP conjecture]]. Separation is widely believed, i.e., it is believed that P is not equal to NP. || {{intermediate complexity classes|P|NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-NP]] || complement of a language in NP. || [[co-NP contains P]] || equivalent to [[P equals NP conjecture]] || {{intermediate complexity classes|P|co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP intersect co-NP]] || the language is both in NP and co-NP || [[NP intersect co-NP contains P]] || Unknown, separation plausible but unclear. || {{intermediate complexity classes|P|NP intersect co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P]] || || || || {{intermediate complexity classes|P|Sigma2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Pi2P]] || || || || {{intermediate complexity classes|P|Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Delta2P]] || || || || {{intermediate complexity classes|P|Delta2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PH]] (polynomial hierarchy) || || || ||{{intermediate complexity classes|P|PH}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PSPACE]] (polynomial space)|| algorithm that requires polynomial space to write on in addition to the read-only input. || || || {{intermediate complexity classes|P|PSPACE}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Quasipolynomial time]] (sometimes abbreviated QP, but that might be confused with quantum polynomial time) || time taken is exponential in a polynomial of the logarithm of the input length || || || {{intermediate complexity classes|P|Quasipolynomial time}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::SUBEXP]] (subexponential time) || || || || {{intermediate complexity classes|P|SUBEXP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::NL]] (nondeterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Can be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|NL|P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::L]] (deterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Must be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|L|P}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Property !! Satisfied? !! Proof !! Statement with symbols&lt;br /&gt;
|-&lt;br /&gt;
| [[satisfies property::self-complementary complexity class]] || Yes || [[P is self-complementary]] || If &amp;lt;math&amp;gt;L \in P&amp;lt;/math&amp;gt;, then the complement &amp;lt;math&amp;gt;L^c&amp;lt;/math&amp;gt;, defined as the set of strings &#039;&#039;not&#039;&#039; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, is also in &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| determined by almost everywhere || Yes || ? || If &amp;lt;math&amp;gt;L_1 \in P&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;L_2&amp;lt;/math&amp;gt; is another language such that &amp;lt;math&amp;gt;L_1 \setminus L_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;L_2 \setminus L_1&amp;lt;/math&amp;gt; are both finite sets of strings, then &amp;lt;math&amp;gt;L_2 \in P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=RP&amp;diff=35</id>
		<title>RP</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=RP&amp;diff=35"/>
		<updated>2011-12-27T20:47:31Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;{{complexity class}}  ==Definition==  &amp;#039;&amp;#039;&amp;#039;RP&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;randomized polynomial time&amp;#039;&amp;#039;&amp;#039; is a complexity class that can loosely be described as a class of languages in which membership...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{complexity class}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RP&#039;&#039;&#039; or &#039;&#039;&#039;randomized polynomial time&#039;&#039;&#039; is a complexity class that can loosely be described as a class of languages in which membership can be decided using a randomized algorithm that runs in polynomial time, where a &#039;&#039;Yes&#039;&#039; answer for a given string always means that the string is in the language, and, for any string in the language, the probability that a &#039;&#039;No/Maybe&#039;&#039; answer would be returned &#039;&#039;for that string&#039;&#039; is bounded from above by a number strictly less than 1.&lt;br /&gt;
&lt;br /&gt;
There are three aspects to this:&lt;br /&gt;
&lt;br /&gt;
* The algorithm has access to a random oracle, that may provide up to polynomially many pure random bits that the algorithm can use.&lt;br /&gt;
* The probability of giving a wrong answer is measured as the probability &#039;&#039;over&#039;&#039; the choices of random bits but &#039;&#039;not&#039;&#039; over the choice of input strings. Rather, for input strings, we are still interested in the worst case probability.&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Template:Complexity_class_containment&amp;diff=34</id>
		<title>Template:Complexity class containment</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Template:Complexity_class_containment&amp;diff=34"/>
		<updated>2011-12-27T20:43:03Z</updated>

		<summary type="html">&lt;p&gt;Vipul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{quotation|This article gives the statement, and proof, of one complexity class being contained in another one. The smaller complexity class is [[fact about::{{{smaller}}}]][[uses class membership of::{{{smaller}}}| ]] and the larger complexity class is [[fact about::{{{larger}}}]][[proves class membership of::{{{larger}}}| ]].}}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=Template:Decision_complexity_class&amp;diff=33</id>
		<title>Template:Decision complexity class</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=Template:Decision_complexity_class&amp;diff=33"/>
		<updated>2011-12-27T20:38:50Z</updated>

		<summary type="html">&lt;p&gt;Vipul: Created page with &amp;quot;{{quotation|This article defines a complexity class. &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; View a list of complexity classes}}&amp;lt;includeonly&amp;gt;[[Category:Complexity...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{quotation|This article defines a [[complexity class]]. &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; [[:Category:Complexity classes|View a list of complexity classes]]}}&amp;lt;includeonly&amp;gt;[[Category:Complexity classes]][[Page class::Term| ]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=BPP&amp;diff=32</id>
		<title>BPP</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=BPP&amp;diff=32"/>
		<updated>2011-12-27T20:37:20Z</updated>

		<summary type="html">&lt;p&gt;Vipul: /* Smaller complexity classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{complexity class}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BPP&#039;&#039;&#039; or &#039;&#039;&#039;bounded-error probabilistic polynomial time&#039;&#039;&#039; is a complexity class that can loosely be described as the class of languages in which membership can be decided using a randomized algorithm that runs in polynomial time, with the probability of error either way bounded by a number less than &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Using &amp;lt;math&amp;gt;2/3&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;1/3&amp;lt;/math&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
More formally, a language &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is in BPP if there exist functions &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; growing polynomially in their inputs, such that for any string of length &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, the algorithm uses the string and a random string of length &amp;lt;math&amp;gt;f(n)&amp;lt;/math&amp;gt; to output, in time at most &amp;lt;math&amp;gt;g(n)&amp;lt;/math&amp;gt;, whether the string is in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, and the answer satisfies the following: For &#039;&#039;every&#039;&#039; choice of input string, less than &amp;lt;math&amp;gt;1/3&amp;lt;/math&amp;gt; of the possible random strings of length &amp;lt;math&amp;gt;f(n)&amp;lt;/math&amp;gt; give the wrong answer.&lt;br /&gt;
&lt;br /&gt;
Note that the probability is taken over the random string and &#039;&#039;not&#039;&#039; over the input string. For the input string, we are interested in the &#039;&#039;worst case&#039;&#039; probability, i.e., we would like a low error probability for &#039;&#039;all&#039;&#039; input strings.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PP]] || probabilistic polynomial time; like BPP but probability of giving the correct output is allowed to equal &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt; || [[PP contains BPP]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::P/poly]] || For any fixed input length, there is a polynomial sized advice string depending on the length, using which a polynomial time algorithm can be devised for all inputs of that length. || [[Adleman&#039;s theorem]] || Separated: [[P/poly contains undecidable languages]] || {{intermediate complexity classes|BPP|P/poly}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P]] || &amp;lt;math&amp;gt;\Sigma_2&amp;lt;/math&amp;gt; in the polynomial hierarchy || part of the [[Sipser-Lautemann theorem]] || open, but if true, would imply that [[NP]] is in [[P/poly]] and hence PH collapses to BPP || {{intermediate complexity classes|BPP|Sigma2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Pi2P]] || &amp;lt;math&amp;gt;\Pi_2&amp;lt;/math&amp;gt; in the polynomial hierarchy || part of the [[Sipser-Lautemann theorem]] || open, but if true, would imply that [[NP]] is in [[P/poly]] and hence PH collapses to BPP || {{intermediate complexity classes|BPP|Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P intersect Pi2P]] || &amp;lt;math&amp;gt;\Sigma_2P \cap \Pi_2P&amp;lt;/math&amp;gt; || [[Sipser-Lautemann theorem]] || open, but if true, would imply that [[NP]] is in [[P/poly]] and hence PH collapses to BPP || {{intermediate complexity classes|BPP|Sigma2P intersect Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PH]] || The union of the entire polynomial hierarchy || (via Sigma2P) || open || {{intermediate complexity classes|BPP|PH}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::RP]] || randomized polynomial time -- no false positives, but possible false negatives || [[RP is in BPP]] || open||{{intermediate complexity classes|RP|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::co-RP]] || randomized polynomial time -- no false negatives, but possible false positives || [[co-RP is in BPP]] || open || {{intermediate complexity classes|co-RP|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::P]] || deterministic polynomial time || [[P is in BPP]] || open -- see [[P equals BPP conjecture]] || {{intermediate complexity classes|P|BPP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Property !! Satisfied? !! Proof !! Statement with symbols&lt;br /&gt;
|-&lt;br /&gt;
| [[satisfies property::self-complementary complexity class]] || Yes || [[BPP is self-complementary]] || If &amp;lt;math&amp;gt;L \in BPP&amp;lt;/math&amp;gt;, then the complement &amp;lt;math&amp;gt;L^c&amp;lt;/math&amp;gt;, defined as the set of strings &#039;&#039;not&#039;&#039; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, is also in &amp;lt;math&amp;gt;BPP&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| determined by almost everywhere || Yes || ? ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=BPP&amp;diff=31</id>
		<title>BPP</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=BPP&amp;diff=31"/>
		<updated>2011-12-27T20:36:55Z</updated>

		<summary type="html">&lt;p&gt;Vipul: /* Smaller complexity classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{complexity class}}&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BPP&#039;&#039;&#039; or &#039;&#039;&#039;bounded-error probabilistic polynomial time&#039;&#039;&#039; is a complexity class that can loosely be described as the class of languages in which membership can be decided using a randomized algorithm that runs in polynomial time, with the probability of error either way bounded by a number less than &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Using &amp;lt;math&amp;gt;2/3&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;1/3&amp;lt;/math&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
More formally, a language &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is in BPP if there exist functions &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; growing polynomially in their inputs, such that for any string of length &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, the algorithm uses the string and a random string of length &amp;lt;math&amp;gt;f(n)&amp;lt;/math&amp;gt; to output, in time at most &amp;lt;math&amp;gt;g(n)&amp;lt;/math&amp;gt;, whether the string is in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, and the answer satisfies the following: For &#039;&#039;every&#039;&#039; choice of input string, less than &amp;lt;math&amp;gt;1/3&amp;lt;/math&amp;gt; of the possible random strings of length &amp;lt;math&amp;gt;f(n)&amp;lt;/math&amp;gt; give the wrong answer.&lt;br /&gt;
&lt;br /&gt;
Note that the probability is taken over the random string and &#039;&#039;not&#039;&#039; over the input string. For the input string, we are interested in the &#039;&#039;worst case&#039;&#039; probability, i.e., we would like a low error probability for &#039;&#039;all&#039;&#039; input strings.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PP]] || probabilistic polynomial time; like BPP but probability of giving the correct output is allowed to equal &amp;lt;math&amp;gt;1/2&amp;lt;/math&amp;gt; || [[PP contains BPP]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::P/poly]] || For any fixed input length, there is a polynomial sized advice string depending on the length, using which a polynomial time algorithm can be devised for all inputs of that length. || [[Adleman&#039;s theorem]] || Separated: [[P/poly contains undecidable languages]] || {{intermediate complexity classes|BPP|P/poly}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P]] || &amp;lt;math&amp;gt;\Sigma_2&amp;lt;/math&amp;gt; in the polynomial hierarchy || part of the [[Sipser-Lautemann theorem]] || open, but if true, would imply that [[NP]] is in [[P/poly]] and hence PH collapses to BPP || {{intermediate complexity classes|BPP|Sigma2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Pi2P]] || &amp;lt;math&amp;gt;\Pi_2&amp;lt;/math&amp;gt; in the polynomial hierarchy || part of the [[Sipser-Lautemann theorem]] || open, but if true, would imply that [[NP]] is in [[P/poly]] and hence PH collapses to BPP || {{intermediate complexity classes|BPP|Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P intersect Pi2P]] || &amp;lt;math&amp;gt;\Sigma_2P \cap \Pi_2P&amp;lt;/math&amp;gt; || [[Sipser-Lautemann theorem]] || open, but if true, would imply that [[NP]] is in [[P/poly]] and hence PH collapses to BPP || {{intermediate complexity classes|BPP|Sigma2P intersect Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PH]] || The union of the entire polynomial hierarchy || (via Sigma2P) || open || {{intermediate complexity classes|BPP|PH}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::RP]] || randomized polynomial time -- no false positives, but possible false negatives || [[RP is in BPP]] || open||{{intermediate complexity classes|RP|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::co-RP]] || randomized polynomial time -- no false negatives, but possible false positives || [[co-RP is in BPP]] || open || {{intermediate complexity classes|co-RP|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::P]] || deterministic polynomial time || [[P is in BPP]] || open -- see [[P equals BPP conjecture]] || {{intermediate complexity classes|P|BPP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Property !! Satisfied? !! Proof !! Statement with symbols&lt;br /&gt;
|-&lt;br /&gt;
| [[satisfies property::self-complementary complexity class]] || Yes || [[BPP is self-complementary]] || If &amp;lt;math&amp;gt;L \in BPP&amp;lt;/math&amp;gt;, then the complement &amp;lt;math&amp;gt;L^c&amp;lt;/math&amp;gt;, defined as the set of strings &#039;&#039;not&#039;&#039; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, is also in &amp;lt;math&amp;gt;BPP&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| determined by almost everywhere || Yes || ? ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=P&amp;diff=30</id>
		<title>P</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=P&amp;diff=30"/>
		<updated>2011-12-27T20:36:21Z</updated>

		<summary type="html">&lt;p&gt;Vipul: /* Smaller complexity classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;polynomial time&#039;&#039;&#039; complexity class, denoted &#039;&#039;&#039;PTIME&#039;&#039;&#039; or &#039;&#039;&#039;P&#039;&#039;&#039;, is defined as follows. A language &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is said to be in the polynomial time complexity class if it satisfies the following equivalent conditions:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! No. !! Shorthand !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| 1 || single tape Turing machine || there exists a [[Turing machine]] using a single tape for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || multiple tape Turing machine || there exists a [[Turing machine]] with access to finitely many read/write tapes, including one for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || machine with log-time random access || there exists a program that can perform random access on a read/write memory in time logarithmic to the amount of memory used, &#039;&#039;and&#039;&#039; the program accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Loosely speaking, a language is in P if there is a polynomial time algorithm for recognition of the language. &lt;br /&gt;
==Key features==&lt;br /&gt;
&lt;br /&gt;
===Robustness based on complexity-theoretic Church-Turing thesis===&lt;br /&gt;
&lt;br /&gt;
The [[complexity-theoretic Church-Turing thesis]] states the notion of &#039;&#039;polynomial time&#039;&#039; is robust and does not change based on the nature of the machine, as long as we are dealing with &#039;&#039;deterministic&#039;&#039; machines, and we do not have access to random oracles or quantum computing. &lt;br /&gt;
&lt;br /&gt;
However, the &#039;&#039;degree&#039;&#039; of the polynomial that can be achieved does depend on the machine specifications (so some algorithms may be much faster with log-time random access than with sequential access as for the tapes in a Turing machine). There may be an algorithm on one kind of machine that takes time &amp;lt;math&amp;gt;O(N\log N)&amp;lt;/math&amp;gt; but on another machine takes time &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; is the length of the string.&lt;br /&gt;
&lt;br /&gt;
===Independence of algorithm from length of the string===&lt;br /&gt;
&lt;br /&gt;
The Turing machine, or more generally the program or algorithm used to determine whether a string is in the language, is &#039;&#039;independent&#039;&#039; of the length of the string. (Internally, it may make cases based on the length of the string, but that&#039;s a different matter). A related complexity class where the algorithm can take polynomial-sized advice based on the length of the string is termed [[P/poly]].&lt;br /&gt;
&lt;br /&gt;
===Asymptotic nature===&lt;br /&gt;
&lt;br /&gt;
The definition of the complexity class depends only on the asymptotic nature of the time taken as a function of the length of the string. In particular, if two languages have cofinite intersection (i.e., they are the same except for finitely many strings in each language that is not in the other) then one is in P if and only if the other is in P.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::RP]] (randomized polynomial time) || allows use of random bits. In polynomial time, the algorithm returns a &#039;&#039;Yes&#039;&#039; or &#039;&#039;Maybe&#039;&#039; with &#039;&#039;Yes&#039;&#039; indicating that the string is definitely in the language. Probability of saying &#039;&#039;Maybe&#039;&#039; if the string is in the language is bounded away from 1. || [[RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-RP]] || complement of a language in RP. || [[co-RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|co-RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::BPP]] (bounded-error probabilistic polynomial time)|| allows use of random bits, probability of errors both ways. || [[BPP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PP]] (probabilistic polynomial time) || error rates are allowed to come close to half. || [[PP contains P]] || || {{intermediate complexity classes|P|PP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP]] (nondeterministic polynomial time) || allows coming up magically with a string that helps provide &amp;quot;proof&amp;quot; || [[NP contains P]] || [[P equals NP conjecture]]. Separation is widely believed, i.e., it is believed that P is not equal to NP. || {{intermediate complexity classes|P|NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-NP]] || complement of a language in NP. || [[co-NP contains P]] || equivalent to [[P equals NP conjecture]] || {{intermediate complexity classes|P|co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP intersect co-NP]] || the language is both in NP and co-NP || [[NP intersect co-NP contains P]] || Unknown, separation plausible but unclear. || {{intermediate complexity classes|P|NP intersect co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P]] || || || || {{intermediate complexity classes|P|Sigma2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Pi2P]] || || || || {{intermediate complexity classes|P|Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Delta2P]] || || || || {{intermediate complexity classes|P|Delta2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PH]] (polynomial hierarchy) || || || ||{{intermediate complexity classes|P|PH}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PSPACE]] (polynomial space)|| algorithm that requires polynomial space to write on in addition to the read-only input. || || || {{intermediate complexity classes|P|PSPACE}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Quasipolynomial time]] (sometimes abbreviated QP, but that might be confused with quantum polynomial time) || time taken is exponential in a polynomial of the logarithm of the input length || || || {{intermediate complexity classes|P|Quasipolynomial time}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::SUBEXP]] (subexponential time) || || || || {{intermediate complexity classes|P|SUBEXP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::NL]] (nondeterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Can be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|NL|P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::L]] (deterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Must be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|L|P}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Property !! Satisfied? !! Proof !! Statement with symbols&lt;br /&gt;
|-&lt;br /&gt;
| [[satisfies property::self-complementary complexity class]] || Yes || [[P is self-complementary]] || If &amp;lt;math&amp;gt;L \in P&amp;lt;/math&amp;gt;, then the complement &amp;lt;math&amp;gt;L^c&amp;lt;/math&amp;gt;, defined as the set of strings &#039;&#039;not&#039;&#039; in &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt;, is also in &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| determined by almost everywhere || Yes || ? || If &amp;lt;math&amp;gt;L_1 \in P&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;L_2&amp;lt;/math&amp;gt; is another language such that &amp;lt;math&amp;gt;L_1 \setminus L_2&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;L_2 \setminus L_1&amp;lt;/math&amp;gt; are both finite sets of strings, then &amp;lt;math&amp;gt;L_2 \in P&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
	<entry>
		<id>https://complexity.subwiki.org/w/index.php?title=P&amp;diff=29</id>
		<title>P</title>
		<link rel="alternate" type="text/html" href="https://complexity.subwiki.org/w/index.php?title=P&amp;diff=29"/>
		<updated>2011-12-27T20:32:27Z</updated>

		<summary type="html">&lt;p&gt;Vipul: /* Larger complexity classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Definition==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;polynomial time&#039;&#039;&#039; complexity class, denoted &#039;&#039;&#039;PTIME&#039;&#039;&#039; or &#039;&#039;&#039;P&#039;&#039;&#039;, is defined as follows. A language &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; is said to be in the polynomial time complexity class if it satisfies the following equivalent conditions:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! No. !! Shorthand !! Definition&lt;br /&gt;
|-&lt;br /&gt;
| 1 || single tape Turing machine || there exists a [[Turing machine]] using a single tape for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || multiple tape Turing machine || there exists a [[Turing machine]] with access to finitely many read/write tapes, including one for the input (and that allows for both reading and writing on the tape) that accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || machine with log-time random access || there exists a program that can perform random access on a read/write memory in time logarithmic to the amount of memory used, &#039;&#039;and&#039;&#039; the program accepts a string if and only if it is in the language and rejects it otherwise, &#039;&#039;and&#039;&#039; that always either accepts or rejects the string in a number of steps bounded by a polynomial in the length of the input string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Loosely speaking, a language is in P if there is a polynomial time algorithm for recognition of the language. &lt;br /&gt;
==Key features==&lt;br /&gt;
&lt;br /&gt;
===Robustness based on complexity-theoretic Church-Turing thesis===&lt;br /&gt;
&lt;br /&gt;
The [[complexity-theoretic Church-Turing thesis]] states the notion of &#039;&#039;polynomial time&#039;&#039; is robust and does not change based on the nature of the machine, as long as we are dealing with &#039;&#039;deterministic&#039;&#039; machines, and we do not have access to random oracles or quantum computing. &lt;br /&gt;
&lt;br /&gt;
However, the &#039;&#039;degree&#039;&#039; of the polynomial that can be achieved does depend on the machine specifications (so some algorithms may be much faster with log-time random access than with sequential access as for the tapes in a Turing machine). There may be an algorithm on one kind of machine that takes time &amp;lt;math&amp;gt;O(N\log N)&amp;lt;/math&amp;gt; but on another machine takes time &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; where &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; is the length of the string.&lt;br /&gt;
&lt;br /&gt;
===Independence of algorithm from length of the string===&lt;br /&gt;
&lt;br /&gt;
The Turing machine, or more generally the program or algorithm used to determine whether a string is in the language, is &#039;&#039;independent&#039;&#039; of the length of the string. (Internally, it may make cases based on the length of the string, but that&#039;s a different matter). A related complexity class where the algorithm can take polynomial-sized advice based on the length of the string is termed [[P/poly]].&lt;br /&gt;
&lt;br /&gt;
===Asymptotic nature===&lt;br /&gt;
&lt;br /&gt;
The definition of the complexity class depends only on the asymptotic nature of the time taken as a function of the length of the string. In particular, if two languages have cofinite intersection (i.e., they are the same except for finitely many strings in each language that is not in the other) then one is in P if and only if the other is in P.&lt;br /&gt;
&lt;br /&gt;
==Relation with other complexity classes==&lt;br /&gt;
&lt;br /&gt;
===Larger complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::RP]] (randomized polynomial time) || allows use of random bits. In polynomial time, the algorithm returns a &#039;&#039;Yes&#039;&#039; or &#039;&#039;Maybe&#039;&#039; with &#039;&#039;Yes&#039;&#039; indicating that the string is definitely in the language. Probability of saying &#039;&#039;Maybe&#039;&#039; if the string is in the language is bounded away from 1. || [[RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-RP]] || complement of a language in RP. || [[co-RP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|co-RP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::BPP]] (bounded-error probabilistic polynomial time)|| allows use of random bits, probability of errors both ways. || [[BPP contains P]] || open problem -- both separation and collapse plausible || {{intermediate complexity classes|P|BPP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PP]] (probabilistic polynomial time) || error rates are allowed to come close to half. || [[PP contains P]] || || {{intermediate complexity classes|P|PP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP]] (nondeterministic polynomial time) || allows coming up magically with a string that helps provide &amp;quot;proof&amp;quot; || [[NP contains P]] || [[P equals NP conjecture]]. Separation is widely believed, i.e., it is believed that P is not equal to NP. || {{intermediate complexity classes|P|NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::co-NP]] || complement of a language in NP. || [[co-NP contains P]] || equivalent to [[P equals NP conjecture]] || {{intermediate complexity classes|P|co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::NP intersect co-NP]] || the language is both in NP and co-NP || [[NP intersect co-NP contains P]] || Unknown, separation plausible but unclear. || {{intermediate complexity classes|P|NP intersect co-NP}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Sigma2P]] || || || || {{intermediate complexity classes|P|Sigma2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Pi2P]] || || || || {{intermediate complexity classes|P|Pi2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Delta2P]] || || || || {{intermediate complexity classes|P|Delta2P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PH]] (polynomial hierarchy) || || || ||{{intermediate complexity classes|P|PH}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::PSPACE]] (polynomial space)|| algorithm that requires polynomial space to write on in addition to the read-only input. || || || {{intermediate complexity classes|P|PSPACE}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::Quasipolynomial time]] (sometimes abbreviated QP, but that might be confused with quantum polynomial time) || time taken is exponential in a polynomial of the logarithm of the input length || || || {{intermediate complexity classes|P|Quasipolynomial time}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contained in::SUBEXP]] (subexponential time) || || || || {{intermediate complexity classes|P|SUBEXP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Smaller complexity classes===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Complexity class !! Meaning !! Proof of containment !! Reverse containment -- separation result or open problem !! Intermediate complexity classes&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::NL]] (nondeterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Can be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|NL|P}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Contains::L]] (deterministic logspace) || in addition to read-only input, read/write workspace of length bounded by a constant times the logarithm of the length of the input string. Must be used &#039;&#039;nondeterministically&#039;&#039; || || || || {{intermediate complexity classes|L|P}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vipul</name></author>
	</entry>
</feed>