Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
aa:lab:sol:6 [2023/11/17 19:43] vlad.juja |
aa:lab:sol:6 [2023/12/11 16:41] (current) vlad.juja |
||
---|---|---|---|
Line 7: | Line 7: | ||
=== 1. K Vertex Cover === | === 1. K Vertex Cover === | ||
- | Soluția greedy pentru problema K Vertex Cover ar fi să alegem în mod repetat un nod care acoperă cea mai mare număr de muchii neacoperite. În fiecare pas, adăugăm nodul respectiv în setul nostru și eliminăm toate muchiile care sunt acoperite de acest nod. Repetăm acest proces până când avem un set de K noduri sau până când toate muchiile sunt acoperite. \\ | + | Soluția greedy pentru problema K Vertex Cover ar fi să alegem în mod repetat un nod care acoperă cel mai mare număr de muchii neacoperite. În fiecare pas, adăugăm nodul respectiv în setul nostru și eliminăm toate muchiile care sunt acoperite de acest nod. Repetăm acest proces până când avem un set de K noduri sau până când toate muchiile sunt acoperite. \\ |
{{:aa:lab:sol:k_vertex_cover_counter_ex.jpg?nolink&300|}} | {{:aa:lab:sol:k_vertex_cover_counter_ex.jpg?nolink&300|}} | ||
Line 46: | Line 46: | ||
\\ | \\ | ||
- | Contraexemlu: | + | Contraexemplu: |
{{:aa:lab:sol:k_coloring_counter_ex.png?nolink&300|}} | {{:aa:lab:sol:k_coloring_counter_ex.png?nolink&300|}} | ||
- | Acest contraexemplu poate fi acoperit dacă folosim o optimizare, și anume să asignăm culori nodurilor în ordinea dată de gradul lor, adică alegem mereu să asignăm culoare nodului de grad maxim. \\ | + | Acest contraexemplu poate fi acoperit dacă folosim o optimizare, și anume să asignăm culori nodurilor în ordinea dată de gradul lor, adică alegem mereu să asignăm culoare nodului de grad maxim. Dacă vom avea 2 noduri cu același grad, vom alege mai întâi nodul cu indexul mai mic. Intuitiv, optimizările nu fac altceva decât să mărească plaja de input-uri pentru care se obține un răspuns optim, dar, întotdeauna se vor găsi input-rui pentru care nu functionează. Spre exemplu, optimizarea propusă e bătută de următorul graf: |
+ | |||
+ | {{:aa:lab:sol:k_coloring_counter_ex_2_updated.png?nolink&300|}} | ||
\\ | \\ | ||
- | === 1. Hamilton Path + TSP === | + | |
+ | === 4. Hamilton Path + TSP === | ||
Pentru TSP, vom alege pe rând fiecare latura de cost minim și o luăm în considerare dacă adăugând-o la drumul format până acum, aceasta nu creează un ciclu sau un nod de grad $ 3$. Pentru Hamilton Path, pur și simplu nu vom mai ține cont de cost, luăm muchiile într-o ordine oarecare. | Pentru TSP, vom alege pe rând fiecare latura de cost minim și o luăm în considerare dacă adăugând-o la drumul format până acum, aceasta nu creează un ciclu sau un nod de grad $ 3$. Pentru Hamilton Path, pur și simplu nu vom mai ține cont de cost, luăm muchiile într-o ordine oarecare. | ||
+ | |||
+ | Contraexemplu: | ||
+ | |||
+ | {{:aa:lab:sol:tsp_counter_ex.png?nolink&300|}} | ||
+ | |||
+ | În exemplul de față algoritmul de mai sus va genera calea $ A → B → C → D → E → F$ ce va avea costul total $ 29$, chiar dacă $ C → A → B → E → F → D$ are costul $ 28$. \\ | ||
+ | \\ | ||
+ | |||
+ | |||
+ | === 5. K Cut === | ||
+ | ??? \\ | ||
+ | \\ | ||
+ | |||
+ | |||
+ | === 6. SAT === | ||
+ | Există $ 2^{N}$ candidați pentru soluție, unde $ N = Numărul-de-variabile$. | ||
+ | |||
+ | Complexitatea generării tuturor candidaților va fi $ Θ(2^n)$. | ||
+ | |||
+ | Verificarea validității unui candidat: | ||
+ | |||
+ | <code> | ||
+ | function Check_Candidate(T) { | ||
+ | înlocuiește fiecare literal al expresiei booleene cu T(literal) | ||
+ | while (expresia nu e de forma „True” sau „False”) { | ||
+ | găsește toate subexpresiile ce operează doar cu literali, evaluează-le și înlocuiește-le cu valoarea obținută | ||
+ | } | ||
+ | return valoarea la care s-a evaluat expresia | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Înlocuirea variabilelor cu valoarea lor de adevăr poate fi realizată într-un timp liniar în funcție de $ |ϕ|$; bucla while găsește expresii precum $ TRUE, FALSE ∧ TRUE$ și le rezolvă (bazat pe logica tabelelor de adevăr), înlocuindu-le cu o constantă booleană. La fiecare pas, dimensiunea expresiei rămase scade, astfel încât algoritmul va realiza un număr de $ O(|ϕ|)$ iterații. \\ | ||
+ | \\ | ||
+ | |||
+ | |||
+ | === 7. CNF SAT === | ||
+ | Pentru că este doar o variantă mai restrictivă a problemei SAT soluția de mai sus ar funcționa și pentru aceasta. | ||
+ | Cu toate acestea, se crede că nici CNF SAT nu are o soluție polinomială. \\ | ||
+ | \\ | ||
+ | |||
+ | |||
+ | === 8. 3SAT === | ||
+ | Putem arăta formal că 3SAT este "la fel de dificilă" ca SAT. Acest lucru implică că, dacă, așa cum se crede în mod larg, nu există o soluție polinomială pentru SAT, atunci nu există nici o soluție polinomială pentru 3SAT. | ||
+ | |||
+ | Cu toate acestea, restrângerea problemei chiar mai mult ne aduce în sfera certitudinii polinomiale: problema similară 2SAT a fost dovedită a fi în P! \\ | ||
+ | \\ | ||
+ | |||
+ | === 9. 10. 11. 12. === | ||
+ | <note> | ||
+ | Soluția se găsește la link-ul: https://gitlab.cs.pub.ro/aa-cb-internal | ||
+ | </note> | ||