Обсуждение:Заглавная страница — различия между версиями
Shersh (обсуждение | вклад) (Данные изменения здесь неуместны) |
|||
Строка 1: | Строка 1: | ||
− | + | == 2-SAT Выполнимость == | |
− | |||
− | + | Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома). <br> | |
+ | 2-SAT выполнимость данной функции - эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1. | ||
− | |||
− | + | == Алгоритм Решения == | |
− | |||
− | + | Рассмотрим любой дизъюнкт функции: (a || b) <br> | |
+ | Несложно заметить, что это равнозначно записи !a => b и !b => a <br> | ||
− | + | Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: !a => b и !b => a для каждого дизъюнкта функции (a || b) <br> | |
− | |||
− | |||
− | |||
− | == | + | Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. (!x => x && x => !x) |
− | |||
− | == | + | == Доказательство == |
− | + | Пусть 2-SAT имеет решение. <br> | |
+ | Докажем, что не может быть такого, чтобы для любой переменной x из вершины x можно достичь !x и из вершины !x можно достичь x одновременно. (!x => x && x => !x) <br> | ||
+ | Тогда чтобы из !x достичь x (!x => x) x было верным, x должен быть равен 1. С другой стороны для того, чтобы из x достичь !x (!x => x) было верным, x должен быть равен 0. Отсюда следует противоречие. <br> <br> | ||
− | + | Пусть для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. <br> | |
+ | Докажем, что этого достаточно, чтобы 2-SAT имело решение. <br> | ||
+ | Пусть из !x можно достичь x, но из вершины x нельзя достичь !x. Докажем, что из x не достижимо такой y, что из y достижимо !y. (т.е. x => y => !y. (x = 1, y = 0)). <br> | ||
+ | Если из x => y, то (!x || y), отсюда следует (!y => !x). Тогда x => y => !y => !x. Следовательно x => !x. Противоречие. | ||
− | + | == Ссылки == | |
− | + | *[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ] |
Версия 17:53, 19 ноября 2015
2-SAT Выполнимость
Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).
2-SAT выполнимость данной функции - эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.
Алгоритм Решения
Рассмотрим любой дизъюнкт функции: (a || b)
Несложно заметить, что это равнозначно записи !a => b и !b => a
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: !a => b и !b => a для каждого дизъюнкта функции (a || b)
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. (!x => x && x => !x)
Доказательство
Пусть 2-SAT имеет решение.
Докажем, что не может быть такого, чтобы для любой переменной x из вершины x можно достичь !x и из вершины !x можно достичь x одновременно. (!x => x && x => !x)
Тогда чтобы из !x достичь x (!x => x) x было верным, x должен быть равен 1. С другой стороны для того, чтобы из x достичь !x (!x => x) было верным, x должен быть равен 0. Отсюда следует противоречие.
Пусть для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно.
Докажем, что этого достаточно, чтобы 2-SAT имело решение.
Пусть из !x можно достичь x, но из вершины x нельзя достичь !x. Докажем, что из x не достижимо такой y, что из y достижимо !y. (т.е. x => y => !y. (x = 1, y = 0)).
Если из x => y, то (!x || y), отсюда следует (!y => !x). Тогда x => y => !y => !x. Следовательно x => !x. Противоречие.