This is an old revision of the document!


Exerciții

1.

\( \mathrm{height}(\mathrm{Nil}) = 0 \\ \mathrm{height}(\mathrm{Node(x, l, r)}) = 1 + \mathrm{max}(\mathrm{height}(l), \mathrm{height}(r)) \)


\( \mathrm{depth}(y, \mathrm{Nil}) = \mathrm{ABSENT} \\ \mathrm{depth}(y, \mathrm{Node(x, l, r)}) = \begin{cases} 0, & \text{dacă } x = y \ \\ 1 + \mathrm{depth}(y, l), & \text{dacă } \mathrm{depth}(y, l) \ne \mathrm{ABSENT} \ \\ 1 + \mathrm{depth}(y, r), & \text{dacă } \mathrm{depth}(y, r) \ne \mathrm{ABSENT} \ \\ \end{cases} \)


\( \mathrm{flatten}(\mathrm{Nil}) = Void \\ \mathrm{flatten}(\mathrm{Node}(x, l, r)) = Cons(x, \mathrm{append}(\mathrm{flatten}(l), \mathrm{flatten}(r))) \)

Aceasta e doar una din felurile în care putem aplatiza un arbore. O parcurgere rădăcină-stânga-dreapta. Puteți încerca să definiți celelalte parcurgeri comune: stânga-rădăcina-dreapta și stânga-dreapta-rădăcină.

2.

Fie $ t = \mathrm{Node}(x, \mathrm{Node}(y, t1, t2), t3)$. Presupunem $ \mathrm{isBinary}(t)$.

Asta implică:

\( I1. \mathrm{isBinary}(t1) \land \mathrm{isBinary}(t2) \land \mathrm{isBinary}(t3) \\ I2. \forall a \in \mathrm{elems}(t1),\ a < y \\ I3. \forall b \in \mathrm{elems}(t2),\ b \ge y \\ I4. (\forall a\in \mathrm{elems}(t1), a < x) \land (\forall b\in \mathrm{elems}(t2), b < x) \land (y < x) I5. \forall c \in \mathrm{elems}(t3),\ c \ge x \)

Arborele după rotație:

\( t' = \mathrm{rotate-right}(t) = \mathrm{Node}(y, t1, \mathrm{Node}(x,t2,t3)) \)

Trebuie să arătăm:

\( \mathrm{isBinary}(t') \)

i.e.

\( P1. \mathrm{isBinary}(t1) \land \mathrm{isBinary}(\mathrm{Node}(x, t2, t3)) \\ P2. \forall a \in \mathrm{elems}(t1),\ a < y \\ P3. \forall a \in \mathrm{elems}(\mathrm{Node}(x,t2,t3)),\ a \ge y \\ \)

Din I1 rezultă direct $ \mathrm{isBinary}(t1)$. Din I1 rezultă direct că $ \mathrm{isBinary}(t2)$ și $ \mathrm{isBinary}(t3)$; din I4 știm că toate elementele lui $ t2$ sunt mai mici ca $ x$, iar din I3 că toate elementele lui $ t3$ sunt mai mari ca $ x$. Deci P1 e adevărat.

P2 rezultă direct din I2.

$ x \ge y$ rezultă din I4. Din I1 rezultă că toate elementele lui $ t2$ sunt mai mari ca $ y$; din I4 rezultă că toate elementele lui $ t3$ sunt mai mari ca $ y$.

QED

3. Putem scrie relația caracteristică de recurență:

\( T_{balanced_ins}(n) = T_{balanced_ins}\left(\frac{n}{2}\right) + \Theta(1). \)

($ n$ este numărul de noduri din arbore).

Costul operației $ \mathrm{balance}$ este constant, deoarece implică cel mult două rotații.

4. Idee: luăm elementul median al listei și construim un nod ce va funcționa ca rădăcina arborelui. Aplicăm recursiv acest proces pe elementele din stânga medianului pentru subarborele stâng și din dreapta medianului pentru arborele drept.

Pentru a putea găsi ușor medianul la fiecare pas, putem sorta în prealabil lista în $ \Theta(n \log n)$ operații.

Construcția unui nod și atașarea subarborilor se face în timp constant, la fel și selecția medianului; deci recurența e caracterizată de relația:

\( T(n) = 2T\left(\frac{n}{2}\right) + \Theta(1) \)

Din Metoda Master, reiese că $ T(n) \in \Theta(n)$.

5.

\( \mathrm{rotate-left}(\mathrm{Node}(x,t1,\mathrm{Node}(y,t2,t3))) \\ \quad\quad = \mathrm{Node}(y, \mathrm{Node}(x, t1, t2), t3) \)

\( \mathrm{rotate-right-left}(\mathrm{Node}(x, t1, \mathrm{Node}(y, \mathrm{Node}(z, t2, t3), t4))) \\ \quad\quad = \mathrm{Node}(z, \mathrm{Node}(x, t1, t2), \mathrm{Node}(y, t3, t4)) \)