Я хочу реализовать задачу 2-SAT для 100000 литералов. Итак, будет 200000 вершин. Итак, я застрял в том, чтобы иметь массив всех достижимых вершин из каждой вершины, пространственная сложность O(200000^2)
, что невозможно. Поэтому, пожалуйста, предложите решение для этого. И, пожалуйста, пролейте свет на эффективную реализацию задачи 2-SAT.
2 ответа
Из wikipedia:
... 2-выполнимость может быть решена за полиномиальное время. В качестве Aspvall, Plass & Tarjan (1979) заметил, что случай 2-выполнимости разрешим тогда и только тогда, когда каждая переменная этого экземпляра принадлежит разному сильно связанному компоненту графа импликации чем отрицание той же переменной. Поскольку сильно связанные компоненты могут быть найдены за линейное время с помощью алгоритма, основанного на поиске в глубину, такая же линейная временная граница применима и к 2-выполнимости.
Я не буду делать вид, что понимаю большую часть этого абзаца, но похоже, что существует алгоритм, который можно использовать для решения проблемы 2-SAT, и он описан в упомянутом документе (< em> Линейный алгоритм проверки истинности определенных количественных логических формул ). Очевидно, его можно купить в Интернете примерно за 20 долларов США. Не уверен, что это полезно или нет, но вот оно!
обновление: бесплатный PDF-файл того же документа можно найти здесь. Благодарим за находку liori.
Вся эта цепочка немного запуталась. Да, можно решить 2-сат за линейное время, но нет - вы не можете решить это для такого количества переменных. Время решения 2-сат. Линейно по отношению к количеству импликаций, которое для 200000 переменных может достигать (200000 * 199999) / 2, и, кроме того, если вы используете это решение, вам понадобится примерно такой же объем памяти . Есть другое решение (без использования прочно связанных компонентов, которое работает медленнее, но не требует такого большого объема памяти).
Похожие вопросы
Новые вопросы
data-structures
Структура данных - это способ организации данных таким образом, который позволяет эффективно запрашивать и / или обновлять конкретные свойства этих данных.