Теория сложности (старая трешовая версия) — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Лекция 10)
м (rollbackEdits.php mass rollback)
 
(не показана 41 промежуточная версия 14 участников)
Строка 1: Строка 1:
== Лекция 1 ==
+
== Лекция 1. Вводная ==
*[[Класс DSPACE]]
+
Начнем курс с введения понятий '''[[DTIME]]''' и '''[[DSPACE]]'''.
*[[Класс DTIME]]
+
 
*[[Теорема о емкостной иерархии]]
+
*'''DTIME'''(''f''(''n'')) = <tex>\{ L \mid \exists </tex> машина Тьюринга <tex>m : L(m)=L, Time(m,x) \le f(|x|) \}</tex>, где <tex>|x|</tex> &mdash; длина входа <tex>x</tex>.
*[[Теорема о временной иерархии]]
+
 
*[[Сведение по Карпу]]
+
*'''DSPACE'''(''f''(''n'')) = <tex>\{ L \mid \exists </tex> машина Тьюринга <tex>m : L(m)=L, Space(m,x) \le f(|x|) \}</tex>.
*[[Сведение по Куку]]
+
 
*[[Класс P]]
+
Аналогичным образом введем классы '''[[NSPACE]]''' и '''[[NTIME]]''', использующие недетерминированную машину Тьюринга взамен детерминированной (в течении всего курса префикс '''D''' соответствует детерминизму, а '''N''' &mdash; недетерминизму).
*[[Класс NP]]
+
 
*[[Класс coNP]]
+
Рассмотрим и докажем теоремы о емкостной и временной иерархии.
 +
 
 +
*[[Теорема о емкостной иерархии]] утверждает, что для любых двух [[Конструируемая по памяти функция|конструируемых по памяти функций]] <tex>f</tex> и <tex>g</tex> таких, что <tex> \lim \limits_{n \rightarrow \infty} f(n)/g(n) = 0</tex>, выполняется '''DSPACE'''(''g''(''n'')) &ne; '''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'')) &ne; '''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]]
 
*[[Теорема Сэвича]]
 
*[[Теорема Сэвича]]
Строка 61: Строка 93:
 
== Практика 7 ==
 
== Практика 7 ==
 
*[[Вероятностная машина Тьюринга]]
 
*[[Вероятностная машина Тьюринга]]
*[[Класс ZPP]]
+
*[[Сложностный класс ZPP]]
 
*[[Сложностные классы RP и coRP]]
 
*[[Сложностные классы RP и coRP]]
 
*[[Сложностный класс PP]]
 
*[[Сложностный класс PP]]
Строка 81: Строка 113:
  
 
== Лекция 10 ==
 
== Лекция 10 ==
 +
*[[Теорема Шамира]]
 
*[[Семейство универсальных попарно независимых хеш-функций|Семейство универсальных попарно независимых хеш-функций]]
 
*[[Семейство универсальных попарно независимых хеш-функций|Семейство универсальных попарно независимых хеш-функций]]
*[[Теорема Шамира]]
+
*[[Протокол Гольдвассера-Сипсера для оценки размера множества]]
 +
*[[Теорема Голдвассера, Сипсера]]
 +
 
 +
== Лекция 11 ==
 +
*[[Абсолютная секретность]]
 +
*[[Лемма о невозможности существования вычислительно безопасных шифров в случае P = NP]]
 +
*[[Односторонние функции и псевдослучайные генераторы]]
 +
*[[Доказательства с нулевым разглашением]]
 +
 
 +
== Лекция 12 ==
 +
*[[Кубит]]
 +
*[[Унитарные операторы]]
 +
*[[ЭПР парадокс]]
 +
*[[Квантовый логический элемент NOT]]
 +
*[[Преобразование Адамара]]
 +
*[[Квантовый логический элемент CNOT]]
 +
*[[Квантовый логический элемент Тоффоли]]
 +
*[[Квантовая схема]]
 +
 
 +
== Лекция 13 ==
 +
*[[Класс PCP]]

Текущая версия на 19:10, 4 сентября 2022

Лекция 1. Вводная

Начнем курс с введения понятий DTIME и DSPACE.

  • DTIME(f(n)) = [math]\{ L \mid \exists [/math] машина Тьюринга [math]m : L(m)=L, Time(m,x) \le f(|x|) \}[/math], где [math]|x|[/math] — длина входа [math]x[/math].
  • DSPACE(f(n)) = [math]\{ L \mid \exists [/math] машина Тьюринга [math]m : L(m)=L, Space(m,x) \le f(|x|) \}[/math].

Аналогичным образом введем классы NSPACE и NTIME, использующие недетерминированную машину Тьюринга взамен детерминированной (в течении всего курса префикс D соответствует детерминизму, а N — недетерминизму).

Рассмотрим и докажем теоремы о емкостной и временной иерархии.


Через понятия классов DSPACE, DTIME, NSPACE и NTIME будет дано определение многим сложностным классам, в том числе P и NP.

Класс P — класс языков (задач), разрешимых на детерминированной машине Тьюринга за полиномиальное время. Формально:

  • P=[math]\bigcup_{i=0}^{\infty}[/math]DTIME[math](in^i)[/math]

В свою очередь, при разрешении языка из класса NP используется недетерминированная машина:

  • NP=[math]\bigcup_{i=0}^{\infty}[/math] NTIME[math](in^i)[/math]

Дадим определение класса NP на языке сертификатов:

  • NP=[math]\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\}[/math] (первое равенство доказывается в статье NP). Поясним, что [math]y[/math] является сертификатом принадлежности [math]x[/math] языку [math]L[/math], если существует полиномиальное отношение (верификатор) [math]R[/math], такое что [math]R(x,y)=1[/math] тогда и только тогда, когда [math]x[/math] принадлежит [math]L[/math].

Вместе со многими сложностными классами имеет смысл рассматривать и их дополнения (используется приставка co-). Например, класс co-NP.


Введем в рассмотрение отношения между языками: сведение по Карпу и сведение по Куку.

  • Язык [math]A[/math] сводится по Карпу к языку [math]B[/math], если существует функция [math]f(x)[/math] такая, что [math]x \in A[/math] тогда и только тогда, когда [math]f(x) \in B[/math].
  • Язык [math]A[/math] сводится по Куку к [math]B[/math], если существует разрешающая язык [math]A[/math] программа [math]m[/math], работающая полиномиальное время от длины входа, которая может использовать разрешающую программу [math]m_B[/math] для языка [math]B[/math] в качестве оракула. При этом время работы [math]m_B[/math] не учитывается.

В дальнейшем чаще будет рассматриваться сведение по Карпу.

Практика 1

Лекция 2

Практика 2

Лекция 3

Практика 3

Практика, которой на самом деле не было

Лекция 4

Лекция 5

Лекция 6

Практика 6

Лекция 7

Практика 7

Лекция 8

Практика 8

Лекция 9

Лекция 10

Лекция 11

Лекция 12

Лекция 13