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/09/21 21:32]
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ă.
  
-2Arătați că dacă $ P = NP$, atunci $ P = NPC \cup \{f_{TRUE}, f_{FALSE}\}$,​ unde $ f_{TRUE}$ ș$ f_{FALSE}$ sunt funcțiile constante$ f_{TRUE}(n) = TRUE$ și $ f_{FALSE}(n) = FALSE$.+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:
  
-3Discutați următoarele propoziții: +  * la fiecare nivel $ i$ cu $1 \le i \le h - 1$ (i.e. "în afară de ultimul) se găsesc $ 2^i$ noduri. 
 +  * toate nodurile de pe nivelul $ h$ sunt aliniate la stânga 
 + 
 +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$ ș$ 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}$.
  
-  - dacă $ f \in NP$ și $ g \le_p f$, atunci $ g \in NP$ 
-  - dacă $ f \in P$ și $ g \le_p f$, atunci $ g \in NP$ 
-  - dacă $ f \in NPC$ și $ g \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$ 
-  - dacă $ f \le_p g$ și $ g \le_p h$, atunci $ f \le_p h$