Классы Sharp P, Sharp P-Complete — различия между версиями
(→Примеры #P-полных задач) |
(→Примеры #P-полных задач) |
||
Строка 66: | Строка 66: | ||
По данной формуле <tex>\phi</tex> с <tex>n</tex> переменными и <tex>m</tex> "клозами" построим целочисленную матрицу <tex>A'</tex> такую, что <tex>perm(A')=4^m\cdot(\#\phi)</tex>, где <tex>\#\phi -</tex> количество удовлетворяющих постановок для <tex>\phi</tex>. | По данной формуле <tex>\phi</tex> с <tex>n</tex> переменными и <tex>m</tex> "клозами" построим целочисленную матрицу <tex>A'</tex> такую, что <tex>perm(A')=4^m\cdot(\#\phi)</tex>, где <tex>\#\phi -</tex> количество удовлетворяющих постановок для <tex>\phi</tex>. | ||
+ | |||
+ | Основная идея заключается в том, что наше построение будет приводить к существованию в соответствующем двудольном графе <tex>G'</tex> циклов двух видов: тех, которые соответствуют удовлетворяющим назначениям, и тех, которые не соответствуют. Покажем, что любое удовлетворяющее назначение добавляет <tex>4^m</tex> к <tex>perm(A')</tex>. | ||
+ | Тогда <tex>perm(A')=4^m\cdot(\#\phi)</tex>. Для построения графа <tex>G'</tex> будем использовать три вида блоков. | ||
+ | |||
+ | '''Блок переменной'''. Блок каждой переменной имеет два цикла положительного веса, соответствующие присвоению 0 и 1 данной переменной. Присвоение 1 соответствует циклу, содержащему все "внешние" ребра, присвоение 0 соответствует циклу, включающему ребра-петли. Каждое внешнее ребро ассоциировано с одним клозом, в котором присутствует данная переменная. | ||
+ | |||
+ | '''Блок клоза'''. Любой цикл для данного блока не содержит в себе как минимум одно внешнее ребро. И для любого подмножества внешних ребер (за исключением набора из всех ребер) существует цикл веса 1. Каждое внешнее ребро ассоциировано с одной переменной, присутствующей в рассматриваемом клозе. | ||
+ | |||
+ | '''Блок <tex>XOR</tex>'''. Цель данного клоза - убедиться, что для произвольной пары ребер <tex>uu'</tex> и <tex>vv'</tex> ровно одно присутствует в любом из покрытий циклами, учитывающие в итоговой сумме. Допустим, мы заменяем пару ребер <tex>uu'</tex> и <tex>vv'</tex> на блок XOR. Каждый цикл в <tex>G</tex> веса <tex>w</tex>, проходящий через ровно одно из ребер <tex>uu'</tex> и <tex>vv'</tex>, превращается в набор циклов в графе <tex>G'</tex> общим весом <tex>4w</tex> : вклад дает набор циклов, которые заходят в блок через <tex>u</tex> и выходят через <tex>u'</tex> или заходят через <tex>v</tex> и выходят через <tex>v'</tex>, вес остальных циклов в сумме равняется <tex>0</tex> и при дальнейшем подсчете мы можем их не учитывать. Блок <tex>XOR</tex>'a соединяет блоки переменных с соответствующими блоками клозов так, чтобы вклад в общую сумму вносили только те циклы, которые соответствуют удовлетворяющим назначениям. | ||
+ | |||
+ | Рассмотрим клоз и переменную внутри него. Рассмотрим внешние ребра соответствующих блоков и соединим их при помощи <tex>XOR</tex>-блока. Теперь если при построении цикла мы не проходим через внешнее ребро клоза, то мы гарантированно проходим по внешнему ребру переменной, что аналогично присвоению переменной значения true. | ||
}} | }} |
Версия 22:40, 18 апреля 2017
Класс #P
Определение: |
Более формально: принадлежит , если существует и машина Тьюринга такая, что для любого . | представляет класс задач, решением которых является количество успешных (завершающихся в допускающих состояниях) путей вычислений для недетерминированной МТ, работающей за полиномиальное время. Отличается от большинства рассмотренных классов тем, что задачи требуют в качестве ответа не или , а натуральное число.
Вопрос, являются ли задачи из
//эффективно разрешимыми// остается открытым. Класс - аналог класса для задач, ответ на которые представляется не битовым значением, а натуральным числом. Подсчет числа сертификатов как минимум столь же сложно, как и проверка наличия сертификата, а значит, если доказать равенство , то автоматически будет доказано . Однако из вовсе не следует . Если , то , так как подсчет числа сертификатов может быть выполнен за полиномиальную память.Примеры задач из #P
- #SAT
- - имея ориентированный граф , посчитать число простых циклов. Аналогичная задача, отвечающая на вопрос, существует ли в заданном ориентированном графе простой цикл, может быть решена за линейное время при помощи поиска в ширину. Проблема подсчета всех простых циклов значительно сложнее.
- Для данного массива целых чисел посчитать количество подмножеств его элементов, таких, что сумма по всем элементам подмножества равняется 0.
- Для данного взвешенного неориентированного графа посчитать количество Гамильтоновых циклов веса меньше k.
Теорема: |
Если , тогда . |
Доказательство: |
Для графа |
Класс #P-Complete
Определение: |
является -полной, если и получение для алгоритма работающего за полиномиальное время влечет равенство . |
Для более формального определения будем использовать МТ с оракулом для нашей функции . Для нашего типа задач оракул будет отвечать на вопросы вида "Принадлежит ли слово языку ?" за один шаг МТ. Для функции будем называть множество функций, вычислимых за полиномиальное время на МТ с оракулом для функции .
Тогда
-полная, если и любая принадлежит .Если
, тогда . Получаем, что, если -полная и , то .Для множества языков из
(таких как ) существуют их версии из . См. .Примеры #P-полных задач
Многие задачи из класса
полных получаются из задач разрешимости из класса за счет требования подсчета всевозможных удовлетворяющих наборов входных значений.- #SAT
- Посчитать количество возможных подстановок, для которых заданная в ДНФ формула будет удовлетворена.
- Посчитать количество полных паросочетаний в данном двудольном графе.
- Вычислить значение перманента матрицы, заполненной нулями и единицами.
- Посчитать количество способов раскрасить заданный граф в цветов.
Теорема: | ||
Задача вычисления перманента матрицы, заполненной нулями и единицами является полной. | ||
Доказательство: | ||
Тогда тогда и только тогда, когда является совершенным паросочетанием. В таком случае, равен числу совершенных паросочетаний в графе .Нам известно, что задача является -полной. Аналогично задачам и мы можем сказать, что задача может быть сведена к задаче , которая также будет -полной.Сведем задачу к задаче .По данной формуле с переменными и "клозами" построим целочисленную матрицу такую, что , где количество удовлетворяющих постановок для .Основная идея заключается в том, что наше построение будет приводить к существованию в соответствующем двудольном графе циклов двух видов: тех, которые соответствуют удовлетворяющим назначениям, и тех, которые не соответствуют. Покажем, что любое удовлетворяющее назначение добавляет к . Тогда . Для построения графа будем использовать три вида блоков.Блок переменной. Блок каждой переменной имеет два цикла положительного веса, соответствующие присвоению 0 и 1 данной переменной. Присвоение 1 соответствует циклу, содержащему все "внешние" ребра, присвоение 0 соответствует циклу, включающему ребра-петли. Каждое внешнее ребро ассоциировано с одним клозом, в котором присутствует данная переменная. Блок клоза. Любой цикл для данного блока не содержит в себе как минимум одно внешнее ребро. И для любого подмножества внешних ребер (за исключением набора из всех ребер) существует цикл веса 1. Каждое внешнее ребро ассоциировано с одной переменной, присутствующей в рассматриваемом клозе. Блок Рассмотрим клоз и переменную внутри него. Рассмотрим внешние ребра соответствующих блоков и соединим их при помощи . Цель данного клоза - убедиться, что для произвольной пары ребер и ровно одно присутствует в любом из покрытий циклами, учитывающие в итоговой сумме. Допустим, мы заменяем пару ребер и на блок XOR. Каждый цикл в веса , проходящий через ровно одно из ребер и , превращается в набор циклов в графе общим весом : вклад дает набор циклов, которые заходят в блок через и выходят через или заходят через и выходят через , вес остальных циклов в сумме равняется и при дальнейшем подсчете мы можем их не учитывать. Блок 'a соединяет блоки переменных с соответствующими блоками клозов так, чтобы вклад в общую сумму вносили только те циклы, которые соответствуют удовлетворяющим назначениям. -блока. Теперь если при построении цикла мы не проходим через внешнее ребро клоза, то мы гарантированно проходим по внешнему ребру переменной, что аналогично присвоению переменной значения true. | ||