Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
aa:lab:9 [2024/12/03 20:45]
lfa
aa:lab:9 [2025/12/12 14:00] (current)
cezar.zlatea [Exerciții]
Line 1: Line 1:
-====== ​P, NP, NPC, NPH ======+====== ​Arbori echilibrați ​======
  
-1Reluați reducerile polinomiale neabordate ​din [[aa:​lab:​8|laboratorul anterior]].+Pentru ca operațiile pe arbori de căutare să fie eficiente, este nevoie ca aceștia să fie **echilibrați**;​ i.e. să nu poată existe diferențe arbitrare între numărul de noduri dintre subarboriele stâng șsubarborele drept. 
 +În cel mai rău caz, fiecare nod din arbore are un singur copil, ceea ce face arborele să fie de fapt o listă simplu înlănțuită.
  
-2Discutațurmătoarele ​propoziții+Prima idee de echilibrare analizată la curs este cea de a păstra arborele **semi-complet**. 
 +Un arbore semi-complet de înălțime $ h$ respectă ​următoarele ​proprietăți:
  
-  ​- dacă $ f \le_p gși $ g \le_p h$, atunci $ f \le_p h$ +  ​* la fiecare nivel $ i$ cu $\le i \le h 1(i.e. "în afară de ultimul) se sesc 2^i$ noduri. 
-  - dacă $ f \in NP$ ș$ g \le_p f$, atunci $ g \in NP$ +  ​* toate nodurile de pe nivelul ​hsunt aliniate la stânga
-  ​dacă $ f \in Pș$ g \le_p f$, atunci $ g \in NP$ +
-  - dacă $ f \in NPC$ și $ \le_p f$, atunci $ g \in NPC$ +
-  - dacă $ f \in NPH$ și $ g \le_p f$, atunci $ g \in NPC$ +
-  ​- dacă f \in NPC$ și $ f \le_p g$, atunci $ g \in NPC$ +
-  - dacă $ f \in NPC$ și $ f \le_p g$, atunci $ g \in NPH$ +
-  - dacă $ f \in NP$ și $ f \le_p g$, atunci $ g \in NPC$ +
-  - dacă $ f \in NP$ și $ f \le_p g$, atunci $ g \in NPH$ +
-  - dacă $ f \le_p SAT$, atunci $ f \in NPC$ +
-  - dacă $ SAT \le_p f$, atunci $ f \in NPC$+
  
 +O astfel de condiție este perfectă pentru căutări eficiente în $ \Theta(\log n)$.
 +Însă dacă folosim operații de inserare, trebuie să ne asigurăm că proprietatea este păstrată, iar reorganizarea acestui tip de arbore necesită $ O(n)$ operații (în cel mai rău caz, duce la reconstruirea arborelui).
 +
 +Putem însă aborda o definiție mai relaxată de echilibru: pentru fiecare nod din arbore cu copii $ l$ și $ r$, trebuie să țină condiția: $ \mid \mathrm{height(l)} - \mathrm{height}(r) \mid \le 1$ (dacă un nod nu are un anumit copil, îl putem considera $ \mathrm{Void}$ și $ \mathrm{height}(\mathrm{Void}) = 0$).
 +
 +Astfel, pentru reechilibrare,​ putem folosi rotații (stânga, dreapta, stânga-dreapta și dreapta-stânga) care reechilibrează arborele în timp constant.
 +
 +
 +==== Exerciții ====
 +
 +1. Scrieți axiomele pentru următorii operatori: ​
 +
 +  * $ \mathrm{height} : \mathrm{BTree} \to \mathrm{Int}$
 +  * $ \mathrm{depth} : \mathrm{E} \times \mathrm{BTree} \to (\mathrm{N} \cup \{ \mathrm{ABSENT} \})$
 +  * $ \mathrm{flatten} : \mathrm{BTree} \to \mathrm{List}$
 +
 +Conceptul de adâncime (depth) reprezintă distanța de la un nod până la rădăcină într-un arbore de căutare (de obicei măsurată în **muchii**, nu noduri; i.e. adâncimea rădăcinii 0).
 +Avem nevoie să extindem codomeniul cu o valoare specială care să indice faptul că valoarea respectivă nu este prezentă în arborele de căutare.
 +
 +
 +2. Demonstrați că operația de $ \mathrm{rotate-right}$ prezentată la curs păstrează proprietatea $ \mathrm{isBinary}$.
 +
 +\(
 +\mathrm{rotate\text{-}right}(\mathrm{Node}(x,​ \mathrm{Node}(y,​ t1, t2), t3)) = \mathrm{Node}(y,​ t1, \mathrm{Node}(x,​ t2,t3))
 +\)
 +
 +
 +3. Calculați complexitatea operației $ \mathrm{balanced\_ins}$ studiată la curs.
 +
 +4. Care este cel mai eficient mod de a construi un arbore binar de căutare dintr-o listă.
 +
 +5. Definiți axiome pentru operațiile $ \mathrm{rotate\text{-}left}$ și $ \mathrm{rotate\text{-}right\text{-}left}$.
  
-<​note>​ 
-Soluțiile acestui laborator se găsesc [[https://​ocw.cs.pub.ro/​ppcarte/​doku.php?​id=aa:​lab:​sol:​8|aici]] 
-</​note>​