Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи — различия между версиями
Leugenea (обсуждение | вклад) м (→Определения трудных и сложных задач) |
Leugenea (обсуждение | вклад) м (→Свойства сведения) |
||
| Строка 33: | Строка 33: | ||
|proof= | |proof= | ||
Пусть <tex>f</tex> и <tex>g</tex> — функции из определения сведения для <tex> L_1 \leq L_2 </tex> и <tex> L_2 \leq L_3 </tex> соответственно. Из определения следует: <tex>x \in L_1 \Leftrightarrow f(x) \in L_2 \Leftrightarrow g(f(x)) \in L_3</tex>.<br> | Пусть <tex>f</tex> и <tex>g</tex> — функции из определения сведения для <tex> L_1 \leq L_2 </tex> и <tex> L_2 \leq L_3 </tex> соответственно. Из определения следует: <tex>x \in L_1 \Leftrightarrow f(x) \in L_2 \Leftrightarrow g(f(x)) \in L_3</tex>.<br> | ||
| − | Проверим, что <tex>g(f(x))</tex> вычислима за полиномиальное время от <tex>|x|</tex>. В самом деле, сначала нужно вычислить <tex>f(x)</tex>, на это необходимо не более, чем <tex>p_1(|x|)</tex> времени (<tex>p_1</tex> — полином). Более того, длина входа <tex>g</tex> в <tex>g(f(x))</tex> не превышает того же <tex>p_1(|x|)</tex>, так как за единицу времени может быть выведен максимум один символ. Значит, вычисление <tex>g</tex> на <tex>f(x)</tex> займёт времени не более, чем <tex>p_2(|f(x)|)</tex> (<tex>p_2</tex> — тоже полином), что, по выше сказанному, не превосходит <tex>p_2(p_1(|x|))</tex>. | + | Проверим, что <tex>g(f(x))</tex> вычислима за полиномиальное время от <tex>|x|</tex>. В самом деле, сначала нужно вычислить <tex>f(x)</tex>, на это необходимо не более, чем <tex>p_1(|x|)</tex> времени (<tex>p_1</tex> — полином, не умаляя общности можно считать, что он монотонно неубывающий). Более того, длина входа <tex>g</tex> в <tex>g(f(x))</tex> не превышает того же <tex>p_1(|x|)</tex>, так как за единицу времени может быть выведен максимум один символ. Значит, вычисление <tex>g</tex> на <tex>f(x)</tex> займёт времени не более, чем <tex>p_2(|f(x)|)</tex> (<tex>p_2</tex> — тоже полином, тоже монотонно неубывающий), что, по выше сказанному, не превосходит <tex>p_2(p_1(|x|))</tex>. |
В итоге получаем, что итоговое время работы <tex>g(f(x))</tex> не более, чем <tex>p_2(p_1(|x|)) + p_1(|x|)</tex>, что является полиномом от <tex>|x|</tex>. | В итоге получаем, что итоговое время работы <tex>g(f(x))</tex> не более, чем <tex>p_2(p_1(|x|)) + p_1(|x|)</tex>, что является полиномом от <tex>|x|</tex>. | ||
}} | }} | ||
Версия 12:58, 9 мая 2012
Содержание
Определения
| Определение: |
| — класс языков, удовлетворяющих некоторым ограничениям; — класс вычислимых функций, удовлетворяющих тем же ограничениям.
Язык сводится к языку относительно (), если существует такая функция из , что принадлежит тогда и только тогда, когда принадлежит : |
| Определение: |
| Сведение относительно называется сведением по Карпу. |
Замечание. Часто используется именно сведение по Карпу, поэтому слова «относительно сведения по Карпу» и индекс у символа сведения обычно опускают.
Простой пример сведения по Карпу
Зададим следующие языки:
- — множество пар вида , где — граф, а — число, такое, что в есть независимое множество размера .
- — множество пар вида , где — граф, а — число, такое, что в есть клика размера .
| Теорема: |
| Доказательство: |
|
Рассмотрим функцию , где — дополнение графа . вычислима за линейное время от длины входа, если граф задан в виде матрицы смежности.
|
Замечание. Другие примеры сведения по Карпу приведены в статье, содержащей примеры NP-полных языков.
Свойства сведения
| Теорема (о транзитивности): |
Сведение по Карпу транзитивно, то есть: . |
| Доказательство: |
|
Пусть и — функции из определения сведения для и соответственно. Из определения следует: . |
| Лемма: |
| Доказательство: |
|
По определению сведения существует такая функция из класса , что . Для того, чтобы свести к будем использовать ту же функцию . |
Определения трудных и сложных задач
| Определение: |
| — сложностный класс, — класс вычислимых функций. Язык называется -трудным относительно -сведения (-hard), если любой язык из сводится к относительно : — -hard . |
| Определение: |
| — сложностный класс, — класс вычислимых функций. Язык называется -полным относительно -сведения (-complete), если является -трудным относительно -сведения и сам лежит в . |