Nu aveti permisiuni pentru a descarca fisierul grader_test12.ok
Diferente pentru problema/2sat intre reviziile #62 si #44
Nu exista diferente intre titluri.
Diferente intre continut:
== include(page="template/taskheader" task_id="2sat") ==
Problema satisfiabilităţii, notată prescurtat cu 'SAT':http://en.wikipedia.org/wiki/Boolean_satisfiability_problem#Basic_definitions.2C_terminology_and_applications,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ă: <tex> ((x_{1} \rightarrow x_{2}) \vee ((\bar{x_{1}} \leftrightarrow x_{3}) \wedge x_{4})) \wedge \bar{x_{2}} </tex>, are o atribuire satisfiabilă dată de: <tex> \langle x_{1} = 0, x_{2} = 0, x_{3} = 1, x_{4} = 1 \rangle </tex>.
Problema satisfiabilităţii, notată prescurtat cu '$SAT$':http://en.wikipedia.org/wiki/Boolean_satisfiability_problem#Basic_definitions.2C_terminology_and_applications 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$.
Utilizând următoarele 'echivalenţelogice':http://en.wikipedia.org/wiki/Logical_equivalence:'regula dublei negaţii':http://en.wikipedia.org/wiki/Double_negative_elimination,'legileluiDeMorgan':http://en.wikipedia.org/wiki/De_Morgan%27s_lawsşi'legeadistributivităţii':http://en.wikipedia.org/wiki/Distributivity, orice formulăbooleanăpoatefitransformată în 'forma normal conjunctivă':http://en.wikipedia.org/wiki/Conjunctive_normal_form,o expresiescrisăca o conjuncţiedepropoziţii,iarfiecarepropoziţiecao disjuncţie de literali. Un exemplude expresie înformanormalconjunctivă este: <tex>(x_{1}\veex_{3})\wedge(x_{2}\vee\bar{x_{1}})\wedge(\bar{x_{4}}\veex{3})</tex>.
Următoarea formulă: <tex> \phi = ((x_{1} \rightarrow x_{2}) \vee \sim((\sim x_{1} \leftrightarrow x_{3}) \vee x_{4})) \wedge \sim x_{2} </tex>, are o atribuire satisfiabilă dată de: <tex> \langle x_{1} = 0, x_{2} = 0, x_{3} = 1, x_{4} = 1 \rangle </tex>.
În consecinţă, va fi suficientsă studiem doarforma normal conjunctivă.ProblemaSAT, pe cazul general, este 'NP-completă':http://en.wikipedia.org/wiki/NP-complete,chiarşi dacă restricţionăm expresiile launele care înformanormal conjunctivăau doar trei literaliînfiecaredintre propoziţii. Problema satisfiabilităţii pentruasemenea expresii se numeşte '3SAT':http://en.wikipedia.org/wiki/Boolean_satisfiability_problem#3-satisfiability.
Orice formulă booleană poate fi transformată în două forme:
Încontinuarene vomocupade problema '2SAT':http://en.wikipedia.org/wiki/2-satisfiabilitycearedoiliteraliînfiecaredinpropoziţiilecealcătuiescformanormal conjunctivă,2SAT fiindrezolvabilăîn 'timp polinomial':http://en.wikipedia.org/wiki/Polynomial_time#Polynomial_time.
* în '$forma normal conjunctivă$':http://en.wikipedia.org/wiki/Conjunctive_normal_form expresia este scrisă ca o _conjuncţie_ de propoziţii, iar fiecare propoziţie este o _disjuncţie_ de literali;
h3.Cerinţă
* în '$forma normal disjunctivă$':http://en.wikipedia.org/wiki/Disjunctive_normal_form expresia este scrisă ca o _disjuncţie_ de propoziţii în interiorul cărora există doar _conjuncţii_ de literali;
Dându-se o expresie 2SAT să se determine o atribuire satisfiabilă a acesteia.
În rezolvarea acestei probleme ne interesează doar forma normal conjunctivă. Problema $SAT$ pe cazul general este '$NP-completă$':http://en.wikipedia.org/wiki/NP-complete, 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$':http://en.wikipedia.org/wiki/Boolean_satisfiability_problem#3-satisfiability. În continuare ne vom ocupa de problema '$2SAT$':http://en.wikipedia.org/wiki/2-satisfiability, ce are _doi_ literali în fiecare din propoziţiile ce alcătuiesc forma normal conjunctivă, $2SAT$ fiind rezolvabilă în timp polinomial. Un exemplu de o astfel de expresie: <tex> (x_{1} \vee x_{3}) \wedge (x_{2} \vee (\sim x_{1})) \wedge ((\sim x_{4}) \vee x{3}) </tex>. h2. Cerinţă Dându-se o expresie $2SAT$ să se determine o atribuire satisfiabilă a acesteia.
h2. 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. Semnulminusîn faţa unui număr reprezintă negarea termenului în expresie.
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 $-$ în faţa unui număr reprezintă negarea termenului în expresie.
h2. Date de ieşire
table(example). |_. 2sat.in |_. 2sat.out | | 4 5
-1 -22-323-2-434 |0110
1 -2 -1 -3 1 2 4 -3 4 -1 | 1 0 0 1
|
h3. Explicaţie Datele de intrare corespund următoarei expresii: <tex> (\bar{x_{1}} \vee \bar{x_{2}}) \wedge (x_{2} \vee \bar{x_{3}}) \wedge (x_{2} \vee x_{3}) \wedge (\bar{x_{2}} \vee \bar{x_{4}}) \wedge (x_{3} \vee x_{4}) </tex>. O atribuire satisfiabilă este: <tex> \langle x_{1} = 0, x_{2} = 1, x_{3} = 1, x_{4} = 0 \rangle </tex>. h2. Indicaţii de rezolvare Articolul 'Problema 2-satisfiabilităţii':http://infoarena.ro/2-sat prezintă fiecare dintre soluţiile de mai jos în detaliu. Iată o schiţă... O soluţie evidentă este încercarea celor $2^N^$ configuraţii posibile pentru termenii expresiei şi verificarea lor. Această abordare duce însă la o complexitate cu ordinul de excuţie $O(2^N^ * M)$. Cu această soluţie se obţin '$20$ de puncte':job_detail/382683?action=view-source. 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':job_detail/382685?action=view-source. O alta soluţie neliniară, în complexitatea $O(N^2^ * 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':job_detail/382684?action=view-source.
h2. Explicaţie
Soluţia optimăfoloseşte 'relaţiade implicaţie':http://en.wikipedia.org/wiki/Logical_implication pentru atransforma expresia într-ungraf după cum urmează: orice disjuncţiede literali <tex> x_{i} \vee x_{j} </tex> este echivalentăcu următoareleimplicaţii <tex> \bar{x_{i}} \to x_{j} </tex> şi<tex>\bar{x_{j}} \to x_{i} </tex>. Vom construiun graf cu noduri din mulţimea <tex> \{x_{1}, x_{2}, .., x_{n}, \bar{x_{1}}, \bar{x_{2}}, .., \bar{x_{n}}\} </tex> astfel:pentru oricepropoziţie <tex>x_{i} \veex_{j} </tex> va exista muchie dela<tex> \bar{x_{i}} </tex> la<tex> x_{j} </tex> şi de la <tex> \bar{x_{j}} </tex> la <tex> x_{i} </tex>, după cum arată relaţiiledeimplicaţieechivalente.
_(Cum s-a ajuns la soluţie, cum au fost mapaţi termenii cu numerele întregi [să zicem că reprezintă indexul variabilei $x$?])_.
Încontinuare, vomdemonstra o modalitate de a atribui valori nodurilor din graf, şi, astfel, implicit variabilelorpentruarezolva2SAT. Legătura dintrerezolvarea acestei probleme şi valorile nodurilor este o relaţie de echivalenţă, după cum se demonstrează...
h3. Indicaţii pentru rezolvare
_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 <tex> \bar{x_{i}} </tex> „true” (deci <tex> x_{i} </tex> „false”) şi <tex> x_{j} </tex> „false”, atunci muchia de la <tex> \bar{x_{i}} </tex> la <tex> x_{j} </tex> există în graf dacă şi numai dacă în forma normal conjunctivă apare disjuncţia <tex> x_{i} \vee x_{j} </tex>. Însă, <tex> x_{i} \vee x_{j} </tex> este „false” dacă ambele valori sunt „false”. Contradicţie!
Pentru detalii în legatură cu soluţiile consultaţi 'Problema 2-satisfiabilităţii':/2-sat.
_Suficienţa_ Dacă fiecărei propoziţii <tex> x_{i} \vee x_{j} </tex> îi corespund două muchii <tex> \bar{x_{i}} \to x_{j} </tex> şi <tex> \bar{x_{j}} \to x_{i} </tex>, atunci, cum nu putem avea <tex> \bar{x_{i}} </tex> „true”, <tex> x_{j} </tex> „false” sau <tex> \bar{x_{j}} </tex> „true”, <tex> x_{i} </tex> „false”, nu vom avea nici <tex> x_{i} </tex> şi <tex> x_{j} </tex> simultan egale cu „false”. Astfel, propoziţia <tex> x_{i} \vee x_{j} </tex> este adevărată.
O soluţie evidentă este încercarea celor $2^N^$ configuraţii posibile pentru termenii expresiei şi verificarea lor. Această abordare duce însă la o complexitate de $O(2^N^ * M)$. Cu această complexitate se obţin $20$ de puncte, iar o sursă demonstrativă se găseşte 'aici':/job_detail/372167?action=view-source.
Înarticolul de mai sus se aratăcumse ajunge la soluţie. Iată pe scurt cum se procedează. În primulrând, graful va fi împărţit în 'componente tare-conexe':problema/ctc. O proprietate importantă acomponentelorconexe estecăîn fiecarecomponentăexistăun ciclu ce conţinetoatevârfurile sale. Astfel, toate noduriledintr-ocomponentă tare conexă vor avea, în mod necesar, aceeaşivaloarede adevăr.Dacănuar fi astfel,arexistape cicluo valoare „true” ce ar implicaovaloare „false”. Observăm că dacă un nod şinegaţiasa se găsescîn aceeaşicomponentătare conexăatunci nuexistăsoluţie. Din câtevaproprietăţidesimetrie, pe carele puteţigăsi înarticol, se deduce că pentruocomponentă <tex> c </tex> în carese găseşteoimplicaţie<tex> x_{i} \rightarrow x_{j} </tex>,vaexista ocomponentă <tex> \bar{c}</tex>ceva conţineimplicaţia echivalentă <tex> \bar{x_{j}} \rightarrow \bar{x_{i}}</tex>.În continuare, vom contracta componentele tare-conexe într-un nod, rezultând ungraforientataciclic. Pringradul uneicomponente tare-conexevom înţelege gradulnoduluiasociatdinacest graf orientat aciclic. Utilizândo'sortaretopologică':problema/sortaretvom împerecheasuccesivcomponenteledupăcum urmează. Se va alegeocomponentăcu gradul de intrarezero.Dincomponentasapereche,datorităsimetrieidecare aminteam, nu va ieşi nicio muchie. Astfel,toatenoduriledin componentatare-conexă cu gradul deintrarezerovor aveavaloareadeadevăr„false”, pentruanu impunerestricţiiasupracelorlaltenoduri, iartoatenodurile din componentapereche vor primi valoarea de adevăr„true”, întrucât dinaceastanumaiiese nicio muchieşi astfelnu vainfluenţa alte valori. Ulterior,se vor elimina celedouănoduri şi seva reluaprocedeul.
'O altă soluţie':/job_detail/372174?action=view-source 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ă fiind $O(N * M)$. Acest algoritm obţine $70$ de puncte.
Aseprecizacaingeneralsortareatopologicanumaitrebuieimplementata.Algoritmullui Tarjanadauga componenteleinordineainversaasortariitopologice,iar algoritmulluiKosarajufieexactsortarea topologica, fieinveraei(depindedacase inverseazasaunuordineacelordoua parcurgeri). Prininversaaseintelegecaprima componenta eultima,adouapenultimas.a.m.d.
'O alta soluţie neliniară':/job_detail/372176?action=view-source, în complexitatea $O(N^2^ * 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ă aproximativ $70$ de puncte.
Soluţiade '100 depuncte':job_detail/382602?action=view-sourcearecomplexitatea $O(M + N)$.
'Soluţia optimă':/job_detail/372206?action=view-source, în complexitatea $O(M + N)$, se foloseşte de 'relaţia de implicaţie':http://en.wikipedia.org/wiki/Logical_implication ce transformă expresia într-un graf, care se poate rezolva determinând 'componentele tare-conexe':/problema/ctc.
h2. Aplicaţii
h3. Aplicatii
* 'Party':problema/party * 'Aladdin':problema/aladdin
* 'Party':/problema/party * 'Aladdin':/problema/aladdin
* 'Excursion':http://www.oi.edu.pl/download/boi-2001.pdf - Baltic Olympiad in Informatics, 2001 * 'Peaceful Commission':http://www.oi.edu.pl/php/show.php?ac=e100000&module=show&file=zadania/oi8/spokojna - Polish Olympiad in Informatics, 2001 * 'Gates':http://b08.oi.edu.pl/downloads/booklet.pdf - Baltic Olympiad in Informatics, 2008
Nu exista diferente intre securitate.
Diferente intre topic forum:
4436