Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи — различия между версиями
Leugenea (обсуждение | вклад) м |
Leugenea (обсуждение | вклад) (Добавил определение сложного языка) |
||
| Строка 26: | Строка 26: | ||
Проверим, что <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>. | ||
| + | }} | ||
| + | |||
| + | {{Определение | ||
| + | |definition = | ||
| + | <tex>C</tex> — сложностный класс, <tex>\widetilde{D}</tex> — сведение. Язык <tex>L</tex> называется '''<tex>C</tex>-трудным относительно сведения <tex>\widetilde{D}</tex> (<tex>C</tex>-hard)''', если любой язык <tex>M</tex> из <tex>C</tex> сводится по <tex>\widetilde{D}</tex> к <tex>L</tex>:<br> | ||
| + | <tex> (L </tex> — <tex>C</tex>-hard <tex>) \Leftrightarrow ( \forall M \in C \Rightarrow M \leq_{f} L, f \in \widetilde{D} ) </tex>. | ||
}} | }} | ||
Версия 22:32, 15 апреля 2012
| Определение: |
| Язык сводится по Карпу к языку (), если существует такая функция , вычислимая за полиномиальное от длины входа время, что принадлежит тогда и только тогда, когда принадлежит : . |
Банальный пример сведения по Карпу
Зададим следующие языки:
- — множество пар вида , где — граф, а — число, таких, что в есть независимое множество размера .
- — множество пар вида , где — граф, а — опять же, число, таких, что в есть клика размера .
Докажем, что .
Рассмотрим функцию , где — дополнение графа . вычислима за линейное время от длины входа, если граф представлен в видел матрицы смежности.
- () Заметим, что если в было независимое множество размера , то в будет клика такого же размера (вершины, которые были в независимом множестве, в попарно соединены рёбрами и образуют клику).
- () Обратно, если в есть клика размера , то в исходном графе было независимое множество размера .
Таким образом, по определению.
Замечание. Многие другие примеры сведения по Карпу могут быть найдены в статье про примеры NP-полных языков.
| Теорема (о транзитивности): |
Сведение по Карпу транзитивно, то есть: . |
| Доказательство: |
|
Пусть и — функции из определения сведения для и соответственно. Из определения следует: . |
| Определение: |
| — сложностный класс, — сведение. Язык называется -трудным относительно сведения (-hard), если любой язык из сводится по к : — -hard . |