<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=109.188.223.77&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=109.188.223.77&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/109.188.223.77"/>
		<updated>2026-06-11T18:40:58Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23112</id>
		<title>Классы L, NL, coNL. NL-полнота задачи о достижимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23112"/>
				<updated>2012-05-31T22:06:06Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* NL-полнота */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на детерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;L = \mathrm{DSPACE}(O(\log n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на недетерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NL} = \mathrm{NSPACE}(O(\log n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{coNL}&amp;lt;/tex&amp;gt;''' — множество языков, дополнение до которых принадлежит &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{NL} \subset \mathrm{P}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
1. Детерминированная машина Тьюринга есть частный случай недетерминированной, поэтому &amp;lt;tex&amp;gt;\mathrm{L} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
2. Число конфигураций машины, использующей &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; памяти не превышает &amp;lt;tex&amp;gt;2^{O(\log n)} = n^{O(1)} = poly(n)&amp;lt;/tex&amp;gt;, а, следовательно, машина завершает свою работу за &amp;lt;tex&amp;gt;O(poly(n))&amp;lt;/tex&amp;gt; времени. Следовательно, &amp;lt;tex&amp;gt;\mathrm{NL} \in \mathrm{P}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==NL-полнота==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;'''называют &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;-полным, если &amp;lt;tex&amp;gt;X \in \mathrm{NL}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall Y : Y \in NL, Y \leq_L X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = Задача существования пути между двумя заданными вершинами в данном графе NL-полна.&lt;br /&gt;
| proof = &lt;br /&gt;
Задача &amp;lt;tex&amp;gt;CONN = \{\langle G, s, t \rangle&amp;lt;/tex&amp;gt; : в графе G &amp;lt;tex&amp;gt;\exists &amp;lt;/tex&amp;gt; путь из s в t&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что &amp;lt;tex&amp;gt;CONN \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для доказательства необходимо предъявить алгоритм для недетерминированной машины Тьюринга, который использует конечное число переменных, каждая из которых занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти, где &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; - размер входа для задачи и за время порядка &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt; решает эту задачу.&lt;br /&gt;
&lt;br /&gt;
Алгоритм&lt;br /&gt;
&lt;br /&gt;
1. Начиная с вершины &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; недетерминированно переходим в одну из вершин, смежных с ней. (Очевидно, для этого необходимо конечное число переменных)&lt;br /&gt;
&lt;br /&gt;
2. Проверяем, правда ли, что текущая вершина совпадает с &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;. Если это так, возвращает TRUE.&lt;br /&gt;
&lt;br /&gt;
3. Отдельно считаем количество пройденных вершин. Как только это число превышает количество вершин в графе, возвращаем FALSE, так как посетили некоторую вершину дважды.&lt;br /&gt;
&lt;br /&gt;
Таким образом в каждый момент алгоритму достаточно хранить текущую вершину, количество посещенных вершин, финальную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; и некоторое число вспомогательных переменных, для совершения переходов. Все эти переменные принимают значения не более, чем максимальный номер вершины, то есть как раз занимают &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
Теперь докажем, что любая задача из класса &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; сводится к задаче &amp;lt;tex&amp;gt;CONN&amp;lt;/tex&amp;gt; с использованием не более чем логарифмической памяти.&lt;br /&gt;
&lt;br /&gt;
Необходимо по данной задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; построить тройку &amp;lt;tex&amp;gt; \langle G, s, t \rangle &amp;lt;/tex&amp;gt;, решение задачи &amp;lt;tex&amp;gt;CONN&amp;lt;/tex&amp;gt; для которой будет эквивалентно решению данной задачи.&lt;br /&gt;
&lt;br /&gt;
Любая машина Тьюринга, которая принимает некоторый язык &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, использует не более чем логарифмическое количество ячеек на рабочей ленте, и таким образом возможных мгновенных описаний этой машины Тьюринга &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;. Каждому возможному мгновенному описанию машины Тьюринга будет соответствовать некоторая вершина в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, а каждому переходу из этого описания в другое (которых в недетерминированной машине Тьюринга конечное число) {{---}} ребро в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. За вершину &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; принимается вершина, соответствующая начальному состоянию машины, а из каждой вершины, соответствующей некоторому допускающему состоянию, добавляется переход в выделенную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любого слова из языка &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt;, то есть принимаемого данной машиной Тьюринга, будет существовать путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; в построенном графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. А если для некоторого слова не из &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;, то он соответствует некоторой корректной последовательности переходов в изначальной машине, таким образом слово должно было приниматься этой недетерминированной машиной.&lt;br /&gt;
&lt;br /&gt;
Такое построение графа &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; по данной машине Тьюринга можно выполнить с использованием конечного числа переменных, которые будут перебирать всевозможные мгновенные состояния машины (их &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;, потому переменная, перебирающая его занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти), переходы из него и проверка возможности перехода.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Теорема Иммермана==&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
Решим задачу &amp;lt;tex&amp;gt;\mathrm{NCONN} = \{\langle G, s, t \rangle&amp;lt;/tex&amp;gt; : в графе G нет пути из s в t&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;. Очевидно, что этот язык является дополнением языка &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Чтобы показать, что &amp;lt;tex&amp;gt;\mathrm{NCONN}\in \mathrm{NL}&amp;lt;/tex&amp;gt;, придумаем недетерминированый алгоритм, использующий &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, который проверяет, достижима ли вершина  &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; из  &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Определим &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; = {&amp;lt;tex&amp;gt;v:&amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; длиной &amp;lt;tex&amp;gt;\leq i&amp;lt;/tex&amp;gt;}.&lt;br /&gt;
Другими словами это множество всех вершин, достижимых из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; не более чем за &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;|R_i|&amp;lt;/tex&amp;gt; за &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если &amp;lt;tex&amp;gt;t \notin R_{n-1}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |V|&amp;lt;/tex&amp;gt;, то не существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\langle G, s, t \rangle \in \mathrm{NCONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
| statement = Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
| proof = &lt;br /&gt;
Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
    '''Enum'''(&amp;lt;tex&amp;gt;s, i, ri, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt; 0                 //количество уже найденных и выведенных элементов&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt; '''do'''              //перебираем все вершины графа&lt;br /&gt;
        '''continue''' or find path      //недетерминированно угадываем путь из s до v или переходим к следующей вершине&lt;br /&gt;
        &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt;++&lt;br /&gt;
        '''return'''' &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;                //выдаем вершину, до которой угадали путь&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;counter \geq r_i&amp;lt;/tex&amp;gt;)             //нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, допускаем, завершаем работу&lt;br /&gt;
        '''accept'''&lt;br /&gt;
    '''reject'''                  //не нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, не допускаем&lt;br /&gt;
    &lt;br /&gt;
'''Enum''' перебирает все вершины на логарифмической памяти и пытается угадать путь до этой вершины из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Под угадыванием пути подразумевается последовательность недетерминированных выборов следующей вершины пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для угадывания пути необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как необходимо лишь хранить текущую и следующую угадываемую вершины угадываемого пути. &lt;br /&gt;
'''Enum''' является недетерминированым алгоритмом, и если существует порядок его исполнения достигающий '''accept''', то происходит допуск.&lt;br /&gt;
&lt;br /&gt;
Теперь, имея '''Enum''', можно по индукции находить &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;.               &lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt; содержит единственную вершину — &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть известно значение &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Напишем программу, которая на логарифмической памяти будет находить &amp;lt;tex&amp;gt;r_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''Next'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r = 1&amp;lt;/tex&amp;gt;                              //&amp;lt;tex&amp;gt;r_{i+1}&amp;lt;/tex&amp;gt; хотя бы один, так как &amp;lt;tex&amp;gt;r \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;v \ne s&amp;lt;/tex&amp;gt; '''do'''               //перебираем все вершины графа, кроме &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; — это кандидаты на попадание в &amp;lt;tex&amp;gt;R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''for''' &amp;lt;tex&amp;gt;u : (u, v) \in E&amp;lt;/tex&amp;gt; '''do'''               //перебираем все ребра, входящие в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;&lt;br /&gt;
        '''if''' (&amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;))   //перечисляем все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; одна из них, то &amp;lt;tex&amp;gt;v \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;++                            //увеличиваем количество найденных вершин и переходим к рассмотрению следующего кандидата&lt;br /&gt;
          '''break''' &lt;br /&gt;
    '''return''' &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм изначально учитывает &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, а затем перебирает всех возможных кандидатов &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; на попадание в &amp;lt;tex&amp;gt;R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для каждого из них перебираются все ребра, в него входящие.&lt;br /&gt;
Затем перечисляются все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и, если начало нашего ребра было перечислено, то &amp;lt;tex&amp;gt;v \in R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так необходимо хранить лишь &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и еще поочередно значения полученные в результате вызова '''Enum'''.&lt;br /&gt;
&lt;br /&gt;
Теперь напишем алгоритм, который будет недетерминированно решать задачу &amp;lt;tex&amp;gt;\mathrm{NCONN}&amp;lt;/tex&amp;gt; на логарифмической памяти.&lt;br /&gt;
Он будет состоять из двух частей: вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; и перечисление всех вершин из &amp;lt;tex&amp;gt;R_{n - 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; происходит путем вызова '''Next''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; раз, при этом каждый раз в качестве &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; подставляется новое полученное значение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''NCONN'''(&amp;lt;tex&amp;gt;G, s, t&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r_n = 1&amp;lt;/tex&amp;gt;                             //&amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;i = 0..n - 2&amp;lt;/tex&amp;gt; '''do'''                //вычисляем &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;r_n = &amp;lt;/tex&amp;gt; '''Next'''(&amp;lt;tex&amp;gt;s, i, r_n, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;t1&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, n - 1, r_n, G&amp;lt;/tex&amp;gt;))   //перечисляем вершины из &amp;lt;tex&amp;gt;R_{n-1}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; была перечислена, то &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; достижима и выдаем '''reject''', иначе '''accept'''&lt;br /&gt;
      '''reject'''&lt;br /&gt;
    '''else'''&lt;br /&gt;
      '''accept'''&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как для хранения &amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt;, и для вызываемых '''Next''' и '''Enum''' необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
Таким образом показано, что &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;\mathrm{CONN} \in \mathrm{NLC}&amp;lt;/tex&amp;gt;, то аналогичным образом &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{coNLC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Получаем, что любую задачу из &amp;lt;tex&amp;gt;\mathrm{coNL}&amp;lt;/tex&amp;gt; можно свести к задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\mathrm{coNL} \subset \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Из соображений симметрии  &amp;lt;tex&amp;gt;\mathrm{NL} \subset \mathrm{coNL}&amp;lt;/tex&amp;gt;, а значит  &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23111</id>
		<title>Классы L, NL, coNL. NL-полнота задачи о достижимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23111"/>
				<updated>2012-05-31T22:03:34Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на детерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;L = \mathrm{DSPACE}(O(\log n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на недетерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NL} = \mathrm{NSPACE}(O(\log n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{coNL}&amp;lt;/tex&amp;gt;''' — множество языков, дополнение до которых принадлежит &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{NL} \subset \mathrm{P}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
1. Детерминированная машина Тьюринга есть частный случай недетерминированной, поэтому &amp;lt;tex&amp;gt;\mathrm{L} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
2. Число конфигураций машины, использующей &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; памяти не превышает &amp;lt;tex&amp;gt;2^{O(\log n)} = n^{O(1)} = poly(n)&amp;lt;/tex&amp;gt;, а, следовательно, машина завершает свою работу за &amp;lt;tex&amp;gt;O(poly(n))&amp;lt;/tex&amp;gt; времени. Следовательно, &amp;lt;tex&amp;gt;\mathrm{NL} \in \mathrm{P}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==NL-полнота==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;'''называют &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;-полным, если &amp;lt;tex&amp;gt;X \in \mathrm{NL}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall Y : Y \in NL, Y \leq_L X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = Задача существования пути между двумя заданными вершинами в данном графе NL-полна.&lt;br /&gt;
| proof = &lt;br /&gt;
Задача &amp;lt;tex&amp;gt;\mathrm{CONN} = \{\langle G, s, t \rangle&amp;lt;/tex&amp;gt; : в графе G &amp;lt;tex&amp;gt;\exists &amp;lt;/tex&amp;gt; путь из s в t&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что &amp;lt;tex&amp;gt;\mathrm{CONN} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для доказательства необходимо предъявить алгоритм для недетерминированной машины Тьюринга, который использует конечное число переменных, каждая из которых занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти, где &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; - размер входа для задачи и за время порядка &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt; решает эту задачу.&lt;br /&gt;
&lt;br /&gt;
Алгоритм&lt;br /&gt;
&lt;br /&gt;
1. Начиная с вершины &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; недетерминированно переходим в одну из вершин, смежных с ней. (Очевидно, для этого необходимо конечное число переменных)&lt;br /&gt;
&lt;br /&gt;
2. Проверяем, правда ли, что текущая вершина совпадает с &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;. Если это так, возвращает TRUE.&lt;br /&gt;
&lt;br /&gt;
3. Отдельно считаем количество пройденных вершин. Как только это число превышает количество вершин в графе, возвращаем FALSE, так как посетили некоторую вершину дважды.&lt;br /&gt;
&lt;br /&gt;
Таким образом в каждый момент алгоритму достаточно хранить текущую вершину, количество посещенных вершин, финальную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; и некоторое число вспомогательных переменных, для совершения переходов. Все эти переменные принимают значения не более, чем максимальный номер вершины, то есть как раз занимают &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
Теперь докажем, что любая задача из класса &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; сводится к задаче &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt; с использованием не более чем логарифмической памяти.&lt;br /&gt;
&lt;br /&gt;
Необходимо по данной задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; построить тройку &amp;lt;tex&amp;gt; \langle G, s, t \rangle &amp;lt;/tex&amp;gt;, решение задачи &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt; для которой будет эквивалентно решению данной задачи.&lt;br /&gt;
&lt;br /&gt;
Любая машина Тьюринга, которая принимает некоторый язык &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, использует не более чем логарифмическое количество ячеек на рабочей ленте, и таким образом возможных мгновенных описаний этой машины Тьюринга &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;. Каждому возможному мгновенному описанию машины Тьюринга будет соответствовать некоторая вершина в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, а каждому переходу из этого описания в другое (которых в недетерминированной машине Тьюринга конечное число) {{---}} ребро в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. За вершину &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; принимается вершина, соответствующая начальному состоянию машины, а из каждой вершины, соответствующей некоторому допускающему состоянию, добавляется переход в выделенную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любого слова из языка &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt;, то есть принимаемого данной машиной Тьюринга, будет существовать путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; в построенном графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. А если для некоторого слова не из &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;, то он соответствует некоторой корректной последовательности переходов в изначальной машине, таким образом слово должно было приниматься этой недетерминированной машиной.&lt;br /&gt;
&lt;br /&gt;
Такое построение графа &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; по данной машине Тьюринга можно выполнить с использованием конечного числа переменных, которые будут перебирать всевозможные мгновенные состояния машины (их &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;, потому переменная, перебирающая его занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти), переходы из него и проверка возможности перехода.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Теорема Иммермана==&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
Решим задачу &amp;lt;tex&amp;gt;\mathrm{NCONN} = \{\langle G, s, t \rangle&amp;lt;/tex&amp;gt; : в графе G нет пути из s в t&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;. Очевидно, что этот язык является дополнением языка &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Чтобы показать, что &amp;lt;tex&amp;gt;\mathrm{NCONN}\in \mathrm{NL}&amp;lt;/tex&amp;gt;, придумаем недетерминированый алгоритм, использующий &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, который проверяет, достижима ли вершина  &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; из  &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Определим &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; = {&amp;lt;tex&amp;gt;v:&amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; длиной &amp;lt;tex&amp;gt;\leq i&amp;lt;/tex&amp;gt;}.&lt;br /&gt;
Другими словами это множество всех вершин, достижимых из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; не более чем за &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;|R_i|&amp;lt;/tex&amp;gt; за &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если &amp;lt;tex&amp;gt;t \notin R_{n-1}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |V|&amp;lt;/tex&amp;gt;, то не существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\langle G, s, t \rangle \in \mathrm{NCONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
| statement = Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
| proof = &lt;br /&gt;
Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
    '''Enum'''(&amp;lt;tex&amp;gt;s, i, ri, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt; 0                 //количество уже найденных и выведенных элементов&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt; '''do'''              //перебираем все вершины графа&lt;br /&gt;
        '''continue''' or find path      //недетерминированно угадываем путь из s до v или переходим к следующей вершине&lt;br /&gt;
        &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt;++&lt;br /&gt;
        '''return'''' &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;                //выдаем вершину, до которой угадали путь&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;counter \geq r_i&amp;lt;/tex&amp;gt;)             //нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, допускаем, завершаем работу&lt;br /&gt;
        '''accept'''&lt;br /&gt;
    '''reject'''                  //не нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, не допускаем&lt;br /&gt;
    &lt;br /&gt;
'''Enum''' перебирает все вершины на логарифмической памяти и пытается угадать путь до этой вершины из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Под угадыванием пути подразумевается последовательность недетерминированных выборов следующей вершины пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для угадывания пути необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как необходимо лишь хранить текущую и следующую угадываемую вершины угадываемого пути. &lt;br /&gt;
'''Enum''' является недетерминированым алгоритмом, и если существует порядок его исполнения достигающий '''accept''', то происходит допуск.&lt;br /&gt;
&lt;br /&gt;
Теперь, имея '''Enum''', можно по индукции находить &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;.               &lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt; содержит единственную вершину — &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть известно значение &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Напишем программу, которая на логарифмической памяти будет находить &amp;lt;tex&amp;gt;r_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''Next'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r = 1&amp;lt;/tex&amp;gt;                              //&amp;lt;tex&amp;gt;r_{i+1}&amp;lt;/tex&amp;gt; хотя бы один, так как &amp;lt;tex&amp;gt;r \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;v \ne s&amp;lt;/tex&amp;gt; '''do'''               //перебираем все вершины графа, кроме &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; — это кандидаты на попадание в &amp;lt;tex&amp;gt;R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''for''' &amp;lt;tex&amp;gt;u : (u, v) \in E&amp;lt;/tex&amp;gt; '''do'''               //перебираем все ребра, входящие в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;&lt;br /&gt;
        '''if''' (&amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;))   //перечисляем все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; одна из них, то &amp;lt;tex&amp;gt;v \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;++                            //увеличиваем количество найденных вершин и переходим к рассмотрению следующего кандидата&lt;br /&gt;
          '''break''' &lt;br /&gt;
    '''return''' &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм изначально учитывает &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, а затем перебирает всех возможных кандидатов &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; на попадание в &amp;lt;tex&amp;gt;R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для каждого из них перебираются все ребра, в него входящие.&lt;br /&gt;
Затем перечисляются все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и, если начало нашего ребра было перечислено, то &amp;lt;tex&amp;gt;v \in R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так необходимо хранить лишь &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и еще поочередно значения полученные в результате вызова '''Enum'''.&lt;br /&gt;
&lt;br /&gt;
Теперь напишем алгоритм, который будет недетерминированно решать задачу &amp;lt;tex&amp;gt;\mathrm{NCONN}&amp;lt;/tex&amp;gt; на логарифмической памяти.&lt;br /&gt;
Он будет состоять из двух частей: вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; и перечисление всех вершин из &amp;lt;tex&amp;gt;R_{n - 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; происходит путем вызова '''Next''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; раз, при этом каждый раз в качестве &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; подставляется новое полученное значение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''NCONN'''(&amp;lt;tex&amp;gt;G, s, t&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r_n = 1&amp;lt;/tex&amp;gt;                             //&amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;i = 0..n - 2&amp;lt;/tex&amp;gt; '''do'''                //вычисляем &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;r_n = &amp;lt;/tex&amp;gt; '''Next'''(&amp;lt;tex&amp;gt;s, i, r_n, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;t1&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, n - 1, r_n, G&amp;lt;/tex&amp;gt;))   //перечисляем вершины из &amp;lt;tex&amp;gt;R_{n-1}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; была перечислена, то &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; достижима и выдаем '''reject''', иначе '''accept'''&lt;br /&gt;
      '''reject'''&lt;br /&gt;
    '''else'''&lt;br /&gt;
      '''accept'''&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как для хранения &amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt;, и для вызываемых '''Next''' и '''Enum''' необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
Таким образом показано, что &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;\mathrm{CONN} \in \mathrm{NLC}&amp;lt;/tex&amp;gt;, то аналогичным образом &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{coNLC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Получаем, что любую задачу из &amp;lt;tex&amp;gt;\mathrm{coNL}&amp;lt;/tex&amp;gt; можно свести к задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\mathrm{coNL} \subset \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Из соображений симметрии  &amp;lt;tex&amp;gt;\mathrm{NL} \subset \mathrm{coNL}&amp;lt;/tex&amp;gt;, а значит  &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A1%D1%8D%D0%B2%D0%B8%D1%87%D0%B0._%D0%A1%D0%BE%D0%B2%D0%BF%D0%B0%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2_NPS_%D0%B8_PS&amp;diff=23028</id>
		<title>Теорема Сэвича. Совпадение классов NPS и PS</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A1%D1%8D%D0%B2%D0%B8%D1%87%D0%B0._%D0%A1%D0%BE%D0%B2%D0%BF%D0%B0%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2_NPS_%D0%B8_PS&amp;diff=23028"/>
				<updated>2012-05-31T13:44:05Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Класс PS=&lt;br /&gt;
&lt;br /&gt;
== Определение ==&lt;br /&gt;
{{Определение &lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;\mathrm{PS(PSPACE)}&amp;lt;/tex&amp;gt; {{---}} класс языков, разрешимых на детерминированной машине Тьюринга с использованием памяти полиномиального размера. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{PS}=\bigcup\limits_{p(n) \in \mathrm{P}} \mathrm{DSPACE}(p(n)) &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение &lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;\mathrm{NPS(NPSPACE)}&amp;lt;/tex&amp;gt; {{---}} класс языков, разрешимых на недетерминированной машине Тьюринга с использованием памяти полиномиального размера. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NPS}=\bigcup\limits_{p(n) \in \mathrm{P}} \mathrm{NSPACE}(p(n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Связь класса PS с другими классами теории сложности ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} \subseteq \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = Рассмотрим любой язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то существует машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, распознающая &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; за полиномиальное время. Это значит, что &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; не сможет использовать более, чем полиномиальное количество памяти, следовательно &amp;lt;tex&amp;gt; L \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NP} \subseteq \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = Рассмотрим любой язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;L \in \mathrm{NP}&amp;lt;/tex&amp;gt;, то существует программа-верификатор &amp;lt;tex&amp;gt;R(x,y)&amp;lt;/tex&amp;gt;, что для каждого слова из &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; (и только для них) существует такой сертификат &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; полиномиальной длины, что &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; допускает слово и сертификат. Тогда, чтобы проверить принадлежность слова языку, мы можем перебрать все сертификаты полиномиальной длины. Для этого необходим полиномиальный размер памяти. Из этого следует, что &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Теорема Сэвича=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Для любой &amp;lt;tex&amp;gt;f(n) \ge \log n &amp;lt;/tex&amp;gt; справедливо: &amp;lt;tex&amp;gt;\mathrm{NSPACE}(f(n)) \subseteq \mathrm{DSPACE}(f(n)^2)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть, если недетерминированная машина Тьюринга может решить проблему используя &amp;lt;tex&amp;gt;f(n)&amp;lt;/tex&amp;gt; памяти, то существует детерминированная машина Тьюринга, которая решает эту же проблему, используя не больше, чем &amp;lt;tex&amp;gt;f(n)^2&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
|proof = &lt;br /&gt;
Рассмотрим машину Тьюринга с входной и рабочей лентой. Ее конфигурацию &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; можно закодировать так: закодировать позицию и содержание рабочей ленты (займет &amp;lt;tex&amp;gt;O(\log (f(n)))+O(f(n))&amp;lt;/tex&amp;gt; памяти), позицию входной ленты (займет &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; памяти).&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;f(n) \ge \log n &amp;lt;/tex&amp;gt;, то размер конфигурации составит &amp;lt;tex&amp;gt;O(f(n))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L \in \mathrm{NSPACE}(f(n))&amp;lt;/tex&amp;gt;. Тогда существует недетерминированная машина Тьюринга, распознающая этот язык.&amp;lt;br&amp;gt;&lt;br /&gt;
Рассмотрим вспомогательную функцию &amp;lt;tex&amp;gt;Reach(I, J, k)&amp;lt;/tex&amp;gt;, вычисляющую возможность перехода из конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; в конфигурацию &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; за не более, чем &amp;lt;tex&amp;gt;2^k&amp;lt;/tex&amp;gt; переходов:&lt;br /&gt;
&lt;br /&gt;
  '''Reach''' (I, J, k)&lt;br /&gt;
    '''if''' (k = 0)&lt;br /&gt;
      '''return''' (I &amp;lt;tex&amp;gt;\vdash&amp;lt;/tex&amp;gt; J) or (I = J);&lt;br /&gt;
    '''else'''&lt;br /&gt;
      '''for''' (Y) // перебор промежуточных конфигураций&lt;br /&gt;
        '''if''' Reach(I, Y, k-1) and Reach(Y, J, k-1)&lt;br /&gt;
          '''return''' true;&lt;br /&gt;
    '''return''' false;&lt;br /&gt;
&lt;br /&gt;
Эта функция имеет глубину рекурсии &amp;lt;tex&amp;gt;O(k)&amp;lt;/tex&amp;gt;, на каждом уровне рекурсии использует &amp;lt;tex&amp;gt;O(f(n))&amp;lt;/tex&amp;gt; памяти для хранения текущих конфигураций.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим машину Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, распознающую язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Эта машина может иметь &amp;lt;tex&amp;gt;2^{df(n)}&amp;lt;/tex&amp;gt; конфигураций. Объясняется это следующим образом. Пусть &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; имеет &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; состояний и &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; символов ленточного алфавита. Количество различных строчек, которые могут появиться на рабочей ленте &amp;lt;tex&amp;gt;g^{f(n)}&amp;lt;/tex&amp;gt;. Головка на входной ленте может быть в одной из n позиций и в одной из &amp;lt;tex&amp;gt;f(n)&amp;lt;/tex&amp;gt; на рабочей ленте. Таким образом, общее количество всех возможных конфигураций не превышает &amp;lt;tex&amp;gt;cnf(n)g^{f(n)}=2^{\log c + \log n + \log (f(n)) + f(n) \log g}=2^{O(f(n))}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию, которая по заданному слову &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; проверяет его принадлежность к языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  '''Check''' (x, L)&lt;br /&gt;
    '''for''' (T) // перебор конфигураций, которые содержат допускающие состояния&lt;br /&gt;
      '''if''' Reach(S, T, &amp;lt;tex&amp;gt;\log \left(2^{df(n)}\right)&amp;lt;/tex&amp;gt;)&lt;br /&gt;
        '''return''' true;&lt;br /&gt;
    '''return''' false;&lt;br /&gt;
&lt;br /&gt;
Если слово принадлежит языку, то оно будет допущено, так как будут рассмотрены все возможные пути допуска. Это обеспечивается указанной нам глубиной рекурсии для функции &amp;lt;tex&amp;gt;Reach&amp;lt;/tex&amp;gt;. И если слово не допускается за &amp;lt;tex&amp;gt;2^{df(n)}&amp;lt;/tex&amp;gt; шагов (количество всех возможных конфигураций), то оно уже гарантированно не может быть допущено. &lt;br /&gt;
В итоге функция &amp;lt;tex&amp;gt;Reach&amp;lt;/tex&amp;gt; имеет глубину рекурсии &amp;lt;tex&amp;gt;\log{2}^{df(n)}=O(f(n))&amp;lt;/tex&amp;gt;, на каждом уровне рекурсии используется &amp;lt;tex&amp;gt;O(f(n))&amp;lt;/tex&amp;gt; памяти. Тогда всего эта функция использует &amp;lt;tex&amp;gt;O(f(n)^2)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Следствие==&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{PS}=\mathrm{NPS}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Вывод=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{L} \subseteq \mathrm{P} \subseteq \mathrm{NP} \subseteq \mathrm{PS} = \mathrm{NPS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Известно, что &amp;lt;tex&amp;gt;\mathrm{L} \neq \mathrm{PS} &amp;lt;/tex&amp;gt;. Так что хотя бы одно из рассмотренных включений {{---}} строгое, но неизвестно, какое. Принято считать, что все приведенные выше включения {{---}} строгие.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Источники=&lt;br /&gt;
* Michael Sipser. Introduction to the theory of computation.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D1%8B_%D0%BE_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B8_%D1%91%D0%BC%D0%BA%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F%D1%85&amp;diff=23023</id>
		<title>Теоремы о временной и ёмкостной иерархиях</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D1%8B_%D0%BE_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B8_%D1%91%D0%BC%D0%BA%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F%D1%85&amp;diff=23023"/>
				<updated>2012-05-31T12:36:57Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|id=space_foo&lt;br /&gt;
|definition=Функция &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt; называется '''конструируемой по памяти''', если можно вычислить &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, используя не более &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=о емкостной иерархии&lt;br /&gt;
|id=space&lt;br /&gt;
|statement=Пусть даны две конструируемые по памяти функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt;\lim \limits_{n\rightarrow\infty} \frac{f(n)}{g(n)}=0&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;DSPACE(f(n)) \varsubsetneq DSPACE(g(n))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Понятно, что &amp;lt;tex&amp;gt;DSPACE(f(n)) \subseteq DSPACE(g(n))&amp;lt;/tex&amp;gt;, поскольку программа, ограниченная по памяти функцией &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;, проходит ограничение &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
Используя диагональный метод, докажем, что включение строгое. Рассмотрим функцию &amp;lt;tex&amp;gt;h(n)=\sqrt{f(n)g(n)}&amp;lt;/tex&amp;gt; и язык &amp;lt;tex&amp;gt;L=\{x|x(x)\Bigr|_{S\leq h(|x|)}\neq 1\}&amp;lt;/tex&amp;gt;, где запись &amp;lt;tex&amp;gt;S\leq h(|x|)&amp;lt;/tex&amp;gt; означает, что программа запускается с лимитом памяти &amp;lt;tex&amp;gt;h(|x|)&amp;lt;/tex&amp;gt;. Иначе говоря, &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; — это язык программ, которые не допускают собственный код, используя не более &amp;lt;tex&amp;gt;h(|x|)&amp;lt;/tex&amp;gt; памяти. Докажем, что &amp;lt;tex&amp;gt;L\in DSPACE(g(n))\setminus DSPACE(f(n))&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;h(n)=o(g(n))&amp;lt;/tex&amp;gt;, то очевидно, что &amp;lt;tex&amp;gt;L \in DSPACE(g(n))&amp;lt;/tex&amp;gt;. Действительно, для проверки принадлежности программы &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; языку достаточно запустить её с лимитом памяти &amp;lt;tex&amp;gt;h(|x|)&amp;lt;/tex&amp;gt; и проверить, что результат не равен 1. Тогда вся проверка будет выполнена с использованием не более &amp;lt;tex&amp;gt;g(|x|)&amp;lt;/tex&amp;gt; памяти в силу конструируемости функций &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; и накладываемых ограничений на память.&amp;lt;br /&amp;gt;&lt;br /&gt;
Предположим теперь, что &amp;lt;tex&amp;gt;L \in DSPACE(f(n))&amp;lt;/tex&amp;gt;. Тогда существует программа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, распознающая язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; и использующая не более &amp;lt;tex&amp;gt;c \cdot f(n)&amp;lt;/tex&amp;gt; памяти. Так как &amp;lt;tex&amp;gt;f(n)=o(h(n))&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists n_0: \forall n&amp;gt;n_0 \Rightarrow c\cdot f(n)&amp;lt;h(n)&amp;lt;/tex&amp;gt;. Будем считать, что &amp;lt;tex&amp;gt;|p|&amp;gt;n_0&amp;lt;/tex&amp;gt; (иначе добавим в программу пустые строки, искусственно увеличив её длину), тогда при вызове &amp;lt;tex&amp;gt;p(p)&amp;lt;/tex&amp;gt; потребуется не более &amp;lt;tex&amp;gt;h(|p|)&amp;lt;/tex&amp;gt; памяти. Выясним, принадлежит ли &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Допустим, что &amp;lt;tex&amp;gt;p\in L&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;p(p)=1&amp;lt;/tex&amp;gt;, значит, &amp;lt;tex&amp;gt;p\notin L&amp;lt;/tex&amp;gt; по определению языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Пусть теперь &amp;lt;tex&amp;gt;p\notin L&amp;lt;/tex&amp;gt;. Но тогда &amp;lt;tex&amp;gt;p(p) \ne 1&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;p\in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не может быть из &amp;lt;tex&amp;gt;DSPACE(f(n))&amp;lt;/tex&amp;gt;, следовательно, язык из &amp;lt;tex&amp;gt;DSPACE(g(n))\setminus DSPACE(f(n))&amp;lt;/tex&amp;gt; найден.}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=time_foo&lt;br /&gt;
|definition=Функция &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt; называется '''конструируемой по времени''', если можно вычислить &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; за время не более &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=о временной иерархии&lt;br /&gt;
|id=time&lt;br /&gt;
|statement=Пусть даны две конструируемые по времени функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; такие, &amp;lt;span title=&amp;quot;Здесь Sim(n) — время симуляции n шагов одной машины Тьюринга на другой машине&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;что&amp;lt;/span&amp;gt; &amp;lt;tex&amp;gt;\lim \limits_{n\rightarrow\infty} \frac{Sim(f(n))}{g(n)}=0&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;DTIME(f(n)) \varsubsetneq DTIME(g(n))&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=Доказательство аналогично доказательству [[Теоремы о временной и емкостной иерархиях#space|теоремы о емкостной иерархии]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23022</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23022"/>
				<updated>2012-05-31T12:27:18Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Задача равенства P и NP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in \mathrm{P} , M \le L \Rightarrow M \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{P} \Rightarrow \mathrm{P}=\mathrm{P^L}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in \mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in \mathrm{P}&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{TS}(n, 1) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;\mathrm{TS}&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{CFL} \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{CFL} \subset \mathrm{TS}(n^3, n^2) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23020</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23020"/>
				<updated>2012-05-31T11:32:12Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Задача равенства P и NP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in \mathrm{P} , M \le L \Rightarrow M \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{P} \Rightarrow \mathrm{P}=\mathrm{P^L}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in \mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in \mathrm{P}&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{TS}(n, 1) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;\mathrm{TS}&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{CFL} \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{CFL} \subset \mathrm{TS}(n^3, n^2) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\mathrm{P}\subset \mathrm{NP}&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23019</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23019"/>
				<updated>2012-05-31T11:31:57Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Задача равенства P и NP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in \mathrm{P} , M \le L \Rightarrow M \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{P} \Rightarrow \mathrm{P}=\mathrm{P^L}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in \mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in \mathrm{P}&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{TS}(n, 1) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;\mathrm{TS}&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{CFL} \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{CFL} \subset \mathrm{TS}(n^3, n^2) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\mathrm{P}\subset \mathrm{NP}&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23018</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23018"/>
				<updated>2012-05-31T11:31:15Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Примеры задач и языков из P */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in \mathrm{P} , M \le L \Rightarrow M \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{P} \Rightarrow \mathrm{P}=\mathrm{P^L}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in \mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in \mathrm{P}&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{TS}(n, 1) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;\mathrm{TS}&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{CFL} \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{CFL} \subset \mathrm{TS}(n^3, n^2) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23017</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23017"/>
				<updated>2012-05-31T11:30:52Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Соотношение классов Reg и P */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in \mathrm{P} , M \le L \Rightarrow M \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{P} \Rightarrow \mathrm{P}=\mathrm{P^L}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in \mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in \mathrm{P}&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{Reg} \subset \mathrm{TS}(n, 1) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;\mathrm{TS}&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{CFL} \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{CFL} \subset \mathrm{TS}(n^3, n^2) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23016</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23016"/>
				<updated>2012-05-31T11:30:11Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Соотношение классов CFL и P */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in \mathrm{P} , M \le L \Rightarrow M \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{P} \Rightarrow \mathrm{P}=\mathrm{P^L}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in \mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in \mathrm{P}&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;Reg \subset \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;Reg \subset TS(n, 1) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;TS&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;\mathrm{CFL} \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{CFL} \subset \mathrm{TS}(n^3, n^2) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23015</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23015"/>
				<updated>2012-05-31T11:29:10Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Соотношение классов Reg и P */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in \mathrm{P} , M \le L \Rightarrow M \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{P} \Rightarrow \mathrm{P}=\mathrm{P^L}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in \mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in \mathrm{P}&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;Reg \subset \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;Reg \subset TS(n, 1) \subset \mathrm{P}&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;TS&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;CFL \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;CFL \subset TS(n^3, n^2) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23014</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23014"/>
				<updated>2012-05-31T11:28:29Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Свойства класса P */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in \mathrm{P} , M \le L \Rightarrow M \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;\mathrm{L} \subset \mathrm{P} \Rightarrow \mathrm{P}=\mathrm{P^L}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in \mathrm{P}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in \mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in \mathrm{P}&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;Reg \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;Reg \subset TS(n, 1) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;TS&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;CFL \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;CFL \subset TS(n^3, n^2) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23013</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23013"/>
				<updated>2012-05-31T11:26:44Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Определение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in P , M \le L \Rightarrow M \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;L \subset P \Rightarrow P=P^L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in P&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in P&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in P&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;Reg \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;Reg \subset TS(n, 1) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;TS&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;CFL \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;CFL \subset TS(n^3, n^2) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23012</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23012"/>
				<updated>2012-05-31T11:23:00Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Примеры задач и языков из P */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in P , M \le L \Rightarrow M \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;L \subset P \Rightarrow P=P^L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in P&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in P&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in P&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;Reg \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;Reg \subset TS(n, 1) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;TS&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;CFL \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;CFL \subset TS(n^3, n^2) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют задачи и не из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23011</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=23011"/>
				<updated>2012-05-31T11:14:55Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: /* Соотношение классов Reg и P */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in P , M \le L \Rightarrow M \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;L \subset P \Rightarrow P=P^L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in P&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in P&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in P&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;Reg \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;Reg \subset TS(n, 1) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;TS&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени, и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;CFL \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;CFL \subset TS(n^3, n^2) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют и задачи не из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BD%D0%B5%D0%BF%D1%80%D0%B8%D0%BD%D0%B0%D0%B4%D0%BB%D0%B5%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_XOR_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%83_AC%E2%81%B0&amp;diff=23006</id>
		<title>Теорема о непринадлежности XOR классу AC⁰</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BD%D0%B5%D0%BF%D1%80%D0%B8%D0%BD%D0%B0%D0%B4%D0%BB%D0%B5%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_XOR_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%83_AC%E2%81%B0&amp;diff=23006"/>
				<updated>2012-05-31T10:35:38Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Hastad’s switching lemma===&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; представима в виде &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-[[ДНФ]], а &amp;lt;tex&amp;gt;p~-&amp;lt;/tex&amp;gt; случайная выборка &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; случайных бит входа. Тогда при &amp;lt;tex&amp;gt;s \ge 2&amp;lt;/tex&amp;gt; верно, что &amp;lt;tex&amp;gt;Pr[f|_p&amp;lt;/tex&amp;gt; не представима в виде &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;-[[КНФ]]&amp;lt;tex&amp;gt;]\le\left(\frac{(n - t)k^{10}}{n}\right) ^ {s/2}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
}}&lt;br /&gt;
Заметим, что для функции &amp;lt;tex&amp;gt;\overline{f}&amp;lt;/tex&amp;gt; можно получить такой же результат, изменив КНФ на ДНФ и наоборот.&lt;br /&gt;
&lt;br /&gt;
===Теорема===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\oplus~-&amp;lt;/tex&amp;gt; [[Основные определения: алфавит, слово, язык, конкатенация, свободный моноид слов; операции над языками|язык]] над [[Основные определения: алфавит, слово, язык, конкатенация, свободный моноид слов; операции над языками|алфавитом]] &amp;lt;tex&amp;gt;\left\{0, 1\right\}&amp;lt;/tex&amp;gt;, состоящий из [[Основные определения: алфавит, слово, язык, конкатенация, свободный моноид слов; операции над языками|слов]], содержащих нечетное число &amp;lt;tex&amp;gt;1.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\oplus \notin \mathrm{AC^0}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим произвольную схему из &amp;lt;tex&amp;gt;\mathrm{AC^0}&amp;lt;/tex&amp;gt;. Не умаляя общности, будем считать, что:&lt;br /&gt;
# Выходная степень каждого элемента равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Схема имеет &amp;lt;tex&amp;gt;2n&amp;lt;/tex&amp;gt; входных провода, причем последние &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; из них являются отрицанием первых &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; входов.&lt;br /&gt;
# Элементы &amp;lt;tex&amp;gt;\lor&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\land&amp;lt;/tex&amp;gt; чередуются. Значит, схему можно разбить на уровни так, что на каждом уровне все элементы будут одинаковыми.&lt;br /&gt;
# Нижний уровень схемы состоит из &amp;lt;tex&amp;gt;\land&amp;lt;/tex&amp;gt; элементов с единичной степенью входа.&lt;br /&gt;
&lt;br /&gt;
Построим итеративный процесс, на каждом шаге которого можно с высокой вероятностью на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; уменьшить глубину схемы, сохранив при этом число входов. Пусть &amp;lt;tex&amp;gt;n~-&amp;lt;/tex&amp;gt; длина входной цепочки, а &amp;lt;tex&amp;gt;d~-&amp;lt;/tex&amp;gt; глубина схемы. Выберем минимальное целое &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; так, чтобы &amp;lt;tex&amp;gt;n^b&amp;lt;/tex&amp;gt; было не меньше, чем число элементов в схеме. На каждом шаге случайным образом будем назначать все большее число переменных. Обозначим &amp;lt;tex&amp;gt;n_i~-&amp;lt;/tex&amp;gt; число неназначенных переменных на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ом шаге. Тогда на &amp;lt;tex&amp;gt;i + 1&amp;lt;/tex&amp;gt;-ом шаге число назначенных переменных будет &amp;lt;tex&amp;gt;n_i - \sqrt{n_i}&amp;lt;/tex&amp;gt;. Возьмем &amp;lt;tex&amp;gt;k_i=10b2^i.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:beforeHastadSwitchingTransformation.png|600px|thumb|center|Схема на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-ом шаге.]]&lt;br /&gt;
&lt;br /&gt;
Покажем, что после &amp;lt;tex&amp;gt;i+1&amp;lt;/tex&amp;gt;-ого шага глубина схемы будет &amp;lt;tex&amp;gt;d - i&amp;lt;/tex&amp;gt;, причем наибольшая степень входа элемента на нижнем уровне будет &amp;lt;tex&amp;gt;k_i&amp;lt;/tex&amp;gt;. В самом деле, пусть нижний уровень схемы состоит из &amp;lt;tex&amp;gt;\land&amp;lt;/tex&amp;gt; элементов, тогда уровень выше &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; из элементов &amp;lt;tex&amp;gt;\lor&amp;lt;/tex&amp;gt;. Каждый &amp;lt;tex&amp;gt;\lor&amp;lt;/tex&amp;gt; элемент можно считать &amp;lt;tex&amp;gt;k_i&amp;lt;/tex&amp;gt;-ДНФ. Отсюда по лемме получаем, что с вероятностью &amp;lt;tex&amp;gt;1-\left(\frac{k_i^{10}}{n^{1/2^{i+1}}}\right) ^ {k_{i+1}/2}&amp;lt;/tex&amp;gt; функцию можно записать в виде &amp;lt;tex&amp;gt;k_{i+1}&amp;lt;/tex&amp;gt;-КНФ. При достаточно больших &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; это можно сделать с вероятность хотя бы &amp;lt;tex&amp;gt;1-\frac{1}{10n^b}&amp;lt;/tex&amp;gt;. Поскольку верхний уровень КНФ состоит из &amp;lt;tex&amp;gt;\land&amp;lt;/tex&amp;gt; элементов, также как и уровень над КНФ, то их можно объединить, уменьшив при этом глубину схемы на &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Аналогично рассматриваем случай, когда нижний уровень схемы состоит из &amp;lt;tex&amp;gt;\lor&amp;lt;/tex&amp;gt; элементов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:afterHastadSwitchingTransformation.png|600px|thumb|center|Схема на &amp;lt;tex&amp;gt;i+1&amp;lt;/tex&amp;gt;-ом шаге.]]&lt;br /&gt;
&lt;br /&gt;
Заметим, что лемма применяется не более, чем к &amp;lt;tex&amp;gt;n^b&amp;lt;/tex&amp;gt; элементам исходной схемы. Тогда с вероятностью не менее &amp;lt;tex&amp;gt;9/10&amp;lt;/tex&amp;gt; после &amp;lt;tex&amp;gt;d-2&amp;lt;/tex&amp;gt;-ого шага получаем схему глубины &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;, у которой максимальная степень входа на нижнем уровне не больше &amp;lt;tex&amp;gt;k_{d-2}&amp;lt;/tex&amp;gt;. По построению эта формула либо КНФ, либо ДНФ. Такую схему можно сделать постоянной, если правильно зафиксировать &amp;lt;tex&amp;gt;k_{d-2}&amp;lt;/tex&amp;gt; переменных. Однако функцию, распознающую &amp;lt;tex&amp;gt;\oplus,&amp;lt;/tex&amp;gt; невозможно сделать постоянной, зафиксировав менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; переменных. Получили противоречие. Поскольку рассматривали произвольную схему из класса &amp;lt;tex&amp;gt;\mathrm{AC^0}&amp;lt;/tex&amp;gt;, верно что &amp;lt;tex&amp;gt;\oplus \notin \mathrm{AC^0}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Источники===&lt;br /&gt;
* ''Sanjeev Arora, Boaz Barak''. [http://www.cs.princeton.edu/theory/complexity Computational Complexity: A Modern Approach]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_NC_%D0%B8_AC&amp;diff=23005</id>
		<title>Классы NC и AC</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_NC_%D0%B8_AC&amp;diff=23005"/>
				<updated>2012-05-31T10:35:25Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NC^i}&amp;lt;/tex&amp;gt; — множество языков, распознаваемых семейством логических схем полиномиального от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; размера, глубиной &amp;lt;tex&amp;gt;O(log^i (n))&amp;lt;/tex&amp;gt; и со степенью входа каждого элемента не более 2, причем существует детерминированная машина Тьюринга, принимающая на вход &amp;lt;tex&amp;gt;1^n&amp;lt;/tex&amp;gt; и строящая соответствующую схему используя &amp;lt;tex&amp;gt;O(log(n))&amp;lt;/tex&amp;gt; ячеек памяти, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{AC^i}&amp;lt;/tex&amp;gt; определяется аналогично &amp;lt;tex&amp;gt;\mathrm{NC^i}&amp;lt;/tex&amp;gt;, за исключением того, что степень входа элемента неограничена.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NC} = \bigcup \limits_{i = 0}^{\infty} \mathrm{NC^i}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{AC} = \bigcup \limits_{i = 0}^{\infty} \mathrm{AC^i}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Теоремы==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{NC^i} \subset \mathrm{AC^i} \subset \mathrm{NC^{i+1}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathrm{NC^i} \subset \mathrm{AC^i}&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Это понятно из определения &amp;lt;tex&amp;gt;\mathrm{NC^i}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{AC^i}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathrm{AC^i} \subset \mathrm{NC^{i+1}}&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L \in \mathrm{AC^i}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается семейством схем &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; полиномиального размера. Степень входа каждого элемента схемы &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; не превосходит полинома от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, поскольку степень входа не может превосходить число элементов в схеме. Заменим элементы схемы &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; элементами со степенью входа не более 2 следующим образом: &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:circuit.jpg]]&lt;br /&gt;
&lt;br /&gt;
При такой замене глубина схемы увеличится не более чем в &amp;lt;tex&amp;gt;log_2 r(n) = O(log(n))&amp;lt;/tex&amp;gt; раз, а так как изначально глубина схемы была &amp;lt;tex&amp;gt;O(log^i(n))&amp;lt;/tex&amp;gt;, то после замены всех элементов она станет &amp;lt;tex&amp;gt;O(log^i(n)) \cdot O(log(n)) = O(log^{i+1}(n))&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
При замене одного элемента будет добавлено не более &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; элементов, потому, поскольку изначальный размер схемы был полиномиальным и каждый элемент мы заменили полиномиальным числом элементов, после всех замен размер схемы останется полиномиальным.  &lt;br /&gt;
}}&lt;br /&gt;
'''Следствие:'''  &amp;lt;tex&amp;gt;\mathrm{NC} = \mathrm{AC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\mathrm{NC} \subseteq \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L \in \mathrm{NC}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается некоторым семейством схем &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt;, таких, что существует детерминированная машина Тьюринга, строящая схему по &amp;lt;tex&amp;gt;1^n&amp;lt;/tex&amp;gt;, используя &amp;lt;tex&amp;gt;O(log(n))&amp;lt;/tex&amp;gt; ячеек памяти. Конфигурация МТ задается положением головки и состоянием ячеек памяти, то есть у МТ может быть &amp;lt;tex&amp;gt;n \cdot 2^{O(log(n))} = O(n^2)&amp;lt;/tex&amp;gt; конфигураций. При построении схемы конфигурации не могут повторяться, иначе МТ зациклится, следовательно схема будет построена за полиномиальное от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; время. Построим для данного входа схему и вычислим её. На вычисление схемы будет затрачено полиномиальное время, так как размер схемы полиномиален.}}&lt;br /&gt;
Равенство &amp;lt;tex&amp;gt;\mathrm{NC}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; — неразрешенная на данный момент задача.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|about=тезис о связи &amp;lt;tex&amp;gt;\mathbf{NC}&amp;lt;/tex&amp;gt; с параллельными алгоритмами&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается параллельным компьютером с &amp;lt;tex&amp;gt;O(poly(n))&amp;lt;/tex&amp;gt; процессоров за время &amp;lt;tex&amp;gt;O(poly(log(n))&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;L \in \mathrm{NC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
''(набросок доказательства)''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L \in \mathrm{NC}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается семейством схем &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;C_n&amp;lt;/tex&amp;gt; размера &amp;lt;tex&amp;gt;N=O(poly(n))&amp;lt;/tex&amp;gt; и имеет глубину &amp;lt;tex&amp;gt;O(log^d n)&amp;lt;/tex&amp;gt;. Возьмем параллельный компьютер с &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; процессорами, где каждый из них будет играть роль одного элемента схемы. Так как компьютер параллельный, то вычисления на каждом уровне схемы будут выполняться параллельно. Тогда получаем, что всего потребуется &amp;lt;tex&amp;gt;O(log^d(n))&amp;lt;/tex&amp;gt; времени.  &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается параллельным компьютером с &amp;lt;tex&amp;gt;N=O(poly(n))&amp;lt;/tex&amp;gt; процессоров за время &amp;lt;tex&amp;gt;D=O(log^d n)&amp;lt;/tex&amp;gt;. Построим схему глубины &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, на каждом уровне которой будет по &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; элементов, таких, что &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й элемент на уровне &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; выполняет вычисления, производимые &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-м процессором в момент времени &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;. Всего в схеме будет &amp;lt;tex&amp;gt;N \cdot D = O(poly(n)) \cdot O(log^d n) = O(poly(n))&amp;lt;/tex&amp;gt; элементов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9A%D0%B0%D1%80%D0%BF%D0%B0_%E2%80%94_%D0%9B%D0%B8%D0%BF%D1%82%D0%BE%D0%BD%D0%B0&amp;diff=23004</id>
		<title>Теорема Карпа — Липтона</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9A%D0%B0%D1%80%D0%BF%D0%B0_%E2%80%94_%D0%9B%D0%B8%D0%BF%D1%82%D0%BE%D0%BD%D0%B0&amp;diff=23004"/>
				<updated>2012-05-31T10:35:12Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Лемма&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;SAT \in P/poly &amp;lt;/tex&amp;gt;, тогда существует семейство схем полиномиального размера &amp;lt;tex&amp;gt;D_n&amp;lt;/tex&amp;gt;, таких, что для любой формулы &amp;lt;tex&amp;gt;\phi \in SAT&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;D_{|\phi|}(\phi)&amp;lt;/tex&amp;gt; выводит набор значений, удовлетворяющий формуле.&lt;br /&gt;
|proof=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; не содержит переменных, то есть является тождественной единицей, решение задачи тривиально.&lt;br /&gt;
Иначе, выберем любую переменную &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; из формулы &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, и выполним подстановку &amp;lt;tex&amp;gt;x = 0&amp;lt;/tex&amp;gt;. Получим формулу &amp;lt;tex&amp;gt;\phi_0&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;\phi_0 \in SAT&amp;lt;/tex&amp;gt; (так как по условию теоремы &amp;lt;tex&amp;gt;SAT \in P/poly&amp;lt;/tex&amp;gt;, такую проверку можно сделать за полиномиальное время, вычислив соответствующую схему), то мы свели задачу к аналогичной с меньшим числом переменных. В противном случае, сведение выполняется подстановкой &amp;lt;tex&amp;gt;x = 1&amp;lt;/tex&amp;gt;. Мы получили программу, работающую за полиномиальное время, а так как &amp;lt;tex&amp;gt;P \in P/poly&amp;lt;/tex&amp;gt;, то и семейство требуемых схем.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Карп, Липтон&lt;br /&gt;
|statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;NP \subset P/poly&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\Sigma_2 = \Pi_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;NP \subset P/poly&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathrm{SAT} \in \mathrm{P/poly}&amp;lt;/tex&amp;gt;, то есть для любого &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; найдётся схема полиномиального размера &amp;lt;tex&amp;gt; C_n&amp;lt;/tex&amp;gt;, такая что &amp;lt;tex&amp;gt;C_{|\phi|}(\phi) = \left[\phi \in SAT\right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда, найдётся и схема полиномиального размера &amp;lt;tex&amp;gt; D_{|\phi|}&amp;lt;/tex&amp;gt;, выдающая для &amp;lt;tex&amp;gt;\phi \in SAT&amp;lt;/tex&amp;gt; набор значений, удовлетворяющий &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим язык &amp;lt;tex&amp;gt;L \in \Pi_2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L = \{z | \forall x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\exists y &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \phi(x, y, z)\}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим формулу &amp;lt;tex&amp;gt;\psi(x, z) = \exists y&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\phi(x, y, z)&amp;lt;/tex&amp;gt; как экземпляр задачи &amp;lt;tex&amp;gt;SAT&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Тогда определение языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; можно переписать так: &amp;lt;tex&amp;gt;L=\{z | \forall x&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \phi(x,D_{|\psi(x, z)|}(\psi(x, z)), z)\}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Покажем что &amp;lt;tex&amp;gt;(\forall x&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \phi(x,D_{|\psi(x, z)|}(\psi(x, z)), z)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;)\Leftrightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(\exists G : &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall x&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\phi(x, G(\psi(x, z)), z))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Очевидно, из первого следует второе, так как &amp;lt;tex&amp;gt;\exists G = D_{|\psi(x, z)|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если первое ложно, то &amp;lt;tex&amp;gt;\exists x = x_0 : &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\forall y&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\phi(x, y, z) = 0&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\forall G &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\exists x = x_0 : \phi (x, G(\psi(x, z)), z)&amp;lt;/tex&amp;gt;, то есть второе ложно.&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L=\{z | \exists G : &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\phi(x, G(\psi(x, z)), z)\}&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;L \in \Sigma_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%85%D0%B5%D0%BC%D0%BD%D0%B0%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B8_%D0%BA%D0%BB%D0%B0%D1%81%D1%81_P/poly&amp;diff=23003</id>
		<title>Схемная сложность и класс P/poly</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%85%D0%B5%D0%BC%D0%BD%D0%B0%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B8_%D0%BA%D0%BB%D0%B0%D1%81%D1%81_P/poly&amp;diff=23003"/>
				<updated>2012-05-31T10:35:00Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt; PSIZE &amp;lt;/tex&amp;gt; {{---}} класс языков, вычислимых семейством [[Реализация_булевой_функции_схемой_из_функциональных_элементов|логических схем]] &amp;lt;tex&amp;gt; \{C_n\}_{n&amp;gt;0} &amp;lt;/tex&amp;gt; полиномиального размера с n входами и одним выходом, то есть: &amp;lt;tex&amp;gt;PSIZE=\{L | \forall n &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists C_n &amp;lt;/tex&amp;gt;: &lt;br /&gt;
#&amp;lt;tex&amp;gt; |C_n| \leqslant p(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt; {{---}} полином;&lt;br /&gt;
#Input &amp;lt;tex&amp;gt; (C_n) = n &amp;lt;/tex&amp;gt;;&lt;br /&gt;
#Output &amp;lt;tex&amp;gt; (C_n) = 1 &amp;lt;/tex&amp;gt;;&lt;br /&gt;
#&amp;lt;tex&amp;gt;x \in L \iff C_{|x|}(x) = 1 \}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}} &lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Пусть C {{---}} сложностный класс, f {{---}} функция. Тогда &amp;lt;tex&amp;gt; C/f = \{L| &amp;lt;/tex&amp;gt; существуют &amp;lt;tex&amp;gt; a_0, a_1, .. , a_n, .. &amp;lt;/tex&amp;gt; {{---}} подсказки, программа p, удовлетворяющая ограничениям C:&lt;br /&gt;
#&amp;lt;tex&amp;gt;|a_i| \leqslant f(i) &amp;lt;/tex&amp;gt;;&lt;br /&gt;
#&amp;lt;tex&amp;gt; x \in L \iff p(x, a_{|x|})=1 \}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt; P/poly = \bigcup\limits_{p \in poly} P/p &amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теоремы ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt; P \subset PSIZE &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; L \in P &amp;lt;/tex&amp;gt;. Тогда существует машина Тьюринга m, распознающая язык L. Составим логическую схему для m, как мы сделали в [[Примеры_NP-полных_языков._Теорема_Кука|теореме Кука]], ее размеры ограничены полиномом, она допускает только слова из языка. Отсюда следует, что &amp;lt;tex&amp;gt; P \subset PSIZE &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt; PSIZE \subset P/poly&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; L \in PSIZE &amp;lt;/tex&amp;gt;, x {{---}} входная строка. Тогда для L существуют логические схемы &amp;lt;tex&amp;gt; C_0, C_1, .., C_n, .. &amp;lt;/tex&amp;gt;. В качестве подсказки для x предоставим логическую схему &amp;lt;tex&amp;gt; C_{|x|} &amp;lt;/tex&amp;gt;. Программа p получает на вход x и &amp;lt;tex&amp;gt; C_{|x|} &amp;lt;/tex&amp;gt; и возвращает значение, вычисляемое &amp;lt;tex&amp;gt; C_{|x|} &amp;lt;/tex&amp;gt; для входа x. Запишем программу&lt;br /&gt;
 &amp;lt;tex&amp;gt; p(x, C_{|x|}) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;C_{|x|}(x) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Логическая схема &amp;lt;tex&amp;gt; C_{|x|} &amp;lt;/tex&amp;gt; имеет полиномиальный размер. Оба условия для &amp;lt;tex&amp;gt; P/poly &amp;lt;/tex&amp;gt; выполнены, &amp;lt;tex&amp;gt; PSIZE \subset P/poly&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt; P/poly \subset PSIZE&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; L \in P/poly &amp;lt;/tex&amp;gt;, x {{---}} входная строка. Тогда для L существуют подсказки &amp;lt;tex&amp;gt; a_0, a_1, .. , a_n, .. &amp;lt;/tex&amp;gt;. Программа p по входу x и подсказке &amp;lt;tex&amp;gt; a_{|x|} &amp;lt;/tex&amp;gt; определяет принадлежность x языку L. Зафиксируем длину входной строки x как n. Запишем p в виде логической схемы &amp;lt;tex&amp;gt; C_m &amp;lt;/tex&amp;gt; ( &amp;lt;tex&amp;gt; m = n + |a_n| &amp;lt;/tex&amp;gt;), которая принимает на вход слова длины n и подсказку &amp;lt;tex&amp;gt; a_n &amp;lt;/tex&amp;gt;. Полученная схема будет полиномиального размера. Зашьем подсказку в самой схеме, то есть впишем в нее значения битов подсказки. Получим схему &amp;lt;tex&amp;gt; C_n &amp;lt;/tex&amp;gt; полиномиального размера, принимающую слова длины n и определяющую их принадлежность языку L. Такие схемы можно получить для любой длины входа. Значит, &amp;lt;tex&amp;gt; P/poly \subset PSIZE &amp;lt;/tex&amp;gt;.     &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D1%8B_%D0%BE_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B0%D0%BF%D1%81%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B8%D0%BD%D0%BE%D0%BC%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8&amp;diff=23002</id>
		<title>Теоремы о коллапсе полиномиальной иерархии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D1%8B_%D0%BE_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B0%D0%BF%D1%81%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B8%D0%BD%D0%BE%D0%BC%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8&amp;diff=23002"/>
				<updated>2012-05-31T10:34:46Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Лемма&lt;br /&gt;
|statement = Если &amp;lt;tex&amp;gt;\Sigma_i = \Sigma_{i+1}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\Pi_i = \Pi_{i+1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = &amp;lt;tex&amp;gt;L \in \Pi_{i+1} \Leftrightarrow \overline{L} \in \Sigma_{i+1} \Leftrightarrow \overline{L} \in \Sigma_i \Leftrightarrow L \in \Pi_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема о коллапсе полиномиальной иерархии при совпадении &amp;lt;tex&amp;gt;\Sigma_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\Sigma_{i+1}&amp;lt;/tex&amp;gt; ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если существует &amp;lt;tex&amp;gt;i \colon \Sigma_i = \Sigma_{i+1}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\Sigma_i = \mathrm{PH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = Для доказательства теоремы достаточно показать, что если такое &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; существует, то &amp;lt;tex&amp;gt;\forall j &amp;gt; i&amp;lt;/tex&amp;gt; верно, что &amp;lt;tex&amp;gt;\Sigma_i = \Sigma_j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем по индукции.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;\Sigma_i = \Sigma_{i+1}&amp;lt;/tex&amp;gt; из условия.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Индукционный переход'''. Докажем, что если &amp;lt;tex&amp;gt;\Sigma_n = \Sigma_{n+1}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\Sigma_{n+1} = \Sigma_{n+2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим язык &amp;lt;tex&amp;gt;L \in \Sigma_{n+2}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;L = \{x \colon \exists y_1 \forall y_2 \ldots Q y_{n+2} R_L^{n+2}(x, y_1 \ldots y_{n+2})\}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;\forall y_2 \ldots Q y_{n+2} R_L^{n+2}(x, y_1 \ldots y_{n+2}) = f(x, y_1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда получим язык &amp;lt;tex&amp;gt;L_f = \{\langle x, y_1\rangle \colon f(x, y_1) = 1\}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;L_f \in \Pi_{n+1}&amp;lt;/tex&amp;gt; и из вышедоказанной леммы следует, что &amp;lt;tex&amp;gt;L_f \in \Pi_n&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Из определения сложностного класса &amp;lt;tex&amp;gt;\Pi_n&amp;lt;/tex&amp;gt; получаем, что &amp;lt;tex&amp;gt;\exists R_{L_f}^{n} \colon \langle x, y_1 \rangle \in L_f \Leftrightarrow \forall y_2 \exists y_3 \ldots Q y_{n+1} R_{L_f}^{n}(\langle x, y_1\rangle, y_2 \ldots y_{n+1})&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;x \in L \Leftrightarrow \exists y_1 \forall y_2 \ldots Q y_{n+1} R_L^{n+1}(x, y_1, y_2 \ldots y_{n+1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;R_L^{n+1}(x, y_1, y_2 \ldots y_{n+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;R_{L_f}^n(\langle x, y_1\rangle, y_2 \ldots y_{n+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
То есть язык &amp;lt;tex&amp;gt;L \in \Sigma_{n+1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема о коллапсе полиномиальной иерархии при совпадении &amp;lt;tex&amp;gt;\Sigma_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\Pi_i&amp;lt;/tex&amp;gt; ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если существует &amp;lt;tex&amp;gt;i &amp;gt; 0\colon \Sigma_i = \Pi_i&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\Sigma_i = \mathrm{PH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = &lt;br /&gt;
Для доказательства покажем, что &amp;lt;tex&amp;gt;\Sigma_i = \Sigma_{i+1}&amp;lt;/tex&amp;gt;, и воспользуемся предыдущей теоремой.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим язык &amp;lt;tex&amp;gt;L \in \Sigma_{i+1}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;L =\{x \colon \exists y_1 \forall y_2 \ldots Q y_{i+1} R_L^{i+1}(x, y_1 \ldots y_{i+1})\}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;\forall y_2 \exists y_3 \ldots Q y_{i+1} R_L^{i+1}(x, y_1 \ldots y_{i+1}) = f(x, y_1)&amp;lt;/tex&amp;gt;. Получим язык &amp;lt;tex&amp;gt;L_f = \{ \langle x, y_1 \rangle \colon f(x, y_1) = 1\}&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;L_f \in \Pi_i&amp;lt;/tex&amp;gt;, и из условия теоремы &amp;lt;tex&amp;gt;L_f \in \Sigma_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По определению сложностного класса &amp;lt;tex&amp;gt;\Sigma_i \; \exists R_{L_f}^i \colon \langle x, y_1 \rangle \in L_f \Leftrightarrow \exists y_2 \forall y_3 \ldots Q y_{i+1} R_{L_f}^i(\langle x, y_1 \rangle, y_2 \ldots y_{i+1})&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;x \in L \Leftrightarrow \exists \langle y_1, y_2 \rangle \forall y_3 \ldots Q y_{i+1} R_L^i(x, \langle y_1, y_2\rangle \ldots y_{i+1})&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;R_L^i(x, \langle y_1, y_2\rangle, y_3 \ldots, y_{i+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;R_{L_f}^i(\langle x, y_1\rangle, y_2, y_3 \ldots y_{i+1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;L \in \Sigma_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;\Sigma_0 = \Pi_0 = \mathrm{P}&amp;lt;/tex&amp;gt;, а потому формулировка теоремы не имеет смысла при &amp;lt;tex&amp;gt;i = 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Классы PH, Σ и Π]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_PH,_%CE%A3_%D0%B8_%CE%A0&amp;diff=23001</id>
		<title>Классы PH, Σ и Π</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_PH,_%CE%A3_%D0%B8_%CE%A0&amp;diff=23001"/>
				<updated>2012-05-31T10:34:13Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Классы Σ и Π ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\Sigma_{i} = \{L|\exists R(x,y_{1},\cdots,y_{i}) \in P, p&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;poly : \forall x \in L \Leftrightarrow \exists y_{1} \forall y_{2} \exists y_{3} \cdots Q y_{i} : \forall j |y_{j}|~\le~p(|x|), R(x,y_{1},\cdots,y_{i})\},&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
где &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; — формальный язык &amp;lt;tex&amp;gt;,Q = \exists&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;i = 2k$-$1,&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;Q = \forall&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;i = 2k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;\Pi_{i} = \{L|\exists R(x, y_{1},\cdots,y_{i}) \in P, p&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;poly : \forall x \in L \Leftrightarrow \forall y_{1} \exists y_{2} \forall y_{3} \cdots Q y_{i} : \forall j |y_{j}|~\le~p(|x|), R(x, y_{1}, \cdots, y_{i}) \},&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
где &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; — формальный язык &amp;lt;tex&amp;gt;,Q = \forall&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;i = 2k$-$1,&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;Q = \exists&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;i = 2k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Взаимоотношения между классами Σ и Π ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = &amp;lt;tex&amp;gt;\Sigma_{i} \subset \Sigma_{i+1} \cap \Pi_{i+1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = Пусть &amp;lt;tex&amp;gt;L \in \Sigma_{i} \Rightarrow \exists R : x \in L \Leftrightarrow \exists y_{1} \cdots Q y_{i} : R(x,y_{1},\cdots,y_{i}), \forall j |y_{j}| \le poly(|x|)&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Проверим, что &amp;lt;tex&amp;gt;L \in \Sigma_{i+1} \Leftrightarrow \exists R' : x \in L \Leftrightarrow \exists y_{1} \cdots Q y_{i} \bar{Q} y_{i+1} : R'(x,y_{1},\cdots,y_{i},y_{i+1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;tex&amp;gt;R'(x,y_{1},\cdots,y_{i+1})&amp;lt;/tex&amp;gt; {&lt;br /&gt;
    return &amp;lt;tex&amp;gt;R(x,y_{1},\cdots,y_{i})&amp;lt;/tex&amp;gt;;&lt;br /&gt;
  }&lt;br /&gt;
Проверим, что &amp;lt;tex&amp;gt;L \in \Pi_{i+1} \Leftrightarrow \exists R'' : x \in L \Leftrightarrow \forall y_{0} \exists y_{1} \cdots Q y_{i} : R''(x,y_{0},y_{1},\cdots,y_{i})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;tex&amp;gt;R''(x,y_{0},y_{1},\cdots,y_{i})&amp;lt;/tex&amp;gt; {&lt;br /&gt;
    return &amp;lt;tex&amp;gt;R(x,y_{1},\cdots,y_{i})&amp;lt;/tex&amp;gt;;&lt;br /&gt;
  }&lt;br /&gt;
Т.о., &amp;lt;tex&amp;gt;\Sigma_{i} \subset \Sigma_{i+1}, \Sigma_{i} \subset \Pi_{i+1} \Rightarrow \Sigma_{i} \subset \Sigma_{i+1} \cap \Pi_{i+1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = &amp;lt;tex&amp;gt;\Pi_{i} \subset \Sigma_{i+1} \cap \Pi_{i+1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = Пусть &amp;lt;tex&amp;gt;L \in \Pi_{i} \Rightarrow \exists R : x \in L \Leftrightarrow \forall y_{1} \cdots Q y_{i} : R(x,y_{1},\cdots,y_{i}), \forall j |y_{j}| \le poly(|x|)&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Проверим, что &amp;lt;tex&amp;gt;L \in \Pi_{i+1} \Leftrightarrow \exists R' : x \in L \Leftrightarrow \forall y_{1} \cdots Q y_{i} \bar{Q} y_{i+1} : R'(x,y_{1},\cdots,y_{i},y_{i+1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;tex&amp;gt;R'(x,y_{1},\cdots,y_{i+1})&amp;lt;/tex&amp;gt; {&lt;br /&gt;
    return &amp;lt;tex&amp;gt;R(x,y_{1},\cdots,y_{i})&amp;lt;/tex&amp;gt;;&lt;br /&gt;
  }&lt;br /&gt;
Проверим, что &amp;lt;tex&amp;gt;L \in \Sigma_{i+1} \Leftrightarrow \exists R'' : x \in L \Leftrightarrow \exists y_{0} \forall y_{1} \cdots Q y_{i} : R''(x,y_{0},y_{1},\cdots,y_{i})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
  &amp;lt;tex&amp;gt;R''(x,y_{0},y_{1},\cdots,y_{i})&amp;lt;/tex&amp;gt; {&lt;br /&gt;
    return &amp;lt;tex&amp;gt;R(x,y_{1},\cdots,y_{i})&amp;lt;/tex&amp;gt;;&lt;br /&gt;
  }&lt;br /&gt;
Т.о., &amp;lt;tex&amp;gt;\Pi_{i} \subset \Sigma_{i+1}, \Pi_{i} \subset \Pi_{i+1} \Rightarrow \Pi_{i} \subset \Sigma_{i+1} \cap \Pi_{i+1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = &amp;lt;tex&amp;gt;\Sigma_{i} = co\Pi_{i}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = &amp;lt;tex&amp;gt;co\Pi_{i} = \{L|\exists R(x,y_{1},\cdots,y_{i}) \in P, p&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;poly: x \in L \Leftrightarrow \exists y_{1} \forall y_{2} \cdots Q y_{i} : \forall j |y_j|~\le~p(|x|), R(x,y_{1},\cdots,y_{i})\}.&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Из самого выражения для &amp;lt;tex&amp;gt;co\Pi_{i}&amp;lt;/tex&amp;gt; очевидно равенство.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Класс PH ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;PH_{1} = {\bigcup \atop {k \in \mathbb{N}}} \Sigma_{i}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;PH_{2} = {\bigcup \atop {k \in \mathbb{N}}} \Pi_{i}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;PH_{3} = {\bigcup \atop {k \in \mathbb{N}}} (\Sigma_{i} \cup \Pi_{i})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Все три определения класса &amp;lt;tex&amp;gt;PH&amp;lt;/tex&amp;gt; эквивалентны, т.е. &amp;lt;tex&amp;gt;PH_{1} = PH_{2} = PH_{3}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = &amp;lt;tex&amp;gt;\Sigma_{i} \subset \Pi_{i+1} \Rightarrow PH_{1} \subset PH_{2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\Pi_{i} \subset (\Sigma_{i+1} \cap \Pi_{i+1}) \subset (\Sigma_{i+1} \cup \Pi_{i+1}) \Rightarrow PH_{2} \subset PH_{3}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\Pi_{i} \subset \Sigma_{i+1}, \Sigma_{i} \subset \Sigma_{i+1} \Rightarrow PH_{3} \subset PH_{1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Т.о., &amp;lt;tex&amp;gt;PH_{1} \subset PH_{2} \subset PH_{3} \subset PH_{1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = &amp;lt;tex&amp;gt;PH \subset PS&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = Пусть &amp;lt;tex&amp;gt;L \in \Sigma_{i} \Rightarrow \exists R : x \in L \Leftrightarrow \exists y_{1} \cdots Q y_{i} : R(x,y_{1},\cdots,y_{i}), \forall j |y_{j}| \le poly(|x|)&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
То есть, для перебора всех возможных значений &amp;lt;tex&amp;gt;y_{j}&amp;lt;/tex&amp;gt; потребуется не более, чем &amp;lt;tex&amp;gt;i \cdot poly(|x|)&amp;lt;/tex&amp;gt; памяти. Заметим, что &amp;lt;tex&amp;gt;i \cdot poly(|x|)&amp;lt;/tex&amp;gt; тоже полином.&lt;br /&gt;
Таким образом, для любого формального языка из &amp;lt;tex&amp;gt;PH&amp;lt;/tex&amp;gt; существует программа, разрешающая его на полиномиальной памяти. То есть, любой формальный язык из &amp;lt;tex&amp;gt;PH&amp;lt;/tex&amp;gt; принадлежит &amp;lt;tex&amp;gt;PS&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23000</id>
		<title>Классы L, NL, coNL. NL-полнота задачи о достижимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_L,_NL,_coNL._NL-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D0%BE_%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=23000"/>
				<updated>2012-05-31T10:33:58Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на детерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;L = \mathrm{DSPACE}(O(\log n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;''' — множество языков, разрешимых на недетерминированной машине Тьюринга с использованием &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; дополнительной памяти для входа длиной &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NL} = \mathrm{NSPACE}(O(\log n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Класс &amp;lt;tex&amp;gt;\mathrm{coNL}&amp;lt;/tex&amp;gt;''' — множество языков, дополнение до которых принадлежит &amp;lt;tex&amp;gt;NL&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;L \in \mathrm{NL} \in P.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
1. Детерминированная машина Тьюринга есть частный случай недетерминированной, поэтому &amp;lt;tex&amp;gt;L \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
2. Число конфигураций машины, использующей &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; памяти не превышает &amp;lt;tex&amp;gt;2^{O(\log n)} = n^{O(1)} = poly(n)&amp;lt;/tex&amp;gt;, а, следовательно, машина завершает свою работу за &amp;lt;tex&amp;gt;O(poly(n))&amp;lt;/tex&amp;gt; времени. Следовательно, &amp;lt;tex&amp;gt;\mathrm{NL} \in P.&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==NL-полнота==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;'''называют &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;-полным, если &amp;lt;tex&amp;gt;X \in \mathrm{NL}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall Y : Y \in NL, Y \leq_L X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = Задача существования пути между двумя заданными вершинами в данном графе NL-полна.&lt;br /&gt;
| proof = &lt;br /&gt;
Задача &amp;lt;tex&amp;gt;\mathrm{CONN} = \{\langle G, s, t \rangle&amp;lt;/tex&amp;gt; : в графе G &amp;lt;tex&amp;gt;\exists &amp;lt;/tex&amp;gt; путь из s в t&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что &amp;lt;tex&amp;gt;\mathrm{CONN} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для доказательства необходимо предъявить алгоритм для недетерминированной машины Тьюринга, который использует конечное число переменных, каждая из которых занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти, где &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; - размер входа для задачи и за время порядка &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt; решает эту задачу.&lt;br /&gt;
&lt;br /&gt;
Алгоритм&lt;br /&gt;
&lt;br /&gt;
1. Начиная с вершины &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; недетерминированно переходим в одну из вершин, смежных с ней. (Очевидно, для этого необходимо конечное число переменных)&lt;br /&gt;
&lt;br /&gt;
2. Проверяем, правда ли, что текущая вершина совпадает с &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;. Если это так, возвращает TRUE.&lt;br /&gt;
&lt;br /&gt;
3. Отдельно считаем количество пройденных вершин. Как только это число превышает количество вершин в графе, возвращаем FALSE, так как посетили некоторую вершину дважды.&lt;br /&gt;
&lt;br /&gt;
Таким образом в каждый момент алгоритму достаточно хранить текущую вершину, количество посещенных вершин, финальную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; и некоторое число вспомогательных переменных, для совершения переходов. Все эти переменные принимают значения не более, чем максимальный номер вершины, то есть как раз занимают &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
Теперь докажем, что любая задача из класса &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; сводится к задаче &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt; с использованием не более чем логарифмической памяти.&lt;br /&gt;
&lt;br /&gt;
Необходимо по данной задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt; построить тройку &amp;lt;tex&amp;gt; \langle G, s, t \rangle &amp;lt;/tex&amp;gt;, решение задачи &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt; для которой будет эквивалентно решению данной задачи.&lt;br /&gt;
&lt;br /&gt;
Любая машина Тьюринга, которая принимает некоторый язык &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, использует не более чем логарифмическое количество ячеек на рабочей ленте, и таким образом возможных мгновенных описаний этой машины Тьюринга &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;. Каждому возможному мгновенному описанию машины Тьюринга будет соответствовать некоторая вершина в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, а каждому переходу из этого описания в другое (которых в недетерминированной машине Тьюринга конечное число) {{---}} ребро в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. За вершину &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; принимается вершина, соответствующая начальному состоянию машины, а из каждой вершины, соответствующей некоторому допускающему состоянию, добавляется переход в выделенную вершину &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что для любого слова из языка &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt;, то есть принимаемого данной машиной Тьюринга, будет существовать путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; в построенном графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;. А если для некоторого слова не из &amp;lt;tex&amp;gt;\mathrm{L}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt;, то он соответствует некоторой корректной последовательности переходов в изначальной машине, таким образом слово должно было приниматься этой недетерминированной машиной.&lt;br /&gt;
&lt;br /&gt;
Такое построение графа &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; по данной машине Тьюринга можно выполнить с использованием конечного числа переменных, которые будут перебирать всевозможные мгновенные состояния машины (их &amp;lt;tex&amp;gt; O(poly(n)) &amp;lt;/tex&amp;gt;, потому переменная, перебирающая его занимает &amp;lt;tex&amp;gt; O(\log n) &amp;lt;/tex&amp;gt; памяти), переходы из него и проверка возможности перехода.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Теорема Иммермана==&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
| proof = &lt;br /&gt;
Решим задачу &amp;lt;tex&amp;gt;\mathrm{NCONN} = \{\langle G, s, t \rangle&amp;lt;/tex&amp;gt; : в графе G нет пути из s в t&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;. Очевидно, что этот язык является дополнением языка &amp;lt;tex&amp;gt;\mathrm{CONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Чтобы показать, что &amp;lt;tex&amp;gt;\mathrm{NCONN}\in \mathrm{NL}&amp;lt;/tex&amp;gt;, придумаем недетерминированый алгоритм, использующий &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, который проверяет, достижима ли вершина  &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; из  &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Определим &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; = {&amp;lt;tex&amp;gt;v:&amp;lt;/tex&amp;gt; существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; длиной &amp;lt;tex&amp;gt;\leq i&amp;lt;/tex&amp;gt;}.&lt;br /&gt;
Другими словами это множество всех вершин, достижимых из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; не более чем за &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;|R_i|&amp;lt;/tex&amp;gt; за &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если &amp;lt;tex&amp;gt;t \notin R_{n-1}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |V|&amp;lt;/tex&amp;gt;, то не существует путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\langle G, s, t \rangle \in \mathrm{NCONN}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Лемма&lt;br /&gt;
| statement = Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
| proof = &lt;br /&gt;
Можно построить недетерминированный алгоритм, который будет допускать &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; и при этом будет перечислять все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
    '''Enum'''(&amp;lt;tex&amp;gt;s, i, ri, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\leftarrow&amp;lt;/tex&amp;gt; 0                 //количество уже найденных и выведенных элементов&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt; '''do'''              //перебираем все вершины графа&lt;br /&gt;
        '''continue''' or find path      //недетерминированно угадываем путь из s до v или переходим к следующей вершине&lt;br /&gt;
        &amp;lt;tex&amp;gt;counter&amp;lt;/tex&amp;gt;++&lt;br /&gt;
        '''return'''' &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;                //выдаем вершину, до которой угадали путь&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;counter \geq r_i&amp;lt;/tex&amp;gt;)             //нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, допускаем, завершаем работу&lt;br /&gt;
        '''accept'''&lt;br /&gt;
    '''reject'''                  //не нашли &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; вершин, не допускаем&lt;br /&gt;
    &lt;br /&gt;
'''Enum''' перебирает все вершины на логарифмической памяти и пытается угадать путь до этой вершины из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Под угадыванием пути подразумевается последовательность недетерминированных выборов следующей вершины пути из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для угадывания пути необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как необходимо лишь хранить текущую и следующую угадываемую вершины угадываемого пути. &lt;br /&gt;
'''Enum''' является недетерминированым алгоритмом, и если существует порядок его исполнения достигающий '''accept''', то происходит допуск.&lt;br /&gt;
&lt;br /&gt;
Теперь, имея '''Enum''', можно по индукции находить &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;.               &lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;R_0&amp;lt;/tex&amp;gt; содержит единственную вершину — &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть известно значение &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Напишем программу, которая на логарифмической памяти будет находить &amp;lt;tex&amp;gt;r_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''Next'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r = 1&amp;lt;/tex&amp;gt;                              //&amp;lt;tex&amp;gt;r_{i+1}&amp;lt;/tex&amp;gt; хотя бы один, так как &amp;lt;tex&amp;gt;r \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;v = 1..n&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;v \ne s&amp;lt;/tex&amp;gt; '''do'''               //перебираем все вершины графа, кроме &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; — это кандидаты на попадание в &amp;lt;tex&amp;gt;R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''for''' &amp;lt;tex&amp;gt;u : (u, v) \in E&amp;lt;/tex&amp;gt; '''do'''               //перебираем все ребра, входящие в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;&lt;br /&gt;
        '''if''' (&amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, i, r_i, G&amp;lt;/tex&amp;gt;))   //перечисляем все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; одна из них, то &amp;lt;tex&amp;gt;v \in R_{i+1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;++                            //увеличиваем количество найденных вершин и переходим к рассмотрению следующего кандидата&lt;br /&gt;
          '''break''' &lt;br /&gt;
    '''return''' &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм изначально учитывает &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, а затем перебирает всех возможных кандидатов &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; на попадание в &amp;lt;tex&amp;gt;R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для каждого из них перебираются все ребра, в него входящие.&lt;br /&gt;
Затем перечисляются все вершины из &amp;lt;tex&amp;gt;R_i&amp;lt;/tex&amp;gt; и, если начало нашего ребра было перечислено, то &amp;lt;tex&amp;gt;v \in R_{i + 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так необходимо хранить лишь &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и еще поочередно значения полученные в результате вызова '''Enum'''.&lt;br /&gt;
&lt;br /&gt;
Теперь напишем алгоритм, который будет недетерминированно решать задачу &amp;lt;tex&amp;gt;\mathrm{NCONN}&amp;lt;/tex&amp;gt; на логарифмической памяти.&lt;br /&gt;
Он будет состоять из двух частей: вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; и перечисление всех вершин из &amp;lt;tex&amp;gt;R_{n - 1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Вычисление &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt; происходит путем вызова '''Next''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt; раз, при этом каждый раз в качестве &amp;lt;tex&amp;gt;r_i&amp;lt;/tex&amp;gt; подставляется новое полученное значение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  '''NCONN'''(&amp;lt;tex&amp;gt;G, s, t&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    &amp;lt;tex&amp;gt;r_n = 1&amp;lt;/tex&amp;gt;                             //&amp;lt;tex&amp;gt;r_0 = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;i = 0..n - 2&amp;lt;/tex&amp;gt; '''do'''                //вычисляем &amp;lt;tex&amp;gt;r_{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
      &amp;lt;tex&amp;gt;r_n = &amp;lt;/tex&amp;gt; '''Next'''(&amp;lt;tex&amp;gt;s, i, r_n, G&amp;lt;/tex&amp;gt;)&lt;br /&gt;
    '''if''' (&amp;lt;tex&amp;gt;t1&amp;lt;/tex&amp;gt; '''in''' '''Enum'''(&amp;lt;tex&amp;gt;s, n - 1, r_n, G&amp;lt;/tex&amp;gt;))   //перечисляем вершины из &amp;lt;tex&amp;gt;R_{n-1}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; была перечислена, то &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; достижима и выдаем '''reject''', иначе '''accept'''&lt;br /&gt;
      '''reject'''&lt;br /&gt;
    '''else'''&lt;br /&gt;
      '''accept'''&lt;br /&gt;
&lt;br /&gt;
Данный алгоритм использует &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти, так как для хранения &amp;lt;tex&amp;gt;r_n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt;, и для вызываемых '''Next''' и '''Enum''' необходимо &amp;lt;tex&amp;gt;O(\log |G|)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
Таким образом показано, что &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;\mathrm{CONN} \in \mathrm{NLC}&amp;lt;/tex&amp;gt;, то аналогичным образом &amp;lt;tex&amp;gt;\mathrm{NCONN} \in \mathrm{coNLC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Получаем, что любую задачу из &amp;lt;tex&amp;gt;\mathrm{coNL}&amp;lt;/tex&amp;gt; можно свести к задаче из &amp;lt;tex&amp;gt;\mathrm{NL}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\mathrm{coNL} \subset \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Из соображений симметрии  &amp;lt;tex&amp;gt;\mathrm{NL} \subset \mathrm{coNL}&amp;lt;/tex&amp;gt;, а значит  &amp;lt;tex&amp;gt;\mathrm{coNL} = \mathrm{NL}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=22999</id>
		<title>PS-полнота языка верных булевых формул с кванторами (TQBF)</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=PS-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B1%D1%83%D0%BB%D0%B5%D0%B2%D1%8B%D1%85_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB_%D1%81_%D0%BA%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D1%80%D0%B0%D0%BC%D0%B8_(TQBF)&amp;diff=22999"/>
				<updated>2012-05-31T10:33:43Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt; расшифровывается как True Quantified Boolean Formula. Это язык верных булевых формул с кванторами.&lt;br /&gt;
&amp;lt;tex&amp;gt;TQBF=\{Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n), Q_i \in \{\forall, \exists\}\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Чтобы доказать, что &amp;lt;tex&amp;gt;TQBF \in PSPACE-complete&amp;lt;/tex&amp;gt;, необходимо показать, что эта задача принадлежит &amp;lt;tex&amp;gt;PSPACE&amp;lt;/tex&amp;gt; и что она &amp;lt;tex&amp;gt;PSPACE&amp;lt;/tex&amp;gt;-трудная.&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TQBF \in PSPASE&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Чтобы доказать это, просто приведём программу &amp;lt;tex&amp;gt;solve&amp;lt;/tex&amp;gt;, решающую булеву формулу с кванторами на &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти и работающую за конечное время.&lt;br /&gt;
 &amp;lt;tex&amp;gt;solve(Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 == \forall&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \land solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;Q_1 == \exists&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;solve(Q_2 x_2 \cdots Q_n x_n \phi(0, x_2, \dots, x_n)) \lor solve(Q_2 x_2 \cdots Q_n x_n \phi(1, x_2, \dots, x_n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
Эта программа требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; дополнительной памяти для хранения стека рекурсивных вызовов. Максимальная глубина стека — &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt; \forall L \in PS , L \leq_p TQBF&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Рассмотрим какой-то язык &amp;lt;tex&amp;gt;L \in PSPACE&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Построим функцию &amp;lt;tex&amp;gt;f \colon \forall x \in L \Leftrightarrow f(x) \in TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;L \in PSPACE&amp;lt;/tex&amp;gt;, то существует какая-то детерминированная машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которая его распознаёт за полиномиальное от размера входа время.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; — мгновенное описание &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, тогда выражение &amp;lt;tex&amp;gt;\exists I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\exists x_1) (\exists x_2)\cdots(\exists x_n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\{x_i\}&amp;lt;/tex&amp;gt; — все переменные мгновенного описания &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Аналогично выражение &amp;lt;tex&amp;gt; \forall I&amp;lt;/tex&amp;gt; обозначает &amp;lt;tex&amp;gt; (\forall x_1) (\forall x_2)\dots(\forall x_n)&amp;lt;/tex&amp;gt;. Теперь рассмотрим два мгновенных описание &amp;lt;tex&amp;gt;M: A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. Напишем рекурсивную функцию &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt;, которая будет переводить утверждение &amp;lt;tex&amp;gt;A\vdash^tB&amp;lt;/tex&amp;gt; в TQBF за полиномиальное относительно длины входа время. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\phi(A, B, t) = \\ (\exists R) (\forall U) (\forall V) \ \{\phi(U, V, t/2) \lor [\neg(A = U \land R = V) \land \neg(R = U \land B = V)]\}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Переменые &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; важно рассмотреть только в двух случаях: когда первое из них стартовое, второе — промежуточное, или первое — промежуточное, а второе — финишное. Поэтому для всех остальных вариантов выражение &amp;lt;tex&amp;gt;[\neg(A = U \land R = V) \land \neg(R = U \land B = V)]&amp;lt;/tex&amp;gt; будет истинно. Если &amp;lt;tex&amp;gt;A = U \land R = V&amp;lt;/tex&amp;gt; то, чтобы &amp;lt;tex&amp;gt;\phi(A, B, t)&amp;lt;/tex&amp;gt; было истинно, необходимо наличие такого мгновенного описания &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, чтобы было выполненно утверждение: &amp;lt;tex&amp;gt;A\vdash^{t/2}R&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;R = U \land B = V&amp;lt;/tex&amp;gt; то, нас интересует мгновенное описание &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;R\vdash^{t/2}B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Заметим, что размер функции &amp;lt;tex&amp;gt;\phi(a, B, t)&amp;lt;/tex&amp;gt; равен размеру &amp;lt;tex&amp;gt;\phi(A, B, t/2)&amp;lt;/tex&amp;gt; с константной добавкой &amp;lt;tex&amp;gt;(\exists R) (\forall U) (\forall V) \ \{\ * \lor [\neg(A = U \land B = R) \land \neg(A = R \land B = V)]\}&amp;lt;/tex&amp;gt; .&lt;br /&gt;
Теперь мы можем записать функцию &amp;lt;tex&amp;gt;f(M, w)&amp;lt;/tex&amp;gt;, которая будет переводить ДМТ &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; и слово на ленте &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;TQBF&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;f(M, w) = (\exists I_s) (\exists I_f) (x_{I_s, 0} = start \land x_{I_s, 1} = w[1] \land \dots \land x_{I_s, |w|} = w[|w|]) \land ((\exists i) x_{I_f, i} = finish) \land \phi(Start, Finish, 2^{log_2(c^{1+p(n)}})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Докажем, что получившаяся булева формула с кванторами удовлетворима тогда и только тогда, когда &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \in L&amp;lt;/tex&amp;gt;, то стартовое и финишное состояние заданы корректно. Также из стартового состояния можно попасть в финишное за полиномиальное время. &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;w \not\in L&amp;lt;/tex&amp;gt;, то если мы зададим корректное стартовое состояние, то пути до корректного финишного состояния существовать не может.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A1%D1%8D%D0%B2%D0%B8%D1%87%D0%B0._%D0%A1%D0%BE%D0%B2%D0%BF%D0%B0%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2_NPS_%D0%B8_PS&amp;diff=22998</id>
		<title>Теорема Сэвича. Совпадение классов NPS и PS</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A1%D1%8D%D0%B2%D0%B8%D1%87%D0%B0._%D0%A1%D0%BE%D0%B2%D0%BF%D0%B0%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2_NPS_%D0%B8_PS&amp;diff=22998"/>
				<updated>2012-05-31T10:33:31Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Класс PS=&lt;br /&gt;
&lt;br /&gt;
== Определение ==&lt;br /&gt;
{{Определение &lt;br /&gt;
|definition='''Класс''' &amp;lt;tex&amp;gt;\mathrm{PS(PSPACE)}&amp;lt;/tex&amp;gt; {{---}} класс языков, разрешимых на детерминированной машине Тьюринга с использованием памяти полиномиального размера. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{PS}=\bigcup\limits_{p(n) \in \mathrm{P}} \mathrm{DSPACE}(p(n)) &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение &lt;br /&gt;
|definition='''Класс''' &amp;lt;tex&amp;gt;\mathrm{NPS(NPSPACE)}&amp;lt;/tex&amp;gt; {{---}} класс языков, разрешимых на недетерминированной машине Тьюринга с использованием памяти полиномиального размера. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NPS}=\bigcup\limits_{p(n) \in \mathrm{P}} \mathrm{NSPACE}(p(n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Связь класса PS с другими классами теории сложности ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{P} \subseteq \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = Рассмотрим любой язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;, то существует машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, распознающая &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; за полиномиальное время. Это значит, что &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; не сможет использовать более, чем полиномиальное количество памяти, следовательно &amp;lt;tex&amp;gt; L \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NP} \subseteq \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof = Рассмотрим любой язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;L \in \mathrm{NP}&amp;lt;/tex&amp;gt;, то существует программа-верификатор &amp;lt;tex&amp;gt;R(x,y)&amp;lt;/tex&amp;gt;, что для каждого слова из &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; (и только для них) существует такой сертификат &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; полиномиальной длины, что &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; допускает слово и сертификат. Тогда, чтобы проверить принадлежность слова языку, мы можем перебрать все сертификаты полиномиальной длины. Для этого необходим полиномиальный размер памяти. Из этого следует, что &amp;lt;tex&amp;gt;L \in \mathrm{PS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Теорема Сэвича=&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Для любой &amp;lt;tex&amp;gt;f(n) \ge \log n &amp;lt;/tex&amp;gt; справедливо: &amp;lt;tex&amp;gt;\mathrm{NSPACE}(f(n)) \subseteq \mathrm{DSPACE}(f(n)^2)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть, если недетерминированная машина Тьюринга может решить проблему используя &amp;lt;tex&amp;gt;f(n)&amp;lt;/tex&amp;gt; памяти, то существует детерминированная машина Тьюринга, которая решает эту же проблему, используя не больше, чем &amp;lt;tex&amp;gt;f(n)^2&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
|proof = &lt;br /&gt;
Рассмотрим машину Тьюринга с входной и рабочей лентой. Ее конфигурацию &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; можно закодировать так: закодировать позицию и содержание рабочей ленты (займет &amp;lt;tex&amp;gt;O(\log (f(n)))+O(f(n))&amp;lt;/tex&amp;gt; памяти), позицию входной ленты (займет &amp;lt;tex&amp;gt;O(\log n)&amp;lt;/tex&amp;gt; памяти).&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;f(n) \ge \log n &amp;lt;/tex&amp;gt;, то размер конфигурации составит &amp;lt;tex&amp;gt;O(f(n))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L \in \mathrm{NSPACE}(f(n))&amp;lt;/tex&amp;gt;. Тогда существует недетерминированная машина Тьюринга, распознающая этот язык.&amp;lt;br&amp;gt;&lt;br /&gt;
Рассмотрим вспомогательную функцию &amp;lt;tex&amp;gt;Reach(I, J, k)&amp;lt;/tex&amp;gt;, вычисляющую возможность перехода из конфигурации &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; в конфигурацию &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; за не более, чем &amp;lt;tex&amp;gt;2^k&amp;lt;/tex&amp;gt; переходов:&lt;br /&gt;
&lt;br /&gt;
  '''Reach''' (I, J, k)&lt;br /&gt;
    '''if''' (k = 0)&lt;br /&gt;
      '''return''' (I &amp;lt;tex&amp;gt;\vdash&amp;lt;/tex&amp;gt; J) or (I = J);&lt;br /&gt;
    '''else'''&lt;br /&gt;
      '''for''' (Y) // перебор промежуточных конфигураций&lt;br /&gt;
        '''if''' Reach(I, Y, k-1) and Reach(Y, J, k-1)&lt;br /&gt;
          '''return''' true;&lt;br /&gt;
    '''return''' false;&lt;br /&gt;
&lt;br /&gt;
Эта функция имеет глубину рекурсии &amp;lt;tex&amp;gt;O(k)&amp;lt;/tex&amp;gt;, на каждом уровне рекурсии использует &amp;lt;tex&amp;gt;O(f(n))&amp;lt;/tex&amp;gt; памяти для хранения текущих конфигураций.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим машину Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, распознающую язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Эта машина может иметь &amp;lt;tex&amp;gt;2^{df(n)}&amp;lt;/tex&amp;gt; конфигураций. Объясняется это следующим образом. Пусть &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; имеет &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; состояний и &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; символов ленточного алфавита. Количество различных строчек, которые могут появиться на рабочей ленте &amp;lt;tex&amp;gt;g^{f(n)}&amp;lt;/tex&amp;gt;. Головка на входной ленте может быть в одной из n позиций и в одной из &amp;lt;tex&amp;gt;f(n)&amp;lt;/tex&amp;gt; на рабочей ленте. Таким образом, общее количество всех возможных конфигураций не превышает &amp;lt;tex&amp;gt;cnf(n)g^{f(n)}=2^{\log c + \log n + \log (f(n)) + f(n) \log g}=2^{O(f(n))}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию, которая по заданному слову &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; проверяет его принадлежность к языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
  '''Check''' (x, L)&lt;br /&gt;
    '''for''' (T) // перебор конфигураций, которые содержат допускающие состояния&lt;br /&gt;
      '''if''' Reach(S, T, &amp;lt;tex&amp;gt;\log \left(2^{df(n)}\right)&amp;lt;/tex&amp;gt;)&lt;br /&gt;
        '''return''' true;&lt;br /&gt;
    '''return''' false;&lt;br /&gt;
&lt;br /&gt;
Если слово принадлежит языку, то оно будет допущено, так как будут рассмотрены все возможные пути допуска. Это обеспечивается указанной нам глубиной рекурсии для функции &amp;lt;tex&amp;gt;Reach&amp;lt;/tex&amp;gt;. И если слово не допускается за &amp;lt;tex&amp;gt;2^{df(n)}&amp;lt;/tex&amp;gt; шагов (количество всех возможных конфигураций), то оно уже гарантированно не может быть допущено. &lt;br /&gt;
В итоге функция &amp;lt;tex&amp;gt;Reach&amp;lt;/tex&amp;gt; имеет глубину рекурсии &amp;lt;tex&amp;gt;\log{2}^{df(n)}=O(f(n))&amp;lt;/tex&amp;gt;, на каждом уровне рекурсии используется &amp;lt;tex&amp;gt;O(f(n))&amp;lt;/tex&amp;gt; памяти. Тогда всего эта функция использует &amp;lt;tex&amp;gt;O(f(n)^2)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Следствие==&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{PS}=\mathrm{NPS}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Вывод=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{L} \subseteq \mathrm{P} \subseteq \mathrm{NP} \subseteq \mathrm{PS} = \mathrm{NPS}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Известно, что &amp;lt;tex&amp;gt;\mathrm{L} \neq \mathrm{PS} &amp;lt;/tex&amp;gt;. Так что хотя бы одно из рассмотренных включений {{---}} строгое, но неизвестно, какое. Принято считать, что все приведенные выше включения {{---}} строгие.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Источники=&lt;br /&gt;
* Michael Sipser. Introduction to the theory of computation.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=22997</id>
		<title>Теорема Махэни</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9C%D0%B0%D1%85%D1%8D%D0%BD%D0%B8&amp;diff=22997"/>
				<updated>2012-05-31T10:33:06Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;LSAT=\{\langle\phi,y\rangle | \exists x: x\le_{lex}y, \phi(x) = 1\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;LSAT \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
#Очевидно, что &amp;lt;tex&amp;gt;LSAT \in \mathrm{NP}&amp;lt;/tex&amp;gt; (в качестве сертификата можно запросить &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;).&lt;br /&gt;
#Сведём &amp;lt;tex&amp;gt;SAT&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;LSAT&amp;lt;/tex&amp;gt;. Для этого рассмотрим отображение &amp;lt;tex&amp;gt;\phi \mapsto \langle \phi, 1^{|\phi|}\rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|\phi|&amp;lt;/tex&amp;gt; — количество различных переменных в формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Ясно, что данное преобразование можно сделать за полиномиальное время. Теперь докажем, что сведение верное. &lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\phi \in SAT&amp;lt;/tex&amp;gt;, то формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, а значит &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in LSAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt;\langle \phi, 1^{|\phi|}\rangle \in LSAT&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x \le_{lex} 1^{|\phi|}, \phi(x)=1&amp;lt;/tex&amp;gt;. Значит формула &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; удовлетворима, и &amp;lt;tex&amp;gt;\phi \in SAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Таким образом, &amp;lt;tex&amp;gt;SAT \le LSAT&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;SAT \in \mathrm{NPC}&amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le SAT&amp;lt;/tex&amp;gt;. Тогда в силу транзитивности &amp;lt;tex&amp;gt;\forall L \in \mathrm{NP} \; L \le LSAT&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;LSAT \in \mathrm{NPH}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Итого мы доказали, что &amp;lt;tex&amp;gt;LSAT \in \mathrm{NPH}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;LSAT \in \mathrm{NP}&amp;lt;/tex&amp;gt;. Тогда по определению &amp;lt;tex&amp;gt;LSAT \in \mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in LSAT, y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in LSAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&amp;lt;tex&amp;gt;\langle\phi,y\rangle \in LSAT&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\exists x: x\le_{lex}y, \phi(x) = 1&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;y&amp;lt;_{lex}z&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\exists x: x&amp;lt;_{lex}z, \phi(x) = 1&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;\langle\phi,z\rangle \in LSAT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Махэни&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NPC} \cap \mathrm{SPARSE} \ne \varnothing \Rightarrow \mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=Пусть &amp;lt;tex&amp;gt;S \in \mathrm{NPC} \cap \mathrm{SPARSE}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;S\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;LSAT \in \mathrm{NP}&amp;lt;/tex&amp;gt;, то существует полиномиальная функция сведения &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; такая, что &amp;lt;tex&amp;gt;\langle \phi, y \rangle \in LSAT \iff f(\langle \phi, y \rangle) \in S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как функция &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; работает полиномиальное время, и &amp;lt;tex&amp;gt;|\phi|=|y|&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;|y|&amp;lt;/tex&amp;gt; — длина вектора &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;), то &amp;lt;tex&amp;gt;f(\langle\phi,y\rangle) \le q(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; — полином.&lt;br /&gt;
&amp;lt;tex&amp;gt;S\in SPARSE&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;\forall n \; |S \cap \Sigma^n|\le p(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; — некоторый полином. &lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le \sum\limits_{i=1}^{q(|\phi|)} p(i) = r(|\phi|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; — также полином.&lt;br /&gt;
&lt;br /&gt;
Опишем алгоритм для нахождения лексиграфически минимальной строки &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, удовлетворяющей формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;n=|\phi|, r=r(|\phi|)&amp;lt;/tex&amp;gt;. Изначально область поиска для &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; — все строки длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Опишем одну итерацию поиска.&lt;br /&gt;
&lt;br /&gt;
Разобьём текущее множество строк на &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; подотрезок примерно равной длины. Обозначим концы полученных подотрезков &amp;lt;tex&amp;gt;w_0,...,w_{r+1}&amp;lt;/tex&amp;gt;. Пусть теперь &amp;lt;tex&amp;gt;z_i=f(\langle\phi,w_i\rangle)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Из леммы (2) мы знаем, что, начиная с некоторого &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;, все пары &amp;lt;tex&amp;gt;\langle\phi, w_l\rangle \in LSAT&amp;lt;/tex&amp;gt;. Тогда по сведению &amp;lt;tex&amp;gt;z_j \in S&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j\ge l&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим два случая:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt;\exists i \ne j \, z_i=z_j&amp;lt;/tex&amp;gt;. Строки &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z_j&amp;lt;/tex&amp;gt; либо обе лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, либо обе не лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Тогда по вышеуказанной причине &amp;lt;tex&amp;gt;x\notin (w_i, w_j]&amp;lt;/tex&amp;gt;. Значит мы можем исключить этот полуинтервал из рассматриваемого множества. Таким образом, мы удаляем не менее &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; часть множества подстановок.&lt;br /&gt;
# &amp;lt;tex&amp;gt;z_i \ne z_j \, \forall i \ne j&amp;lt;/tex&amp;gt;. Как было показано выше, если &amp;lt;tex&amp;gt;z_0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;z_1&amp;lt;/tex&amp;gt; лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, то все последующие &amp;lt;tex&amp;gt;z_i&amp;lt;/tex&amp;gt; тоже лежат в &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, но тогда &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; содержит &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строку длины не более, чем &amp;lt;tex&amp;gt;q(|\phi|)&amp;lt;/tex&amp;gt;, что противоречит условию &amp;lt;tex&amp;gt;|\{x\in S\, |\, |x| \le q(|\phi|)\}| \le r(|\phi|)&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;x\notin[w_0,w_1]&amp;lt;/tex&amp;gt;, то есть его можно убрать из рассмотрения.&lt;br /&gt;
&lt;br /&gt;
В обоих случаях мы сузили область поиска как минимум на &amp;lt;tex&amp;gt;\frac 1{r+1}&amp;lt;/tex&amp;gt; её размера. &lt;br /&gt;
&lt;br /&gt;
Будем повторять эту процедуру до тех пор, пока не останется не более &amp;lt;tex&amp;gt;r+1&amp;lt;/tex&amp;gt; строки, которые мы можем проверить за полиномиальное время. Если какая-то из них удовлетворила формулу &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;x=min(w_i), w_i&amp;lt;/tex&amp;gt; удовлетворяет &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Иначе, &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; не существует.&lt;br /&gt;
&lt;br /&gt;
Оценим время работы нашего алгоритма. После &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; итераций у нас останется не более &amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k&amp;lt;/tex&amp;gt; строк. Оценим &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;2^n(1-\frac1{r+1})^k \simeq 1&amp;lt;/tex&amp;gt;. Отсюда &amp;lt;tex&amp;gt;k=O(rn)&amp;lt;/tex&amp;gt; (это можно получить, выразив &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; через &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и воспользовавшись [http://ru.wikipedia.org/wiki/Ряд_Тейлора#.D0.A0.D1.8F.D0.B4.D1.8B_.D0.9C.D0.B0.D0.BA.D0.BB.D0.BE.D1.80.D0.B5.D0.BD.D0.B0_.D0.BD.D0.B5.D0.BA.D0.BE.D1.82.D0.BE.D1.80.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9 формулой Тейлора] для логарифма). &lt;br /&gt;
&lt;br /&gt;
Таким образом, мы можем разрешить язык &amp;lt;tex&amp;gt;LSAT&amp;lt;/tex&amp;gt; за полиномиальное время, найдя лексиграфически минимальную строку, удовлетворяющую формулу, и сравнив её с нашим аргументом. Так как &amp;lt;tex&amp;gt;LSAT\in \mathrm{NPC}&amp;lt;/tex&amp;gt;, то мы можем решить любую задачу из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt; за полиномиальное время, а значит &amp;lt;tex&amp;gt;\mathrm{P}=\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Класс P]]&lt;br /&gt;
*[[Недетерминированные вычисления. Классы NP и Σ₁]]&lt;br /&gt;
*[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D0%B5%D1%80%D0%BC%D0%B0%D0%BD%D0%B0_%E2%80%94_%D0%A4%D0%BE%D1%80%D1%87%D1%83%D0%BD%D0%B0&amp;diff=22996</id>
		<title>Теорема Бермана — Форчуна</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D0%B5%D1%80%D0%BC%D0%B0%D0%BD%D0%B0_%E2%80%94_%D0%A4%D0%BE%D1%80%D1%87%D1%83%D0%BD%D0%B0&amp;diff=22996"/>
				<updated>2012-05-31T10:32:52Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Лемма&lt;br /&gt;
|about=1&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;L \in coNPC \Leftrightarrow \overline L \in NPC&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть &amp;lt;tex&amp;gt;L \in coNPC&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;L \in coNP&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline L \in NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим произвольный язык &amp;lt;tex&amp;gt;L_1 \in NP&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\overline {L_1} \in coNP&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;L \in coNPC&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\overline {L_1} \le L&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;L_1 \le \overline L&amp;lt;/tex&amp;gt; (по [[Сведение по Карпу. Трудные и полные задачи|лемме]]).&lt;br /&gt;
&lt;br /&gt;
Получили, что &amp;lt;tex&amp;gt;\overline L \in NP&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall L_1 \in NP \Rightarrow L_1 \le \overline L&amp;lt;/tex&amp;gt;. Значит &amp;lt;tex&amp;gt;\overline L \in NPC&amp;lt;/tex&amp;gt;.&lt;br /&gt;
В обратную сторону доказательство аналогично.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;TAUT = \{\phi&amp;lt;/tex&amp;gt; {{---}} булева формула &amp;lt;tex&amp;gt;| \forall x = (x_1, x_2, \ldots , x_m) \, \phi(x)=1\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=2&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;TAUT \in coNPC&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&amp;lt;tex&amp;gt;\overline {TAUT} = \{\phi | \exists x : \phi(x) \ne 1\} = \{\phi | \overline {\phi} \in SAT\}&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\overline {TAUT} \in NPC&amp;lt;/tex&amp;gt;. Тогда по лемме (1) &amp;lt;tex&amp;gt;TAUT \in coNPC&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;SPARSE = \{L | \exists&amp;lt;/tex&amp;gt; полином &amp;lt;tex&amp;gt;p: \forall n \, |L \cap \Sigma^n| \le p(n)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;coNPC \cap SPARSE \ne \varnothing \Rightarrow P = NP&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=Пусть существует &amp;lt;tex&amp;gt;S \in coNPC \cap SPARSE&amp;lt;/tex&amp;gt;. Разрешим &amp;lt;tex&amp;gt;TAUT&amp;lt;/tex&amp;gt; за полином.&lt;br /&gt;
&lt;br /&gt;
Для начала напишем программу, разрешающую &amp;lt;tex&amp;gt;TAUT&amp;lt;/tex&amp;gt;:&lt;br /&gt;
 &amp;lt;tex&amp;gt;check(\phi, i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;memo[\phi] \ne -1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;memo[\phi]&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\phi=0&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' 0&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\phi=1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' 1&lt;br /&gt;
     &amp;lt;tex&amp;gt;memo[\phi] \leftarrow check(\phi|_{x_i=0}, i+1)\, \&amp;amp;\&amp;amp;\, check(\phi|_{x_i=1}, i+1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;memo[\phi]&amp;lt;/tex&amp;gt;     &lt;br /&gt;
Ответом будет &amp;lt;tex&amp;gt;check(\phi, 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;TAUT \in coNPC&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \in coNPC&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;TAUT \le S&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;\exists f \in \widetilde{P} : \phi \in TAUT \Leftrightarrow f(\phi) \in S&amp;lt;/tex&amp;gt;. Поэтому, если в предыдущей программе заменить все обращения к &amp;lt;tex&amp;gt;memo[\phi]&amp;lt;/tex&amp;gt;, на &amp;lt;tex&amp;gt;memo[f(\phi)]&amp;lt;/tex&amp;gt;, то полученная программа по-прежнему будет разрешать &amp;lt;tex&amp;gt;TAUT&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим необходимый размер &amp;lt;tex&amp;gt;memo&amp;lt;/tex&amp;gt;. Можно считать, что &amp;lt;tex&amp;gt;T(f(\phi)) \le q(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |\phi|&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; {{---}} монотонно возрастающий полином. Тогда &amp;lt;tex&amp;gt;|f(\phi)| \le q(n)&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;S \in SPARSE&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|S \cap \Sigma^k| \le p(k)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} полином. Можно считать, что &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; монотонно возрастает. Тогда размер &amp;lt;tex&amp;gt;memo&amp;lt;/tex&amp;gt; можно оценить сверху: &amp;lt;tex&amp;gt;memo.size() \le \sum\limits_{i=0}^{q(n)}p(i) \le (1+q(n)) \cdot p(q(n)) \le r(n)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; {{---}} полином.&lt;br /&gt;
 &amp;lt;tex&amp;gt;check(\phi, i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;memo[f(\phi)] \ne -1&amp;lt;/tex&amp;gt;        //(1)&lt;br /&gt;
         '''return''' &amp;lt;tex&amp;gt;memo[f(\phi)]&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\phi=0&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' 0&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;\phi=1&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return''' 1&lt;br /&gt;
     &amp;lt;tex&amp;gt;memo[f(\phi)] \leftarrow check(\phi|_{x_i=0}, i+1)\, \&amp;amp;\&amp;amp;\, check(\phi|_{x_i=1}, i+1)&amp;lt;/tex&amp;gt;        //(2)&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;memo.size() &amp;gt; r(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''exit''' &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;memo[f(\phi)]&amp;lt;/tex&amp;gt;&lt;br /&gt;
Рассмотрим двоичное дерево, получающееся в результате рекурсивных вызовов данной программы.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим произвольный элемент &amp;lt;tex&amp;gt;memo[i]&amp;lt;/tex&amp;gt;. Заметим, что условие &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; в ходе выполнения программы является ложным при обращении к элементу &amp;lt;tex&amp;gt;memo[i]&amp;lt;/tex&amp;gt; не более одного раза. Так как всего в &amp;lt;tex&amp;gt;memo&amp;lt;/tex&amp;gt; не более &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; элементов, то суммарно за все время выполнения программы условие &amp;lt;tex&amp;gt;(1)&amp;lt;/tex&amp;gt; принимает ложное значение не более &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; раз. Отсюда следует, что присваивание &amp;lt;tex&amp;gt;(2)&amp;lt;/tex&amp;gt; выполняется не более &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; раз, а значит в дереве не более &amp;lt;tex&amp;gt;r(n)&amp;lt;/tex&amp;gt; внутренних вершин. Значит всего в дереве не более &amp;lt;tex&amp;gt;2 \cdot r(n) + 1&amp;lt;/tex&amp;gt; вершин, то есть данная программа работает за полиномиальное время.&lt;br /&gt;
&lt;br /&gt;
Итого, данная программа разрешает &amp;lt;tex&amp;gt;TAUT&amp;lt;/tex&amp;gt; за полиномиальное время. А так как &amp;lt;tex&amp;gt;TAUT \in coNPC&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;P=coNP&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;coP=coNP&amp;lt;/tex&amp;gt;, откуда &amp;lt;tex&amp;gt;P=NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;br /&gt;
/tex&amp;gt; {{---}} монотонно возрастающий полином. Тогда&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9B%D0%B5%D0%B2%D0%B8%D0%BD%D0%B0&amp;diff=22995</id>
		<title>Теорема Левина</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9B%D0%B5%D0%B2%D0%B8%D0%BD%D0%B0&amp;diff=22995"/>
				<updated>2012-05-31T10:32:31Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Теорема&lt;br /&gt;
|author=Левин&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого языка &amp;lt;tex&amp;gt;L \in \Sigma_1&amp;lt;/tex&amp;gt; и соответствующего ему (из определения &amp;lt;tex&amp;gt;\Sigma_1&amp;lt;/tex&amp;gt;) отношения &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt; существует «оптимальная» (работающая «не сильно дольше», чем любая другая) программа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, сопоставляющая словам из &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; их сертификаты, то есть:&lt;br /&gt;
# &amp;lt;tex&amp;gt;x \in L \Leftrightarrow R(x, p(x)) = 1&amp;lt;/tex&amp;gt;;&lt;br /&gt;
# для любой другой программы &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, для которой верно &amp;lt;tex&amp;gt;x \in L \Leftrightarrow R(x, q(x)) = 1&amp;lt;/tex&amp;gt;, найдутся такие константа &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; и полином &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\forall x \Rightarrow T(p, x) \le c \cdot T(q, x) + r(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Построим «оптимальную» программу &amp;lt;tex&amp;gt;p(x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пронумеруем все программы &amp;lt;tex&amp;gt;p_i&amp;lt;/tex&amp;gt;. Поместим их в различные потоки, подадим на вход слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и будем исполнять по одной инструкции в следующем порядке: на шаге с номером &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; запустим программу &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; таково, что &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; делится на &amp;lt;tex&amp;gt;2^k&amp;lt;/tex&amp;gt; и не делится на &amp;lt;tex&amp;gt;2^{k+1}&amp;lt;/tex&amp;gt;. Таким образом, программа &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt; будет исполняться на каждом &amp;lt;tex&amp;gt;2^k&amp;lt;/tex&amp;gt;-м шаге. Следовательно, если &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt; завершит работу за &amp;lt;tex&amp;gt;T(p_k, x)&amp;lt;/tex&amp;gt; инструкций, то к этому времени нами будет сделано &amp;lt;tex&amp;gt;T(P_k, x) \cdot 2^k&amp;lt;/tex&amp;gt; шагов.&lt;br /&gt;
&lt;br /&gt;
Как только &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt;, выдав некоторое значение, завершит работу, запустим в том же потоке проверку сертификата слова &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, используя вывод &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt; в качестве сертификата. Если результат проверки положителен, искомый сертификат найден, иначе — продолжим работу больше ничего не запуская в этом потоке.&lt;br /&gt;
&lt;br /&gt;
Таким образом, если некоторая программа &amp;lt;tex&amp;gt;p_k&amp;lt;/tex&amp;gt; генерирует верные сертификаты, то наша программа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; завершит работу не более, чем за &amp;lt;tex&amp;gt;(T(p_k,x) + T(R, \langle x,p_k(x) \rangle)) \cdot 2^k&amp;lt;/tex&amp;gt; шагов. &amp;lt;tex&amp;gt;R \in P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|y| \le poly(|x|)&amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt;\Sigma_1&amp;lt;/tex&amp;gt;, значит это равно &amp;lt;tex&amp;gt;(T(p_k,x) + poly(|x|)) \cdot 2^k = 2^k \cdot T(p_k,x) + poly(|x|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Класс P]]&lt;br /&gt;
*[[Недетерминированные вычисления. Классы NP и Σ₁]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9B%D0%B0%D0%B4%D0%BD%D0%B5%D1%80%D0%B0&amp;diff=22994</id>
		<title>Теорема Ладнера</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9B%D0%B0%D0%B4%D0%BD%D0%B5%D1%80%D0%B0&amp;diff=22994"/>
				<updated>2012-05-31T10:32:14Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Теорема Ладнера''' (Ladner's Theorem) утверждает, что если [[Класс P|P]] не совпадает с [[Класс NP|NP]], то существует язык, принадлежащий &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;, но не являющийся полиномиальным и [[NP-полнота|NP-полным]].&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
&lt;br /&gt;
Предположим, что &amp;lt;tex&amp;gt;\mathrm{P} \neq \mathrm{NP}&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-полный язык (например, &amp;lt;tex&amp;gt;\mathrm{SAT}&amp;lt;/tex&amp;gt;) нельзя свести по Карпу к полиномиальному. Будем искать язык &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, удовлетворяющий следующим условиям:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt;A \in \mathrm{P}&amp;lt;/tex&amp;gt; (что влечёт за собой &amp;lt;tex&amp;gt;\mathrm{SAT} \cap A \in \mathrm{NP}&amp;lt;/tex&amp;gt;);&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathrm{SAT} \cap A \not \in \mathrm{P}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
# &amp;lt;tex&amp;gt;\mathrm{SAT} \not \le \mathrm{SAT} \cap A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если такой язык существует, то &amp;lt;tex&amp;gt;L = \mathrm{SAT} \cap A&amp;lt;/tex&amp;gt; является искомым примером множества&lt;br /&gt;
из &amp;lt;tex&amp;gt;\mathrm{NP} \setminus (\mathrm{P} \cup \mathrm{NPC})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1, \ldots, M_n, \ldots&amp;lt;/tex&amp;gt; — все машины Тьюринга из &amp;lt;tex&amp;gt;\tilde{\mathrm{P}}&amp;lt;/tex&amp;gt;, причём &amp;lt;tex&amp;gt;T(M_i(x)) \le |x|^i&amp;lt;/tex&amp;gt; для любого &amp;lt;tex&amp;gt;x \in \Sigma^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;f_1, \ldots, f_n, \ldots&amp;lt;/tex&amp;gt; — аналогичное множество полиномиальных функций: &amp;lt;tex&amp;gt;T(f_i(x)) \le |x|^i&amp;lt;/tex&amp;gt; для любого &amp;lt;tex&amp;gt;x \in \Sigma^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для простоты будем считать, что &amp;lt;tex&amp;gt;|\Sigma| = 2&amp;lt;/tex&amp;gt;. Построим такую неубывающую функцию &amp;lt;tex&amp;gt;g \in \tilde{\mathrm{P}}&amp;lt;/tex&amp;gt;, что для &amp;lt;tex&amp;gt;A = \{x \in \Sigma^*: g(|x|) \% 2 = 0\}&amp;lt;/tex&amp;gt; выполняются три названных свойства.&lt;br /&gt;
&lt;br /&gt;
=== Построение &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Определим &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; рекурсивно. Установим &amp;lt;tex&amp;gt;g(0) = g(1) = 1&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;n \ge 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;tex&amp;gt;log_2^{g(n)} n \ge n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;g(n+1) := g(n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Иначе &amp;lt;tex&amp;gt; n &amp;gt; log_2^{g(n)} n \ge log_2 n&amp;lt;/tex&amp;gt;; значения &amp;lt;tex&amp;gt;g(m)&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;m \le log_2 n&amp;lt;/tex&amp;gt; уже известны.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;g(n) = 2i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 for &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;|x| \le log_2 n&amp;lt;/tex&amp;gt;&lt;br /&gt;
   if &amp;lt;tex&amp;gt;M_i(x)&amp;lt;/tex&amp;gt; and (&amp;lt;tex&amp;gt;g(|x|) \% 2 = 1&amp;lt;/tex&amp;gt; or &amp;lt;tex&amp;gt;x \not \in \mathrm{SAT})&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;g(n+1) := g(n)+1&amp;lt;/tex&amp;gt;, return&lt;br /&gt;
   if &amp;lt;tex&amp;gt;! M_i(x)&amp;lt;/tex&amp;gt; and (&amp;lt;tex&amp;gt;g(|x|) \% 2 = 0&amp;lt;/tex&amp;gt; and &amp;lt;tex&amp;gt;x \in \mathrm{SAT})&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;g(n+1) := g(n)+1&amp;lt;/tex&amp;gt;, return&lt;br /&gt;
   &amp;lt;tex&amp;gt;g(n+1) := g(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;g(n) = 2i + 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 for &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;|x| \le log_2 n, |f_i(x)| \le log_2 n&amp;lt;/tex&amp;gt;&lt;br /&gt;
   if &amp;lt;tex&amp;gt;x \in \mathrm{SAT}&amp;lt;/tex&amp;gt; and (&amp;lt;tex&amp;gt;g(|f_i(x)|) \% 2 = 1&amp;lt;/tex&amp;gt; or &amp;lt;tex&amp;gt;f_i(x) \not \in \mathrm{SAT})&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;g(n+1) := g(n)+1&amp;lt;/tex&amp;gt;, return&lt;br /&gt;
   if &amp;lt;tex&amp;gt;x \not \in \mathrm{SAT}&amp;lt;/tex&amp;gt; and (&amp;lt;tex&amp;gt;g(|f_i(x)|) \% 2 = 0&amp;lt;/tex&amp;gt; and &amp;lt;tex&amp;gt;f_i(x) \in \mathrm{SAT})&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;g(n+1) := g(n)+1&amp;lt;/tex&amp;gt;, return&lt;br /&gt;
   &amp;lt;tex&amp;gt;g(n+1) := g(n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Утверждается, что для такой функции &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; язык &amp;lt;tex&amp;gt;A = \{x \in \Sigma^*: g(|x|) \% 2 = 0\}&amp;lt;/tex&amp;gt; является искомым.&lt;br /&gt;
&lt;br /&gt;
=== Корректность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Проверим выполнение второго и третьего свойств языка &amp;lt;tex&amp;gt;L = \mathrm{SAT} \cap A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Пусть &amp;lt;tex&amp;gt;g(n)&amp;lt;/tex&amp;gt; не имеет предела при &amp;lt;tex&amp;gt;n \to \infty&amp;lt;/tex&amp;gt;. Значит, для любой &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; существует элемент, на котором &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; «ошибается»; аналогично, для любой полиномиальной функции &amp;lt;tex&amp;gt;f_i&amp;lt;/tex&amp;gt; существует элемент, на котором &amp;lt;tex&amp;gt;f_i&amp;lt;/tex&amp;gt; неверно сводит &amp;lt;tex&amp;gt;\mathrm{SAT}&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Оба свойства выполнены.&lt;br /&gt;
&lt;br /&gt;
* Пусть &amp;lt;tex&amp;gt;\lim_{n \to +\infty} g(n) = 2i&amp;lt;/tex&amp;gt;. Значит, в нашем множестве существует машина Тьюринга &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, распознающая &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\forall x M_i(x) = (g(|x|) \% 2 = 0 \cap x \in \mathrm{SAT})&amp;lt;/tex&amp;gt;. С одной стороны, &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; работает за полином, и &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;. С другой стороны, по определению &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; различается с &amp;lt;tex&amp;gt;\mathrm{SAT}&amp;lt;/tex&amp;gt; в конечном числе элементов, значит, &amp;lt;tex&amp;gt;\mathrm{SAT} \le L&amp;lt;/tex&amp;gt;. Получено противоречие с предположением &amp;lt;tex&amp;gt;\mathrm{P} \neq \mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Пусть &amp;lt;tex&amp;gt;\lim_{n \to +\infty} g(n) = 2i + 1&amp;lt;/tex&amp;gt;. Тогда в нашем множестве полиномиальных функций существует &amp;lt;tex&amp;gt;f_i&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\forall x (x \in SAT) = (g(|f_i(x)|) \% 2 = 0 \cap f_i(x) \in \mathrm{SAT})&amp;lt;/tex&amp;gt;. С одной стороны, &amp;lt;tex&amp;gt;\mathrm{SAT} \le L&amp;lt;/tex&amp;gt; с помощью &amp;lt;tex&amp;gt;f_i&amp;lt;/tex&amp;gt;. С другой стороны, из определения &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; выходит, что язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; конечен, значит, &amp;lt;tex&amp;gt;L \in \mathrm{P}&amp;lt;/tex&amp;gt;. Снова получено противоречие с предположением.&lt;br /&gt;
&lt;br /&gt;
Таким образом, при верности предположения &amp;lt;tex&amp;gt;\mathrm{P} \neq \mathrm{NP}&amp;lt;/tex&amp;gt; второе и третье свойства &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; выполнены.&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Проверим первое свойство — полиномиальность языка &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;T_g(n)&amp;lt;/tex&amp;gt; — время вычисления &amp;lt;tex&amp;gt;g(n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;g(n) \le n&amp;lt;/tex&amp;gt; по построению для &amp;lt;tex&amp;gt;n \ge 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Время выполнения шагов составляет:&lt;br /&gt;
&lt;br /&gt;
* проверка неравенства:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_1(n) \le g(n) T_*(log_2^{g(n)} n, log_2^{g(n)} n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_1(n) \le c_1 g(n) (log_2 (log_2^{g(n)} n))^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_1(n) \le c_1 g^3(n) log_2^2 log_2 n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_1(n) \le c_1 n^3 log_2^2 log_2 n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_1(n) \le c_1 n^5&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;T_*(a, b)&amp;lt;/tex&amp;gt; — время нахождения произведения чисел &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;g(n) = 2i&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_2(n) \le 2^{log_2 n} (T(M_i(x)) + T(g(|x|)) + T(x \in \mathrm{SAT}))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_2(n) \le c_2 n (|x|^i + T_g(|x|) + 2^{|x|}|x|)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_2(n) \le c_2 n (log_2^{i} n + T_g(|x|) + 2^{log_2 n} log_2 n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_2(n) \le c_2 n (log_2^{g(n)} n + T_g(log_2 n) + n log_2 n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_2(n) \le c_2 (n^2 + n^2 log_2 n + n T_g(log_2 n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_2(n) \le c_2 (2n^3 + n T_g(log_2 n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;g(n) = 2i + 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_3(n) \le 2^{log_2 n} (T(x \in \mathrm{SAT}) + T_g(|f_i(x)|) + T(f_i(x) \in \mathrm{SAT}))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_3(n) \le c_3 n (2^{log_2 n} log_2 n + T_g(log_2 n) + 2^{log_2 n} log_2 n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_3(n) \le c_3 (2n^2 log_2 n + n T_g(log_2 n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_3(n) \le c_3 (2n^3 + n T_g(log_2 n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_g(n) \le T_g(n-1) + c_1 n^5 + c_2 (2n^3 + n T_g(log_2 n)) + c_3 (2n^3 + n T_g(log_2 n))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_g(n) \le T_g(n-1) + k_1 n^5 + k_2 n T_g(log_2 n)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если выписывать полученные значения &amp;lt;tex&amp;gt;g(n)&amp;lt;/tex&amp;gt; на ленте машины Тьюринга в порядке возрастания &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;T_g(log_2 n)&amp;lt;/tex&amp;gt; можно получить за &amp;lt;tex&amp;gt;k_3 (n + log_2 n) \le 2 k_3 n&amp;lt;/tex&amp;gt;. Тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_g(n) \le T_g(n-1) + k_1 n^5 + 2 k_2 k_3 n^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;T_g(1) = const = d&amp;lt;/tex&amp;gt;. Существует константа &amp;lt;tex&amp;gt;c \ge d&amp;lt;/tex&amp;gt;, для которой при любом &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; верно&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;c (n-1)^6 + k_1 n^5 + 2 k_2 k_3 n^2 \le c n^6&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, в силу &amp;lt;tex&amp;gt;T_g(1) = d \le c 1^6&amp;lt;/tex&amp;gt; и неравенства выше, по индукции легко доказать, что &amp;lt;tex&amp;gt;T_g(n)&amp;lt;/tex&amp;gt; ограничено сверху &amp;lt;tex&amp;gt;c n^6&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;g \in \tilde{\mathrm{P}}&amp;lt;/tex&amp;gt;, а, в свою очередь, &amp;lt;tex&amp;gt;A \in \mathrm{P}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Источник ==&lt;br /&gt;
* ''William Gasarch, Lance Fortnow''. [http://blog.computationalcomplexity.org/media/ladner.pdf Two Proofs of Ladner’s Theorem]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D0%B5%D0%B9%D0%BA%D0%B5%D1%80%D0%B0_%E2%80%94_%D0%93%D0%B8%D0%BB%D0%BB%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%B2%D1%8D%D1%8F&amp;diff=22993</id>
		<title>Теорема Бейкера — Гилла — Соловэя</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D0%B5%D0%B9%D0%BA%D0%B5%D1%80%D0%B0_%E2%80%94_%D0%93%D0%B8%D0%BB%D0%BB%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%B2%D1%8D%D1%8F&amp;diff=22993"/>
				<updated>2012-05-31T10:31:59Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Теорема==&lt;br /&gt;
{{ Теорема&lt;br /&gt;
| statement = Существуют такие оракулы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\mathrm{P^A} = \mathrm{NP^A} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathrm{P^B} \ne \mathrm{NP^B} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
| proof = &lt;br /&gt;
'''Существование оракула &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Рассмотрим [[PS-полнота языка верных булевых формул с кванторами (TQBF) | PS-полный язык &amp;lt;tex&amp;gt;\mathrm{TQBF}&amp;lt;/tex&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathrm{P^{TQBF}}   \overset{(1)}{\subseteq}&lt;br /&gt;
\mathrm{NP^{TQBF}}  \overset{(2)}{\subseteq}&lt;br /&gt;
\mathrm{NPS^{TQBF}} \overset{(3)}{=}&lt;br /&gt;
\mathrm{PS^{TQBF}}  \overset{(4)}{=}&lt;br /&gt;
\mathrm{PS}         \overset{(5)}{\subseteq}&lt;br /&gt;
\mathrm{P^{TQBF}}&lt;br /&gt;
\Rightarrow&lt;br /&gt;
&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow \mathrm{P^{TQBF}} = \mathrm{NP^{TQBF}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{P} \subseteq \mathrm{NP} \Rightarrow \mathrm{P^{TQBF}} \subseteq \mathrm{NP^{TQBF}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{NP} \subseteq \mathrm{NPS} \Rightarrow \mathrm{NP^{TQBF}} \subseteq \mathrm{NPS^{TQBF}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# По [[ Класс PS. Теорема Сэвича. Совпадение классов NPS и PS | теореме Сэвича]] &amp;lt;tex&amp;gt; \mathrm{NPS^{TQBF}} = \mathrm{PS^{TQBF}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{TQBF} \in \mathrm{PS} \Rightarrow \mathrm{PS^{TQBF}} = \mathrm{PS} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{TQBF} \in \mathrm{PSC} \Rightarrow \mathrm{PS} \subseteq \mathrm{P^{TQBF}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Существование оракула &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; — произвольное множество, а &amp;lt;tex&amp;gt;U_B = \{1^n | \exists x \in B : |x| = n\}&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\forall B \Rightarrow U_B \in \mathrm{NP^B}&amp;lt;/tex&amp;gt; (сертификатом будет слово нужной длины из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;). Построим такое множество &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;U_B \not\in \mathrm{P^B}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пронумеруем некоторым образом все машины Тьюринга, имеющие доступ к оракулу языка &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, и рассмотрим получившуюся последовательность &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;. Построение множества &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; разделим на счетное число стадий, на каждой из которых множество пополнится конечным числом элементов. Будем строить &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; так, чтобы на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-й стадии было выполнено: &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; не разрешает язык &amp;lt;tex&amp;gt;U_B&amp;lt;/tex&amp;gt; за время не большее, чем &amp;lt;tex&amp;gt;2^{n-1}&amp;lt;/tex&amp;gt;.  Очевидно, что это утверждение сильнее, чем &amp;lt;tex&amp;gt;U_B \not\in \mathrm{P^B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* 0-я стадия: &amp;lt;tex&amp;gt;B \leftarrow \emptyset &amp;lt;/tex&amp;gt;.&lt;br /&gt;
* &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-я стадия. Стадии с 0-й по &amp;lt;tex&amp;gt;(i-1)&amp;lt;/tex&amp;gt;-ю пройдены, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; — конечное множество слов. Пусть самое длинное из них состоит из &amp;lt;tex&amp;gt;(n-1)&amp;lt;/tex&amp;gt;-го символа. Запустим машину &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; на входе &amp;lt;tex&amp;gt;1^n&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;2^{n-1}&amp;lt;/tex&amp;gt; шагов. Когда &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; требуется ответ оракула языка &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; о слове &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, будем определять принадлежность этого слова к &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
** если принадлежность &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; множеству &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; была определена на одной из предудщих стадий, то она сохраняется;&lt;br /&gt;
** если принадлежность &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; множеству &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; не установлена ранее, то далее считаем, что &amp;lt;tex&amp;gt;x \not\in B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Но &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; могла остановится раньше, чем за &amp;lt;tex&amp;gt;2^{n-1}&amp;lt;/tex&amp;gt; шагов и вернуть какое-либо значение. Так как &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; строится с условием &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; не разрешает &amp;lt;tex&amp;gt;U_B&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;2^{n-1}&amp;lt;/tex&amp;gt;, то решение машины о принадлежности слова должно быть неверным:&lt;br /&gt;
* если &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; приняла слово, то исключим из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; все слова вида &amp;lt;tex&amp;gt;\{0,1\}^n&amp;lt;/tex&amp;gt;;&lt;br /&gt;
* Если &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; отклонила слово, то выберем слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, принадлежность которого &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; еще не определено. Добавим &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. Такое слово всегда найдется, так как на предыдущий шагах мы могли сделать не более, чем &amp;lt;tex&amp;gt;2^n-1&amp;lt;/tex&amp;gt; запросов к оракулу (то есть определить принадлежность &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; не более &amp;lt;tex&amp;gt;2^n-1&amp;lt;/tex&amp;gt; слов длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;), а всего слов длины n &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Во множестве &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; на каждой стадии содержится конечное число элементов, так как на каждой стадии в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; может быть добавлено не более чем &amp;lt;tex&amp;gt;2^{n-1}+1&amp;lt;/tex&amp;gt; слов. &lt;br /&gt;
&lt;br /&gt;
Из построения получаем, что никакая машина не может разрешить &amp;lt;tex&amp;gt;U_B&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt;2^{n-1}&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;U_B \not\in \mathrm{P_B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Следствия==&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
| statement = Методом диагонализации нельзя доказать, что &amp;lt;tex&amp;gt;\mathrm{P} \neq \mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
| statement = Если существует решение вопроса равенства &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathrm{NP}&amp;lt;/tex&amp;gt;, то оно не должно &amp;quot;релятивизоваться&amp;quot;, поэтому стандартные техники, например, диагонализация не применима.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_NP-%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9A%D1%83%D0%BA%D0%B0&amp;diff=22992</id>
		<title>Примеры NP-полных языков. Теорема Кука</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_NP-%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9A%D1%83%D0%BA%D0%B0&amp;diff=22992"/>
				<updated>2012-05-31T10:31:29Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
В этой статье мы рассмотрим класс NP-полных языков {{---}} NPC.&lt;br /&gt;
NPC является одним из важнейших классов в теории сложности, так как если найдется язык из этого класса, который также входит в класс P, &lt;br /&gt;
тогда окажется, что P = NP.&lt;br /&gt;
&lt;br /&gt;
Мы рассмотрим некоторые языки и докажем их NP-полноту. Начнем мы с языка &amp;lt;tex&amp;gt; BH_{1N} &amp;lt;/tex&amp;gt;, так как к нему несложно сводятся все языки из NP. &lt;br /&gt;
Потом с помощью сведений по Карпу будем сводить уже известные языки из NPC к новым языкам, тем самым доказывая их NP-трудность, а потом и NP-полноту.&lt;br /&gt;
Доказательство NP-полноты будет состоять из двух пунктов: доказательство NP-трудности и принадлежности языка классу NP.&lt;br /&gt;
&lt;br /&gt;
== NP-полнота &amp;lt;tex&amp;gt; BH_{1N} &amp;lt;/tex&amp;gt; ==&lt;br /&gt;
&amp;lt;tex&amp;gt; BH_{1N} &amp;lt;/tex&amp;gt; {{---}} язык троек &amp;lt;tex&amp;gt; \langle m, x, 1^t \rangle &amp;lt;/tex&amp;gt;, таких что недетерминированная машина Тьюринга &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; на входной строке &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; возращает 1 за время &amp;lt;tex&amp;gt; T(m, x) \le t &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; BH_{1N} = \lbrace \langle m, x, 1^t \rangle | m &amp;lt;/tex&amp;gt; {{---}} недерминированная машина Тьюринга, &amp;lt;tex&amp;gt; m(x) = 1, T(m,x) \le t \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt; BH_{1N} \in NPC &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
# &amp;lt;tex&amp;gt; BH_{1N} \in NPH &amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; BH_{1N} \in NP &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== NP-полнота &amp;lt;tex&amp;gt; SAT &amp;lt;/tex&amp;gt; ==&lt;br /&gt;
&amp;lt;tex&amp;gt; SAT &amp;lt;/tex&amp;gt; {{---}} язык булевых формул, для которых существует подстановка, при которой формула истинна.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; SAT = \lbrace \varphi\ |\ \exists x : \varphi(x) = 1 \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Кук&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt; SAT \in NPC &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
# &amp;lt;tex&amp;gt; SAT \in NPH &amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; SAT \in NP &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;Можно написать недетерминированную программу, которая распознает язык SAT. Она будет недетерминированно выбирать подстановку, проверять истинна ли формула при такой подстановке и выдавать ответ.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9._%D0%A1%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%9A%D0%B0%D1%80%D0%BF%D1%83._%D0%A2%D1%80%D1%83%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8&amp;diff=22991</id>
		<title>Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9._%D0%A1%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%9A%D0%B0%D1%80%D0%BF%D1%83._%D0%A2%D1%80%D1%83%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B8_%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8&amp;diff=22991"/>
				<updated>2012-05-31T10:31:14Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; — класс языков, удовлетворяющих некоторым ограничениям; &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt; — класс вычислимых функций, удовлетворяющих тем же ограничениям.&lt;br /&gt;
'''Язык &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; сводится к языку &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; относительно &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;L_1 \leq_{\widetilde{D}} L_2&amp;lt;/tex&amp;gt;)''', если существует такая функция &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; принадлежит &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt; принадлежит &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; (L_1 \leq_{\widetilde{D}} L_2) \overset{\underset{\mathrm{def}}{}}{\iff} ( \exists f \in \widetilde{D} : x \in L_1 \Leftrightarrow f(x) \in L_2 ) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Сведение относительно &amp;lt;tex&amp;gt;\mathrm{\widetilde{P}}&amp;lt;/tex&amp;gt; называется '''сведением по Карпу'''.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание.''' Часто используется именно сведение по Карпу, поэтому слова «относительно сведения по Карпу» и индекс у символа сведения обычно опускают.&lt;br /&gt;
&lt;br /&gt;
== Простой пример сведения по Карпу ==&lt;br /&gt;
Зададим следующие языки:&lt;br /&gt;
* &amp;lt;tex&amp;gt;IND&amp;lt;/tex&amp;gt; — множество пар вида &amp;lt;tex&amp;gt; \langle G, k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; — граф, а &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — число, такое, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; есть [http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%BD%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D0%BC_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B5#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F независимое множество] размера &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* &amp;lt;tex&amp;gt;CLIQUE&amp;lt;/tex&amp;gt; — множество пар вида &amp;lt;tex&amp;gt; \langle G, k \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; — граф, а &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; — число, такое, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; есть [http://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B8%D0%BA%D0%B0_(%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%BE%D0%B2) клика] размера &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;IND \leq CLIQUE&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим функцию &amp;lt;tex&amp;gt;f( \langle G, k \rangle ) = \langle \overline{G}, k \rangle&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\overline{G}&amp;lt;/tex&amp;gt; — [http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D0%B0 дополнение графа] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; вычислима за линейное время от длины входа, если граф задан в виде матрицы смежности.&amp;lt;br&amp;gt;&lt;br /&gt;
* (&amp;lt;tex&amp;gt;x \in L_1 \Rightarrow f(x) \in L_2&amp;lt;/tex&amp;gt;). Заметим, что, если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; было независимое множество размера &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то в &amp;lt;tex&amp;gt;\overline{G}&amp;lt;/tex&amp;gt; будет клика такого же размера (вершины, которые были в независимом множестве, в &amp;lt;tex&amp;gt;\overline{G}&amp;lt;/tex&amp;gt; попарно соединены рёбрами и образуют клику).&lt;br /&gt;
* (&amp;lt;tex&amp;gt;x \in L_1 \Leftarrow f(x) \in L_2&amp;lt;/tex&amp;gt;). Обратно, если в &amp;lt;tex&amp;gt;\overline{G}&amp;lt;/tex&amp;gt; есть клика размера &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то в исходном графе было независимое множество размера &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;IND \leq CLIQUE&amp;lt;/tex&amp;gt; по определению.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание.''' Другие примеры сведения по Карпу приведены в статье, содержащей [[Примеры NP-полных языков. Теорема Кука | примеры NP-полных языков]].&lt;br /&gt;
&lt;br /&gt;
== Свойства сведения ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=о транзитивности&lt;br /&gt;
|statement=Сведение по Карпу транзитивно, то есть: &amp;lt;tex&amp;gt; ( L_1 \leq L_2, L_2 \leq L_3 ) \Rightarrow L_1 \leq L_3 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt; — функции из определения сведения для &amp;lt;tex&amp;gt; L_1 \leq L_2 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; L_2 \leq L_3 &amp;lt;/tex&amp;gt; соответственно. Из определения следует: &amp;lt;tex&amp;gt;x \in L_1 \Leftrightarrow f(x) \in L_2 \Leftrightarrow g(f(x)) \in L_3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проверим, что &amp;lt;tex&amp;gt;g(f(x))&amp;lt;/tex&amp;gt; вычислима за полиномиальное от &amp;lt;tex&amp;gt;|x|&amp;lt;/tex&amp;gt; время.&amp;lt;br/&amp;gt;&lt;br /&gt;
Действительно, первым делом необходимо вычислить &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt;, на это уйдет полином от &amp;lt;tex&amp;gt;|x|&amp;lt;/tex&amp;gt; времени.&amp;lt;br/&amp;gt;&lt;br /&gt;
Кроме того, длина входа &amp;lt;tex&amp;gt;g&amp;lt;/tex&amp;gt;, являющегося выводом &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt;, тоже полиномиальна, так как за единицу времени может быть выведено не более, чем константное число символов. Значит, вычисление &amp;lt;tex&amp;gt;g(f(x))&amp;lt;/tex&amp;gt; также займет времени не более, чем полином от &amp;lt;tex&amp;gt;|x|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, полное время работы программы есть сумма полиномов от &amp;lt;tex&amp;gt;|x|&amp;lt;/tex&amp;gt; и потому тоже является полиномом от &amp;lt;tex&amp;gt;|x|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;(L_1 \leq_{\widetilde{D}} L_2) \Leftrightarrow (\overline {L_1} \leq_{\widetilde{D}} \overline {L_2})&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
По определению сведения существует такая функция &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; из класса &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;x \in L_1 \Leftrightarrow f(x) \in L_2&amp;lt;/tex&amp;gt;. Для того, чтобы свести &amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;\overline{L_2}&amp;lt;/tex&amp;gt; будем использовать ту же функцию &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
В самом деле: &amp;lt;tex&amp;gt;( x \in L_1 \Leftrightarrow f(x) \in L_2 ) \iff ( \overline{x \in L_1} \Leftrightarrow \overline{f(x) \in L_2} ) &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\iff ( x \in \overline{L_1} \Leftrightarrow f(x) \in \overline{L_2} ) \iff (\overline {L_1} \leq_{\widetilde{D}} \overline {L_2})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Определения трудных и сложных задач ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; — сложностный класс, &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt; — класс вычислимых функций. Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется '''&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;-трудным относительно &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt;-сведения (&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;-hard)''', если любой язык &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; сводится к &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; относительно &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; (L &amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;-hard &amp;lt;tex&amp;gt;) \overset{\underset{\mathrm{def}}{}}{\Leftrightarrow} ( \forall M \in C \Rightarrow M \leq_{f} L, f \in \widetilde{D} ) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; — сложностный класс, &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt; — класс вычислимых функций. Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется '''&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;-полным относительно &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt;-сведения (&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;-complete)''', если &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;-трудным относительно &amp;lt;tex&amp;gt;\widetilde{D}&amp;lt;/tex&amp;gt;-сведения и сам лежит в &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=22989</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=22989"/>
				<updated>2012-05-31T10:30:15Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in P , M \le L \Rightarrow M \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;L \subset P \Rightarrow P=P^L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in P&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in P&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in P&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;Reg \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;Reg \subset TS(n, 1) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;TS&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;CFL \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;CFL \subset TS(n^3, n^2) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют и задачи не из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=22988</id>
		<title>Класс P</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81_P&amp;diff=22988"/>
				<updated>2012-05-31T10:29:24Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Класс''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;P = \bigcup\limits_{p \in poly}DTIME(p(n))&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Сложностные классы. Вычисления с оракулом]]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Итого, язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; лежит в классе &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; тогда и только тогда, когда существует такая детерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; завершает свою работу за полиномиальное время на любых входных данных;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \in L&amp;lt;/tex&amp;gt;, то она допустит его;&lt;br /&gt;
# если на вход машине &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; подать слово &amp;lt;tex&amp;gt;l \not\in L&amp;lt;/tex&amp;gt;, то она не допустит его.&lt;br /&gt;
&lt;br /&gt;
== Свойства класса P ==&lt;br /&gt;
# Замкнутость относительно [[Сведение по Карпу|сведения по Карпу]]. &amp;lt;tex&amp;gt; L \in P , M \le L \Rightarrow M \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость относительно [[Сведение по Куку|сведения по Куку]]. &amp;lt;tex&amp;gt;L \subset P \Rightarrow P=P^L&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Замкнутость объединения, пересечения, конкатенации, замыкания Клини и дополнения. Если &amp;lt;tex&amp;gt;L_1, L_2 \in P&amp;lt;/tex&amp;gt;, то: &amp;lt;tex&amp;gt;L_1 \cup L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 \cap L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1 L_2 \in P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;L_1^* \in P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline{L_1} \in P&amp;lt;/tex&amp;gt;. Рассмотрим доказательство замкнутости замыкания Клини (остальные доказательства строятся аналогично).&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement =&lt;br /&gt;
Если &amp;lt;tex&amp;gt;L \in P&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} разрешитель &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, работающий за полиномиальное время. Построим разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; для языка &amp;lt;tex&amp;gt;L^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &amp;lt;tex&amp;gt;q(w):&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;endPoses = \{0\}&amp;lt;/tex&amp;gt;  //позиции, где могут заканчиваться слова, принадлежащие &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     for (&amp;lt;tex&amp;gt;i = 1 \ldots n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         for (&amp;lt;tex&amp;gt;j \in endPoses&amp;lt;/tex&amp;gt;)&lt;br /&gt;
             if (&amp;lt;tex&amp;gt;p(w[j+1 \ldots i])&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
                 if (&amp;lt;tex&amp;gt;i = n&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                     return true&lt;br /&gt;
                 &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup = \{i\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
             }&lt;br /&gt;
     return false&lt;br /&gt;
Худшая оценка времени работы разрешителя &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;n^2 O(p(w))&amp;lt;/tex&amp;gt;, так как в множестве &amp;lt;tex&amp;gt;endPoses&amp;lt;/tex&amp;gt; может быть максимум &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, значит итерироваться по множеству можно за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, если реализовать его на основе битового массива, например; при этом операция добавления элемента в множество будет работать за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого, разрешитель &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; работает за полиномиальное время (так как произведение полиномов есть полином). Значит &amp;lt;tex&amp;gt;L^* \in P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов Reg и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Регулярные языки: два определения и их эквивалентность|регулярных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;Reg \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;Reg \subset TS(n, 1) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
''Замечание.'' &amp;lt;tex&amp;gt;TS&amp;lt;/tex&amp;gt; {{---}} ограничение и по времени и по памяти.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Соотношение классов CFL и P ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement =&lt;br /&gt;
Класс [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободных языков]] входит в класс &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть: &amp;lt;tex&amp;gt;CFL \subset P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&amp;lt;tex&amp;gt;CFL \subset TS(n^3, n^2) \subset P&amp;lt;/tex&amp;gt;&lt;br /&gt;
Первое включение выполняется благодаря существованию [[Алгоритм Эрли|алгоритма Эрли]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры задач и языков из P ==&lt;br /&gt;
Класс задач, разрешимых за полиномиальное время достаточно широк, вот несколько его представителей:&lt;br /&gt;
* определение связности графов;&lt;br /&gt;
* вычисление наибольшего общего делителя;&lt;br /&gt;
* задача линейного программирования;&lt;br /&gt;
* проверка простоты числа.&amp;lt;ref&amp;gt;[http://www.cse.iitk.ac.in/~manindra/algebra/primality_v6.pdf M.Argawal, N.Kayal, N.Saxena, &amp;quot;Primes is in P&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
По [[теорема о временной иерархии|теореме о временной иерархии]] существуют и задачи не из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Задача равенства P и NP ==&lt;br /&gt;
Одним из центральных вопросов теории сложности является вопрос о равенстве классов &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[[Недетерминированные вычисления. Классы NP и Σ₁]]&amp;lt;/ref&amp;gt;, не разрешенный по сей день. &lt;br /&gt;
&lt;br /&gt;
Легко показать, что, по определению &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; P \subset NP&amp;lt;/tex&amp;gt;, так как для любой задачи класса &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; существует соответствующая [http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0 ДМТ], которая является частным случаем [[Недетерминированные вычисления. Классы NP и Σ₁|НМТ]], а значит задача, по определению, будет входить в класс &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=22987</id>
		<title>Категория:Теория сложности</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=22987"/>
				<updated>2012-05-31T10:28:42Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: Новая страница: «Теория сложности»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%8B._%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81_%D0%BE%D1%80%D0%B0%D0%BA%D1%83%D0%BB%D0%BE%D0%BC&amp;diff=22986</id>
		<title>Сложностные классы. Вычисления с оракулом</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%8B._%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81_%D0%BE%D1%80%D0%B0%D0%BA%D1%83%D0%BB%D0%BE%D0%BC&amp;diff=22986"/>
				<updated>2012-05-31T10:27:21Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В начале 1960-х годов, в связи с началом широкого использования вычислительной техники для решения практических задач, возник вопрос о границах практической применимости данного алгоритма решения задачи в смысле ограничений на её размерность. Какие задачи могут быть решены на ЭВМ за реальное время?&lt;br /&gt;
&lt;br /&gt;
Ответ на этот вопрос был дан в работах Кобхэма (Alan Cobham, 1964) и Эдмондса (Jack Edmonds, 1965), где были введены сложностные классы задач. К ним относятся классы [[Класс P|P]], [[Недетерминированные вычисления. Классы NP и Σ₁|NP]] и т.д.&lt;br /&gt;
&lt;br /&gt;
Для начала введём понятия &amp;lt;tex&amp;gt;DTIME&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DSPACE&amp;lt;/tex&amp;gt;, аналогичным образом определяются классы &amp;lt;tex&amp;gt;NSPACE&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NTIME&amp;lt;/tex&amp;gt; (префикс &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; соответствует детерминизму, а &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; — недетерминизму).&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;DTIME(f(n)) = \{ L \mid \exists &amp;lt;/tex&amp;gt; программа &amp;lt;tex&amp;gt;p : L(p)=L&amp;lt;/tex&amp;gt; и для &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt;, такого что &amp;lt;tex&amp;gt;|x| = n&amp;lt;/tex&amp;gt; (здесь &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа), &amp;lt;tex&amp;gt;Time(p,x) = O(f(n)) \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;DSPACE(f(n)) = \{ L \mid \exists &amp;lt;/tex&amp;gt; программа &amp;lt;tex&amp;gt;p : L(p)=L&amp;lt;/tex&amp;gt; и для &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt;, такого что &amp;lt;tex&amp;gt;|x| = n&amp;lt;/tex&amp;gt; (здесь &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа), &amp;lt;tex&amp;gt;Space(p,x) = O(f(n)) \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Через понятия классов &amp;lt;tex&amp;gt;DSPACE&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;DTIME&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;NSPACE&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NTIME&amp;lt;/tex&amp;gt; будет дано определение многим сложностным классам, в том числе классов [[Класс P|P]] и [[Недетерминированные вычисления. Классы NP и Σ₁|NP]].&lt;br /&gt;
&lt;br /&gt;
== Вычисление с оракулом ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Оракул — программа &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt;, вычисляющая за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени, верно ли, что &amp;lt;tex&amp;gt;x \in A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Сложностный класс задач, решаемых алгоритмом из класса &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; с оракулом для языка &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, обозначают &amp;lt;tex&amp;gt;C^A&amp;lt;/tex&amp;gt;. Так же &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; называют сложностным классом с доступом к оракулу &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; — множество языков, то &amp;lt;tex&amp;gt;C^A =\bigcup\limits_{D \in A}C^D&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; — язык из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%8B._%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81_%D0%BE%D1%80%D0%B0%D0%BA%D1%83%D0%BB%D0%BE%D0%BC&amp;diff=22983</id>
		<title>Сложностные классы. Вычисления с оракулом</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%8B._%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81_%D0%BE%D1%80%D0%B0%D0%BA%D1%83%D0%BB%D0%BE%D0%BC&amp;diff=22983"/>
				<updated>2012-05-31T10:20:57Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В начале 1960-х годов, в связи с началом широкого использования вычислительной техники для решения практических задач, возник вопрос о границах практической применимости данного алгоритма решения задачи в смысле ограничений на её размерность. Какие задачи могут быть решены на ЭВМ за реальное время?&lt;br /&gt;
&lt;br /&gt;
Ответ на этот вопрос был дан в работах Кобхэма (Alan Cobham, 1964) и Эдмондса (Jack Edmonds, 1965), где были введены сложностные классы задач. К ним относятся классы [[Класс P|P]], [[Недетерминированные вычисления. Классы NP и Σ₁|NP]] и т.д.&lt;br /&gt;
&lt;br /&gt;
Для начала введём понятия &amp;lt;tex&amp;gt;DTIME&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DSPACE&amp;lt;/tex&amp;gt;, аналогичным образом определяются классы &amp;lt;tex&amp;gt;NSPACE&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NTIME&amp;lt;/tex&amp;gt; (префикс &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; соответствует детерминизму, а &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; — недетерминизму).&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;DTIME(f(n)) = \{ L \mid \exists &amp;lt;/tex&amp;gt; программа &amp;lt;tex&amp;gt;p : L(p)=L&amp;lt;/tex&amp;gt; и для &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt;, такого что &amp;lt;tex&amp;gt;|x| = n&amp;lt;/tex&amp;gt; (здесь &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа), &amp;lt;tex&amp;gt;Time(p,x) = O(f(n)) \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;DSPACE(f(n)) = \{ L \mid \exists &amp;lt;/tex&amp;gt; программа &amp;lt;tex&amp;gt;p : L(p)=L&amp;lt;/tex&amp;gt; и для &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt;, такого что &amp;lt;tex&amp;gt;|x| = n&amp;lt;/tex&amp;gt; (здесь &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа), &amp;lt;tex&amp;gt;Space(p,x) = O(f(n)) \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Через понятия классов &amp;lt;tex&amp;gt;DSPACE&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;DTIME&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;NSPACE&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NTIME&amp;lt;/tex&amp;gt; будет дано определение многим сложностным классам, в том числе классов [[Класс P|P]] и [[Недетерминированные вычисления. Классы NP и Σ₁|NP]].&lt;br /&gt;
&lt;br /&gt;
== Вычисление с оракулом ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Оракул — программа &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt;, вычисляющая за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; времени, верно ли, что &amp;lt;tex&amp;gt;x \in A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Сложностный класс задач, решаемых алгоритмом из класса &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; с оракулом для языка &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, обозначают &amp;lt;tex&amp;gt;C^A&amp;lt;/tex&amp;gt;. Так же &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; называют сложностным классом с доступом к оракулу &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; — это множество языков, то &amp;lt;tex&amp;gt;C^A =\bigcup\limits_{D \in A}C^D&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; — язык из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%8B._%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81_%D0%BE%D1%80%D0%B0%D0%BA%D1%83%D0%BB%D0%BE%D0%BC&amp;diff=22982</id>
		<title>Сложностные классы. Вычисления с оракулом</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D1%8B._%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81_%D0%BE%D1%80%D0%B0%D0%BA%D1%83%D0%BB%D0%BE%D0%BC&amp;diff=22982"/>
				<updated>2012-05-31T10:17:38Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.223.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В начале 1960-х годов, в связи с началом широкого использования вычислительной техники для решения практических задач, возник вопрос о границах практической применимости данного алгоритма решения задачи в смысле ограничений на ее размерность. Какие задачи могут быть решены на ЭВМ за реальное время?&lt;br /&gt;
&lt;br /&gt;
Ответ на этот вопрос был дан в работах Кобмена (Alan Cobham, 1964) и Эдмнодса (Jack Edmonds, 1965), где были введены сложностные классы задач. К ним относятся классы [[Класс P|P]], [[Недетерминированные вычисления. Классы NP и Σ₁|NP]] и т.д.&lt;br /&gt;
&lt;br /&gt;
Для начала введем понятия &amp;lt;tex&amp;gt;DTIME&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;DSPACE&amp;lt;/tex&amp;gt;, аналогичным образом определяются классы &amp;lt;tex&amp;gt;NSPACE&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NTIME&amp;lt;/tex&amp;gt; (префикс &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; соответствует детерминизму, а &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; — недетерминизму).&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;DTIME(f(n)) = \{ L \mid \exists &amp;lt;/tex&amp;gt; программа &amp;lt;tex&amp;gt;p : L(p)=L&amp;lt;/tex&amp;gt; и для &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt;, такого что &amp;lt;tex&amp;gt;|x| = n&amp;lt;/tex&amp;gt; (здесь &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа), &amp;lt;tex&amp;gt;Time(p,x) = O(f(n)) \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;DSPACE(f(n)) = \{ L \mid \exists &amp;lt;/tex&amp;gt; программа &amp;lt;tex&amp;gt;p : L(p)=L&amp;lt;/tex&amp;gt; и для &amp;lt;tex&amp;gt;\forall x&amp;lt;/tex&amp;gt;, такого что &amp;lt;tex&amp;gt;|x| = n&amp;lt;/tex&amp;gt; (здесь &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; — длина входа), &amp;lt;tex&amp;gt;Space(p,x) = O(f(n)) \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Через понятия классов &amp;lt;tex&amp;gt;DSPACE&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;DTIME&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;NSPACE&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;NTIME&amp;lt;/tex&amp;gt; будет дано определение многим сложностным классам, в том числе классов [[Класс P|P]] и [[Недетерминированные вычисления. Классы NP и Σ₁|NP]].&lt;br /&gt;
&lt;br /&gt;
== Вычисление с оракулом ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Оракул — программа &amp;lt;tex&amp;gt;A(x)&amp;lt;/tex&amp;gt;, вычисляющая за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;, верно ли, что &amp;lt;tex&amp;gt;x \in A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Сложностный класс задач, решаемых алгоритмом из класса &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; с оракулом для языка &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, обозначают &amp;lt;tex&amp;gt;C^A&amp;lt;/tex&amp;gt;. Так же &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; называют сложностным классом с доступом к оракулу &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; — это множество языков, то &amp;lt;tex&amp;gt;C^A =\bigcup\limits_{D \in A}C^D&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; — язык из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>109.188.223.77</name></author>	</entry>

	</feed>