Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи — различия между версиями
Leugenea (обсуждение | вклад) (Добавил пример сведения) |
Leugenea (обсуждение | вклад) (Добавил теорему о транзитивности) |
||
Строка 16: | Строка 16: | ||
* (<tex>x \in L_1 \Leftarrow f(x) \in L_2</tex>) Обратно, если в <tex>\overline{G}</tex> есть клика размера <tex>k</tex>, то в исходном графе было независимое множество размера <tex>k</tex>. | * (<tex>x \in L_1 \Leftarrow f(x) \in L_2</tex>) Обратно, если в <tex>\overline{G}</tex> есть клика размера <tex>k</tex>, то в исходном графе было независимое множество размера <tex>k</tex>. | ||
Таким образом, <tex>IND \leq CLIQUE</tex> по определению. | Таким образом, <tex>IND \leq CLIQUE</tex> по определению. | ||
+ | |||
+ | '''Замечание.''' Многие другие примеры сведения по Карпу могут быть найдены в статье про [[Примеры NP-полных языков. Теорема Кука | примеры NP-полных языков]]. | ||
+ | |||
+ | {{Теорема | ||
+ | |about=о транзитивности | ||
+ | |statement=Сведение по Карпу транзитивно, то есть: <tex> ( L_1 \leq L_2, L_2 \leq L_3 ) \Rightarrow L_1 \leq L_3 </tex>. | ||
+ | |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>. | ||
+ | Проверим, что <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(p_1(|x|))</tex>. | ||
+ | В итоге получаем, что итоговое время работы <tex>g(f(x))</tex> не более, чем <tex>p_2(p_1(|x|)) + p_1(|x|)</tex>. | ||
+ | }} |
Версия 22:05, 15 апреля 2012
Эта статья находится в разработке!
Определение: |
Язык . | сводится по Карпу к языку ( ), если существует такая функция , вычислимая за полиномиальное от длины входа время, что принадлежит тогда и только тогда, когда принадлежит :
Банальный пример сведения по Карпу
Зададим следующие языки:
- независимое множество размера . — множество пар вида , где — граф, а — число, таких, что в есть
- клика размера . — множество пар вида , где — граф, а — опять же, число, таких, что в есть
Докажем, что
Рассмотрим функцию , где — дополнение графа . вычислима за линейное время от длины входа, если граф представлен в видел матрицы смежности.
- ( ) Заметим, что если в было независимое множество размера , то в будет клика такого же размера (вершины, которые были в независимом множестве, в попарно соединены рёбрами и образуют клику).
- ( ) Обратно, если в есть клика размера , то в исходном графе было независимое множество размера .
Таким образом,
по определению.Замечание. Многие другие примеры сведения по Карпу могут быть найдены в статье про примеры NP-полных языков.
Теорема (о транзитивности): |
Сведение по Карпу транзитивно, то есть: . |
Доказательство: |
Пусть В итоге получаем, что итоговое время работы и — функции из определения сведения для и соответственно. Из определения следует: . Проверим, что вычислима за полиномиальное время от . В самом деле, сначала нужно вычислить , на это необходимо не более, чем времени ( — полином). Более того, длина входа в не превышает того же , так как за единицу времени может быть выведен максимум один символ. Значит, вычисление на займёт времени не более, чем . не более, чем . |