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

3
avd 3 Ноя 2009 в 06:59

2 ответа

Лучший ответ

Из wikipedia:

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

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

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

5
Community 23 Май 2017 в 15:16
Есть ли бесплатная ссылка на статью? Пожалуйста.
 – 
avd
3 Ноя 2009 в 07:35
Большое тебе спасибо. Кстати, как искать? Я потратил 1 час на поиски, но никак не мог.
 – 
avd
3 Ноя 2009 в 07:56
«Я не буду претендовать на большую часть этого абзаца» <- я думаю, вы где-то там глагол.
 – 
bdonlan
3 Ноя 2009 в 07:59
@bdonlan: Отлично сыграно, сэр. :)
 – 
e.James
3 Ноя 2009 в 08:47

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

1
izomorphius 12 Апр 2010 в 18:01