Теория сложности (старая трешовая версия) — различия между версиями
Vadim (обсуждение | вклад) (→Лекция 6) |
м (rollbackEdits.php mass rollback) |
||
(не показаны 63 промежуточные версии 22 участников) | |||
Строка 1: | Строка 1: | ||
− | == Лекция 1 == | + | == Лекция 1. Вводная == |
− | + | Начнем курс с введения понятий '''[[DTIME]]''' и '''[[DSPACE]]'''. | |
− | *[[ | + | |
− | *[[Теорема о емкостной иерархии]] | + | *'''DTIME'''(''f''(''n'')) = <tex>\{ L \mid \exists </tex> машина Тьюринга <tex>m : L(m)=L, Time(m,x) \le f(|x|) \}</tex>, где <tex>|x|</tex> — длина входа <tex>x</tex>. |
− | *[[Теорема о временной иерархии]] | + | |
− | + | *'''DSPACE'''(''f''(''n'')) = <tex>\{ L \mid \exists </tex> машина Тьюринга <tex>m : L(m)=L, Space(m,x) \le f(|x|) \}</tex>. | |
− | + | ||
− | *[[ | + | Аналогичным образом введем классы '''[[NSPACE]]''' и '''[[NTIME]]''', использующие недетерминированную машину Тьюринга взамен детерминированной (в течении всего курса префикс '''D''' соответствует детерминизму, а '''N''' — недетерминизму). |
− | + | ||
− | + | Рассмотрим и докажем теоремы о емкостной и временной иерархии. | |
+ | |||
+ | *[[Теорема о емкостной иерархии]] утверждает, что для любых двух [[Конструируемая по памяти функция|конструируемых по памяти функций]] <tex>f</tex> и <tex>g</tex> таких, что <tex> \lim \limits_{n \rightarrow \infty} f(n)/g(n) = 0</tex>, выполняется '''DSPACE'''(''g''(''n'')) ≠ '''DSPACE'''(''f''(''n'')). | ||
+ | |||
+ | *[[Теорема о временной иерархии]] утверждает, что для любых двух [[Конструируемая по времени функция|конструируемых по времени функций]] <tex>f\,\!</tex> и <tex>g\,\!</tex> таких, что <tex> \lim \limits_{n \rightarrow \infty} \frac{t(f(n))}{g(n)} = 0</tex>, выполняется '''DTIME'''(''g''(''n'')) ≠ '''DTIME'''(''f''(''n'')). | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Через понятия классов '''DSPACE''', '''DTIME''', '''NSPACE''' и '''NTIME''' будет дано определение многим сложностным классам, в том числе '''[[P]]''' и '''[[NP]]'''. | ||
+ | |||
+ | Класс '''P''' — класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время. Формально: | ||
+ | *'''P'''=<tex>\bigcup_{i=0}^{\infty}</tex>'''DTIME'''<tex>(in^i)</tex> | ||
+ | |||
+ | В свою очередь, при разрешении языка из класса '''NP''' используется недетерминированная машина: | ||
+ | *'''NP'''=<tex>\bigcup_{i=0}^{\infty}</tex> '''NTIME'''<tex>(in^i)</tex> | ||
+ | Дадим определение класса '''NP''' на языке сертификатов: | ||
+ | *'''NP'''=<tex>\Sigma_1 = \{L|\exists R(x,y) \in P, p \in Poly | l \in L \Leftrightarrow \exists y, |y| \le p(x) | R(x,y)=1\}</tex> (первое равенство доказывается в статье '''[[NP]]'''). Поясним, что <tex>y</tex> является сертификатом принадлежности <tex>x</tex> языку <tex>L</tex>, если существует полиномиальное отношение (верификатор) <tex>R</tex>, такое что <tex>R(x,y)=1</tex> тогда и только тогда, когда <tex>x</tex> принадлежит <tex>L</tex>. | ||
+ | |||
+ | Вместе со многими сложностными классами имеет смысл рассматривать и их дополнения (используется приставка '''co-'''). Например, класс '''[[co-NP]]'''. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Введем в рассмотрение отношения между языками: [[сведение по Карпу]] и [[сведение по Куку]]. | ||
+ | *Язык <tex>A</tex> сводится по Карпу к языку <tex>B</tex>, если существует функция <tex>f(x)</tex> такая, что <tex>x \in A</tex> тогда и только тогда, когда <tex>f(x) \in B</tex>. | ||
+ | *Язык <tex>A</tex> сводится по Куку к <tex>B</tex>, если существует разрешающая язык <tex>A</tex> программа <tex>m</tex>, работающая полиномиальное время от длины входа, которая может использовать разрешающую программу <tex>m_B</tex> для языка <tex>B</tex> в качестве оракула. При этом время работы <tex>m_B</tex> не учитывается. | ||
+ | |||
+ | В дальнейшем чаще будет рассматриваться сведение по Карпу. | ||
== Практика 1 == | == Практика 1 == | ||
Строка 38: | Строка 64: | ||
*[[NP-полнота задачи о раскраске графа]] | *[[NP-полнота задачи о раскраске графа]] | ||
− | == Лекция 4 == | + | ==Лекция 4== |
+ | *[[Схемная сложность]] | ||
+ | *[[P/poly]] | ||
+ | *[[Редкие языки]] | ||
+ | *[[Теорема Махэни]] | ||
+ | |||
+ | == Лекция 5 == | ||
*[[Класс PS]] | *[[Класс PS]] | ||
*[[Теорема Сэвича]] | *[[Теорема Сэвича]] | ||
Строка 44: | Строка 76: | ||
== Лекция 6 == | == Лекция 6 == | ||
+ | *Классы [[L]], [[NL]], [[NL-полнота|NLC]] | ||
*[[NL-полнота задачи о достижимости в графе]] | *[[NL-полнота задачи о достижимости в графе]] | ||
*[[Классы EXP, NEXP. Полнота языков EXP и NEXP]] | *[[Классы EXP, NEXP. Полнота языков EXP и NEXP]] | ||
Строка 54: | Строка 87: | ||
*[[Полиномиальная иерархия]] | *[[Полиномиальная иерархия]] | ||
*[[Теоремы о коллапсе полиномиальной иерархии]] | *[[Теоремы о коллапсе полиномиальной иерархии]] | ||
+ | |||
+ | == Лекция 7 == | ||
+ | *[[Теорема Карпа-Липтона]] | ||
== Практика 7 == | == Практика 7 == | ||
− | *[[Класс | + | *[[Вероятностная машина Тьюринга]] |
+ | *[[Сложностный класс ZPP]] | ||
+ | *[[Сложностные классы RP и coRP]] | ||
+ | *[[Сложностный класс PP]] | ||
+ | *[[Сложностный класс BPP]] | ||
+ | *[[Уменьшение ошибки в классе RP, сильное и слабое определение]] | ||
+ | |||
+ | == Лекция 8 == | ||
+ | *[[Теорема о включении BPP в P/poly]] | ||
+ | *[[Теорема Лаутемана]] | ||
+ | *[[Теорема Валианта-Вазирани]] | ||
+ | |||
+ | == Практика 8 == | ||
+ | *[[Лемма Шварца-Зиппеля]] | ||
+ | |||
+ | == Лекция 9 == | ||
+ | *[[Класс IP|Класс IP]] | ||
+ | *[[GNI|Принадлежность проблемы GNI классу IP]] | ||
+ | *[[Sharp SAT|#SAT]] | ||
+ | |||
+ | == Лекция 10 == | ||
+ | *[[Теорема Шамира]] | ||
+ | *[[Семейство универсальных попарно независимых хеш-функций|Семейство универсальных попарно независимых хеш-функций]] | ||
+ | *[[Протокол Гольдвассера-Сипсера для оценки размера множества]] | ||
+ | *[[Теорема Голдвассера, Сипсера]] | ||
+ | |||
+ | == Лекция 11 == | ||
+ | *[[Абсолютная секретность]] | ||
+ | *[[Лемма о невозможности существования вычислительно безопасных шифров в случае P = NP]] | ||
+ | *[[Односторонние функции и псевдослучайные генераторы]] | ||
+ | *[[Доказательства с нулевым разглашением]] | ||
+ | |||
+ | == Лекция 12 == | ||
+ | *[[Кубит]] | ||
+ | *[[Унитарные операторы]] | ||
+ | *[[ЭПР парадокс]] | ||
+ | *[[Квантовый логический элемент NOT]] | ||
+ | *[[Преобразование Адамара]] | ||
+ | *[[Квантовый логический элемент CNOT]] | ||
+ | *[[Квантовый логический элемент Тоффоли]] | ||
+ | *[[Квантовая схема]] | ||
+ | |||
+ | == Лекция 13 == | ||
+ | *[[Класс PCP]] |
Текущая версия на 19:10, 4 сентября 2022
Лекция 1. Вводная
Начнем курс с введения понятий DTIME и DSPACE.
- DTIME(f(n)) = машина Тьюринга , где — длина входа .
- DSPACE(f(n)) = машина Тьюринга .
Аналогичным образом введем классы NSPACE и NTIME, использующие недетерминированную машину Тьюринга взамен детерминированной (в течении всего курса префикс D соответствует детерминизму, а N — недетерминизму).
Рассмотрим и докажем теоремы о емкостной и временной иерархии.
- Теорема о емкостной иерархии утверждает, что для любых двух конструируемых по памяти функций и таких, что , выполняется DSPACE(g(n)) ≠ DSPACE(f(n)).
- Теорема о временной иерархии утверждает, что для любых двух конструируемых по времени функций и таких, что , выполняется DTIME(g(n)) ≠ DTIME(f(n)).
Через понятия классов DSPACE, DTIME, NSPACE и NTIME будет дано определение многим сложностным классам, в том числе P и NP.
Класс P — класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время. Формально:
- P= DTIME
В свою очередь, при разрешении языка из класса NP используется недетерминированная машина:
- NP= NTIME
Дадим определение класса NP на языке сертификатов:
- NP=NP). Поясним, что является сертификатом принадлежности языку , если существует полиномиальное отношение (верификатор) , такое что тогда и только тогда, когда принадлежит . (первое равенство доказывается в статье
Вместе со многими сложностными классами имеет смысл рассматривать и их дополнения (используется приставка co-). Например, класс co-NP.
Введем в рассмотрение отношения между языками: сведение по Карпу и сведение по Куку.
- Язык сводится по Карпу к языку , если существует функция такая, что тогда и только тогда, когда .
- Язык сводится по Куку к , если существует разрешающая язык программа , работающая полиномиальное время от длины входа, которая может использовать разрешающую программу для языка в качестве оракула. При этом время работы не учитывается.
В дальнейшем чаще будет рассматриваться сведение по Карпу.