Вопросы реализации в проблеме 2-удовлетворенности

Я хочу реализовать задачу 2-SAT для 100000 литералов. Таким образом, было бы 200000 вершин. Так что я застрял на наличие массива всех достижимых вершин из каждой вершины, сложность пространства O(200000^2) что невозможно, поэтому, пожалуйста, предложите решение для этого. И, пожалуйста, пролите немного света на эффективную реализацию проблемы 2-SAT.

2 ответа

Решение

Из википедии:

... 2-выполнимость может быть решена за полиномиальное время. Как заметил Aspvall, Plass & Tarjan (1979), экземпляр 2-выполнимости разрешим в том и только в том случае, если каждая переменная экземпляра принадлежит другому сильно связному компоненту графа импликации, чем отрицание той же переменной. Поскольку сильно связанные компоненты могут быть найдены в линейное время с помощью алгоритма, основанного на глубинном поиске, такая же линейная временная граница применима также к 2-выполнимости.

Я не буду притворяться, что понимаю большую часть этого абзаца, но может показаться, что существует алгоритм, который можно использовать для решения проблемы 2-SAT, и он описан в этом ссылочном документе ( Алгоритм линейного времени для тестирования истинность некоторых количественных логических формул). По-видимому, его можно купить онлайн примерно за 20 долларов США. Я не уверен, полезно это или нет, но это так!

обновление: бесплатный PDF того же документа можно найти здесь. Кредит идет к liori за находку.

Вся эта тема немного запуталась. Да, можно решить 2-сел за линейное время, но нет - вы не можете решить это для такого количества переменных. Время для решения 2-sat является линейным по отношению к числу значений, которое для 200 000 переменных может достигать (200000*199999)/2, и, более того, если вы используете это решение, вам потребуется примерно такой же объем памяти, Есть другое решение (не использовать сильно подключенные компоненты, которые работают медленнее, но не требуют много памяти).

Другие вопросы по тегам