Revizia anterioară Revizia următoare
Fişierul intrare/ieşire: | 2sat.in, 2sat.out | Sursă | Arhiva Educationala |
Autor | Arhiva Educationala | Adăugată de | |
Timp execuţie pe test | 0.425 sec | Limită de memorie | 65536 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
2SAT
Problema satisfiabilităţii, notată prescurtat cu SAT, cere determinarea existenţei unei atribuiri satisfiabile pentru o formulă booleană. O atribuire de valori booleene pentru variabilele acestei expresii se numeşte „atribuire satisfiabilă” dacă evaluarea expresiei după atribuirea valorilor are ca rezultat valoarea de adevăr „adevărat”. Următoarea formulă: , are o atribuire satisfiabilă dată de:
.
Utilizând următoarele echivalenţe logice: regula dublei negaţii, legile lui De Morgan şi legea distributivităţii, orice formulă booleană poate fi transformată în forma normal conjunctivă, o expresie scrisă ca o conjuncţie de propoziţii, iar fiecare propoziţie ca o disjuncţie de literali. Un exemplu de expresie în forma normal conjunctivă este: .
În consecinţă, va fi suficient să studiem doar forma normal conjunctivă. Problema SAT, pe cazul general, este NP-completă, chiar şi dacă restricţionăm expresiile la unele care în forma normal conjunctivă au doar trei literali în fiecare dintre propoziţii. Problema satisfiabilităţii pentru asemenea expresii se numeşte 3SAT.
În continuare ne vom ocupa de problema 2SAT ce are doi literali în fiecare din propoziţiile ce alcătuiesc forma normal conjunctivă, 2SAT fiind rezolvabilă în timp polinomial.
Cerinţă
Dându-se o expresie 2SAT să se determine o atribuire satisfiabilă a acesteia.
Date de intrare
Fişierul de intrare 2sat.in va conţine pe prima linie două numere naturale, N, numărul de termeni care apar în expresie, şi M, numărul de propoziţii disjunctive din care este formată expresia. Pe fiecare dintre urmatoarele M linii se vor afla câte două numere întregi, numerele de ordine ale termenilor prezenţi în fiecare dintre propoziţii. Semnul minus în faţa unui număr reprezintă negarea termenului în expresie.
Date de ieşire
În fişierul de ieşire 2sat.out se vor afişa N numere naturale, 0 sau 1, reprezentând o atribuire satisfiabilă pentru expresia dată în fişierul de intrare, sau valoarea -1 în caz că expresia nu admite soluţie.
Restricţii
- 1 ≤ N ≤ 100 000.
- 1 ≤ M ≤ 200 000.
Exemplu
2sat.in | 2sat.out |
---|---|
4 5 -1 -2 2 -3 2 3 -2 -4 3 4 | 0 1 1 0 |
Explicaţie
Datele de intrare corespund următoarei expresii: . O atribuire satisfiabilă este:
.
Indicaţii de rezolvare
Articolul Problema 2-satisfiabilităţii prezintă fiecare dintre soluţiile de mai jos în detaliu. Iată o schiţă...
O soluţie evidentă este încercarea celor 2N configuraţii posibile pentru termenii expresiei şi verificarea lor. Această abordare duce însă la o complexitate cu ordinul de excuţie O(2N * M). Cu această soluţie se obţin 20 de puncte.
O altă soluţie se conturează dacă fixăm o variabilă p dintr-o propoziţie. În cazul acesta suntem obligaţi să îi dăm o anumită valoare celeilalte variabile din acea propoziţie, q, ceea ce ne obligă să propagăm atribuiri de valori şi variabilelor care se găsesc în alte propoziţii care îl conţin pe q, şi aşa mai departe. Astfel, dacă problema admite soluţie vom ajunge la ea. Complexitatea finală este O(N * M). Acest algoritm obţine 70 de puncte.
O alta soluţie neliniară, în complexitatea O(N2 * M), se bazează pe un algoritm randomizat. Iniţial, se atribuie valori arbitrare variabilelor, după care, cât timp expresia nu este satisfăcută, se găseşte o propoziţie cu valoarea de adevăr 0 şi se schimbă valoarea unuia dintre cei doi termeni componenţi ai propoziţiei. Precizăm că această abordare se comportă foarte bine în practică, aşa că ar trebui să obţină circa 70 de puncte.
Soluţia optimă foloseşte relaţia de implicaţie pentru a transforma expresia într-un graf după cum urmează: orice disjuncţie de literali este echivalentă cu următoarele implicaţii
şi
. Vom construi un graf cu noduri din mulţimea
astfel: pentru orice propoziţie
va exista muchie de la
la
şi de la
la
, după cum arată relaţiile de implicaţie echivalente.
În continuare, vom demonstra o modalitate de a atribui valori nodurilor din graf, şi, astfel, implicit variabilelor pentru a rezolva 2SAT. Legătura dintre rezolvarea acestei probleme şi valorile nodurilor este o relaţie de echivalenţă, după cum se demonstrează...
Necesitatea
Dacă avem soluţie pentru expresia 2SAT, va trebui să demonstrăm că pentru toate muchiile din graf nu întâlnim situaţii în care avem muchie de la un nod „true” la un nod „false”. Dacă presupunem prin absurd că există o astfel de muchie, între un nod „true” (deci
„false”) şi
„false”, atunci muchia de la
la
există în graf dacă şi numai dacă în forma normal conjunctivă apare disjuncţia
. Însă,
este „false” dacă ambele valori sunt „false”. Contradicţie!
Suficienţa
Dacă fiecărei propoziţii îi corespund două muchii
şi
, atunci, cum nu putem avea
„true”,
„false” sau
„true”,
„false”, nu vom avea nici
şi
simultan egale cu „false”. Astfel, propoziţia
este adevărată.
În articolul de mai sus se arată cum se ajunge la soluţie. Iată pe scurt cum se procedează. În primul rând, graful va fi împărţit în componente tare-conexe. O proprietate importantă a acestor componente este că există un ciclu ce conţine toate vârfurile sale. Astfel, toate nodurile dintr-o componentă tare conexă vor avea, în mod necesar, aceeaşi valoare de adevăr. Dacă nu ar fi astfel, ar exista pe ciclu o valoare „true” ce ar implica o valoare „false”. Observăm că dacă un nod şi negaţia sa se găsesc în aceeaşi componentă tare conexă atunci nu există soluţie. Din câteva proprietăţi de simetrie, pe care le puteţi găsi în articol, se deduce că pentru o componentă în care se găseşte o implicaţie
, va exista o componentă
ce va conţine implicaţia echivalentă
. În continuare, vom contracta componentele tare-conexe într-un nod, rezultând un graf orientat aciclic. În acest graf, utilizând o sortare topologică vom împerechea succesiv nodurile după cum urmează. Se va alege un nod cu gradul de intrare zero. Din nodul său pereche, datorită simetriei de care aminteam, nu va ieşi nicio muchie. Astfel, toate valorile din componenta tare conexă asociată nodului cu gradul de intrare zero vor avea valoarea de adevăr „false”, pentru a nu impune restricţii asupra celorlalte variabile, iar toate nodurile din componenta pereche vor primi valoarea de adevăr „true”, întrucât din aceasta nu mai iese nicio muchie şi astfel nu va influenţa valorile altor variabile. Ulterior, se vor elimina cele două noduri şi se va relua procedeul.
Soluţia de 100 de puncte are complexitatea O(M + N).
Aplicaţii
- Party
- Aladdin
- Excursion - Baltic Olympiad in Informatics, 2001
- Peaceful Commission - Polish Olympiad in Informatics, 2001
- Gates - Baltic Olympiad in Informatics, 2008
- Perfect Election, SEERC 2008