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/10 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 $ \le_p h$, atunci ​f \le_p h+  ​* la fiecare nivel $ i$ cu $1 \le i \le - 1(i.e. "în afară de ultimul) se găsesc ​2^inoduri. 
-  ​- dacă f \in NPși \le_p f$, atunci ​g \in NP+  ​* toate nodurile de pe nivelul ​hsunt aliniate la stânga 
-  - dacă $ f \in P$ și $ g \le_p f$, atunci ​\in NP$ + 
-  - dacă $ \in NPC$ și $ \le_p f$, atunci $ g \in NPC+O astfel de condiție este perfectă pentru căutări eficiente în $ \Theta(\log n)$
-  dacă $ f \in NPH$ și $ \le_p f$, atunci $ g \in NPC+Însă dacă folosim operații de inseraretrebuie 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). 
-  ​- dacă \in NPC$ și $ f \le_p g$, atunci $ g \in NPC+ 
-  ​- dacă \in NPC$ și $ f \le_p g$, atunci $ g \in NPH+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$). 
-  dacă $ f \in NP$ și $ \le_p g$, atunci ​\in NPC+ 
-  dacă $ f \in NP$ și $ f \le_p g$atunci $ g \in NPH$ +Astfel, pentru reechilibrare,​ putem folosi rotații (stânga, dreapta, stânga-dreapta ​și dreapta-stânga) care reechilibrează arborele în timp constant. 
-  - dacă $ f \le_p SAT$, atunci $ f \in NPC+ 
-  dacă $ SAT \le_p f$, atunci ​\in NPC$+ 
 +==== 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,​ t1t2), 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}$.