Сведение по Карпу — различия между версиями
(→Теорема о транзитивности) |
(→Доказательство транзитивности) |
||
| Строка 24: | Строка 24: | ||
Пусть <tex>A \le B</tex>. Тогда существует функция <tex>f</tex>: <tex>x \in A \Leftrightarrow f(x) \in B</tex>. Пусть в свою очередь <tex>B \le C</tex> и есть функция <tex>g</tex>: <tex>y \in B \Leftrightarrow g(y) \in C</tex>. | Пусть <tex>A \le B</tex>. Тогда существует функция <tex>f</tex>: <tex>x \in A \Leftrightarrow f(x) \in B</tex>. Пусть в свою очередь <tex>B \le C</tex> и есть функция <tex>g</tex>: <tex>y \in B \Leftrightarrow g(y) \in C</tex>. | ||
| − | Рассмотрим функция <tex>h(x) = g(f(x))</tex>. <tex>x \in A \Leftrightarrow f(x) \in B</tex>. Также <tex>f(x) \in B \Leftrightarrow g(f(x)) \in C</tex>. | + | Рассмотрим функция <tex>h(x) = g(f(x))</tex>. <tex>x \in A \Leftrightarrow f(x) \in B</tex>. Также <tex>f(x) \in B \Leftrightarrow g(f(x)) \in C</tex>. То есть <tex>x \in A \Leftrightarrow h(x) = g(f(x)) \in C </tex>. |
| − | Проверим, что функция <tex>h(x)</tex> вычислима за полиномиальное время от длины входа. Для вычисления значения функции <tex>h(x)</tex> сначала нужно вычислить <tex>f(x)</tex>. Время вычисления <tex>f(x)</tex> ограничено сверху некоторым полиномом <tex>p_1(|x|)</tex>, | + | Проверим, что функция <tex>h(x)</tex> вычислима за полиномиальное время от длины входа. Для вычисления значения функции <tex>h(x)</tex> сначала нужно вычислить <tex>f(x)</tex>. Время вычисления <tex>f(x)</tex> ограничено сверху некоторым полиномом <tex>p_1(|x|)</tex>, так как эта функция применяется в сведении по Карпу. Затем нужно вычислить <tex>g(f(x))</tex>. Пусть <tex>t = f(x)</tex>. Так как за единицу времени может быть написан лишь один символ, то <tex>|t| < p_1(|x|)</tex>. Время вычисления <tex>g(t)</tex> ограничено сверху некоторым полиномом <tex>p_2(|t|)</tex>. Таким образом, время вычисления <tex>h(x)</tex> не больше <tex>p_2(p_1(|x|)) + p_1(|x|)</tex>. |
---- | ---- | ||
| − | + | Смотрите также [[сведение по Куку]]. | |
Версия 14:17, 19 марта 2010
Определение
Язык сводится по Карпу к языку , если существует функция такая, что тогда и только тогда, когда .
Обычно требуют, чтобы сводящая функция была вычислима за полиномиальное время от длины входа.
Заметим, что в таком случае класс языков замкнут относительно сведения по Карпу. Если язык не равен пустому языку и не равен , то существуют слова и . Сводящая функция может решить сводимую задачу за полиномиальное время от длины входа и выдать , если , или , если
Пример
Рассмотрим следующие языки: и — множества пар , где — граф, — натуральное число. Пара принадлежит , если в графе есть подграф с вершинами, в котором все вершины не связаны ребрами. Пара принадлежит , если в графе есть подграф с вершинами, в котором между каждой парой вершин проходит ребро.
Существует функция такая, что , где — граф, в котором столько же вершин, сколько и в , а ребра расставлены следующим образом: если в графе между вершинами и есть ребро, то в графе это ребро не проводится, если же в графе между этими вершинами его не было, то в оно есть между соответствующими вершинами. Эта функция вычисляется за линейное время от длины входа, если представлять граф в виде матрицы смежности.
Заметим, что если в графе был независимый подграф с вершинами, то в между всеми вершинами подграфа будут ребра, следовательно, в графе будет клика с вершинами.
С другой стороны, если в есть клика с вершинами, значит между всеми вершинами клики проведены ребра, а значит их не было в графе . Таким образом, в графе был независимый подграф с вершинами.
Из всего сказанного следует, что .
Теорема о транзитивности
Операция сведения по Карпу транзитивна. То есть, если , , то .
Доказательство транзитивности
Пусть . Тогда существует функция : . Пусть в свою очередь и есть функция : .
Рассмотрим функция . . Также . То есть .
Проверим, что функция вычислима за полиномиальное время от длины входа. Для вычисления значения функции сначала нужно вычислить . Время вычисления ограничено сверху некоторым полиномом , так как эта функция применяется в сведении по Карпу. Затем нужно вычислить . Пусть . Так как за единицу времени может быть написан лишь один символ, то . Время вычисления ограничено сверху некоторым полиномом . Таким образом, время вычисления не больше .
Смотрите также сведение по Куку.