Алгоритм для проблемы С 2 выполнимостью

Да, для хранения их опыта кодирования.

19
задан avd 2 November 2009 в 19:16
поделиться

3 ответа

Решить можно жадным подходом. Или используя теорию графов, вот ссылка, которая объясняет решение с использованием теории графов. http://www.cs.tau.ac.il/~safra/Complexity/2SAT.ppt

7
ответ дан 30 November 2019 в 02:16
поделиться

Если у вас есть n переменных и m предложений:

Создайте граф с 2n вершинами: интуитивно каждая вершина напоминает истинный или ложный литерал для каждой переменной. Для каждого предложения (avb), где a и b - литералы, создайте ребро от! A до b и от! B до a. Эти ребра означают, что если a не истинно, то b должно быть истинным, и наоборот.

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

44
ответ дан 30 November 2019 в 02:16
поделиться

Вот страница Википедии по этой теме, которая описывает алгоритм полиномиального времени. (Алгоритм грубой силы, заключающийся в простой попытке всех различных назначений истинности - это экспоненциальное время.) Может быть, поможет небольшое дополнительное объяснение.

Выражение «если P, то Q» ложно только тогда, когда P истинно, а Q ложно. Таким образом, выражение имеет те же значения таблицы истинности, что и «Q or not P». Это также эквивалентно его противоположному выражению «если не Q, то не P», а это, в свою очередь, эквивалентно «не P или Q» (так же, как и другое).

Таким образом, алгоритм включает замену каждого выражения форма «A или B» с двумя выражениями: «если не A, то B» и «если не B, то A». (Другими словами, A и B не могут быть ложными одновременно.)

Далее, построить граф, представляющий эти последствия. Создайте узлы для каждого «А» и «не А» и добавьте ссылки для каждого из следствий, полученных выше.

Последний шаг - убедиться, что ни одна из переменных не эквивалентна своему собственному отрицанию. То есть для каждой переменной A (или не A) следуйте по ссылкам, чтобы обнаружить все узлы, которые могут быть достигнуты от нее, заботясь об обнаружении петель.

Если одна из переменных, A, может достичь "not A" ", и" not A "также может достигать A, тогда исходное выражение не выполняется. (Это парадокс.) Если ни одна из переменных этого не делает, тогда это выполнимо.

(Это нормально, если A подразумевает «не A», но не наоборот. Это просто означает, что A должно быть инвертировано на удовлетворяют выражению.)

Создайте узлы для каждого «А» и «не А» и добавьте ссылки для каждого из следствий, полученных выше.

Последний шаг - убедиться, что ни одна из переменных не эквивалентна своему собственному отрицанию. То есть для каждой переменной A (или не A) следуйте по ссылкам, чтобы обнаружить все узлы, которые могут быть достигнуты от нее, заботясь об обнаружении петель.

Если одна из переменных, A, может достичь "not A" ", и" not A "также может достигать A, тогда исходное выражение не выполняется. (Это парадокс.) Если ни одна из переменных не делает этого, тогда это выполнимо.

(Это нормально, если A подразумевает «не A», но не наоборот. Это просто означает, что A должно быть инвертировано на удовлетворяют выражению.)

Создайте узлы для каждого «А» и «не А» и добавьте ссылки для каждого из следствий, полученных выше.

Последний шаг - убедиться, что ни одна из переменных не эквивалентна своему собственному отрицанию. То есть для каждой переменной A (или не A) следуйте по ссылкам, чтобы обнаружить все узлы, которые могут быть достигнуты от нее, заботясь об обнаружении петель.

Если одна из переменных, A, может достичь "not A" ", и" не A "также могут достигать A, тогда исходное выражение не выполняется. (Это парадокс.) Если ни одна из переменных этого не делает, тогда это выполнимо.

(Это нормально, если A подразумевает «не A», но не наоборот. Это просто означает, что A должно быть инвертировано на удовлетворяют выражению.)

Последний шаг - убедиться, что ни одна из переменных не эквивалентна своему собственному отрицанию. То есть для каждой переменной A (или не A) следуйте по ссылкам, чтобы обнаружить все узлы, которые могут быть достигнуты от нее, заботясь об обнаружении петель.

Если одна из переменных, A, может достичь "not A" ", и" не A "также могут достигать A, тогда исходное выражение не выполняется. (Это парадокс.) Если ни одна из переменных не делает этого, тогда это выполнимо.

(Это нормально, если A подразумевает «не A», но не наоборот. Это просто означает, что A должно быть инвертировано на удовлетворяют выражению.)

Последний шаг - убедиться, что ни одна из переменных не эквивалентна своему собственному отрицанию. То есть для каждой переменной A (или не A) следуйте по ссылкам, чтобы обнаружить все узлы, которые могут быть достигнуты от нее, заботясь об обнаружении петель.

Если одна из переменных, A, может достичь "not A" ", и" not A "также может достигать A, тогда исходное выражение не выполняется. (Это парадокс.) Если ни одна из переменных этого не делает, тогда это выполнимо.

(Это нормально, если A подразумевает «не A», но не наоборот. Это просто означает, что A должно быть инвертировано на удовлетворяют выражению.)

Если одна из переменных, A, может достигать «не A», и «не A» также может достигать A, то исходное выражение не может быть выполнено. (Это парадокс.) Если ни одна из переменных не делает этого, тогда это выполнимо.

(Это нормально, если A подразумевает «не A», но не наоборот. Это просто означает, что A должно быть инвертировано на удовлетворяют выражению.)

Если одна из переменных, A, может достигать «не A», и «не A» также может достигать A, то исходное выражение неприменимо. (Это парадокс.) Если ни одна из переменных этого не делает, тогда это выполнимо.

(Это нормально, если A подразумевает «не A», но не наоборот. Это просто означает, что A должно быть инвертировано на удовлетворяют выражению.)

8
ответ дан 30 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: