Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
|
aa:lab:9 [2021/12/08 17:14] dmihai created |
aa:lab:9 [2025/12/12 14:00] (current) cezar.zlatea [Exerciții] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== P, NP, NPC, NPH ====== | + | ====== Arbori echilibrați ====== |
| - | 1. Reluaț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 și 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ă. | ||
| - | 2. Arătați că dacă $P = NP$, atunci $P = NPC \cup {f_1, f_0}$, unde $f_1$ și $f_0$ sunt funcțiile constante: $f_1(n) = 1$ și $f_0(n) = 0$. | + | 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: | ||
| - | 3. Discutaț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$ ș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}$. | ||
| - | - 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$ | ||