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 [2023/12/15 15:26]
dmihai
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).
  
-<​note>​ +Putem însă aborda o definiție mai relaxată de echilibrupentru 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$). 
-Soluțiile acestui laborator se găsesc [[https://ocw.cs.pub.ro/​ppcarte/​doku.php?​id=aa:lab:sol:8|aici]] + 
-</​note>​+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}$.