1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-25 19:44:18 +00:00
appunti-steffo/2 - Algoritmi e strutture dati/1 - Appunti/16 - Albero radicato.md

77 lines
2.6 KiB
Markdown

# Albero radicato
Un _albero radicato_ è una struttura dati di **natura ricorsiva** che organizza i dati in maniera **non-lineare**.
## Proprietà
- Ogni nodo dell'albero ha un **unico genitore**: `∀ (padre, figlio), (padre' figlio) ∈ E \implies padre = padre'`
- Ogni nodo dell'albero può avere **un numero qualsiasi di figli**.
<!---->
- I **nodi superiori al padre** vengono chiamati _antenati_.
- I **nodi inferiori ai figli** vengono chiamati _discendenti_.
<!---->
- Nodi **senza padre** sono detti _radice_: `\notexists (padre, radice) ∈ E`
- Nodi **con padre e figli** sono detti _rami_ o interni.
- Nodi **senza figli** sono detti _foglie_.
<!---->
- La **distanza** tra il nodo radice e i suoi discendenti è detta _livello_:
- I figli immediati sono di livello 1.
- I "nipoti" (figli dei figli) sono di livello 2.
- I figli dei nipoti sono livello 3.
- E così via.
- Il **livello massimo** all'interno di un albero è detto _altezza_, _profondità_ oppure _h_, ed è sempre `1 ≤ h ≤ n-1`.
<!---->
- Un albero ha sempre `n-1` archi.
## Alberi particolari
### Alberi `d`-ari
Un albero _`d`-ario_ è un particolare tipo di albero che **limita il numero massimo di figli di un nodo** a `d`.
> Un albero _binario_ può avere **massimo 2 figli** per ogni nodo; un albero _ternario_ ne può avere **3**; un albero _`17`-ario_ ne potrà avere **17**
#### Alberi completi
Un albero `d`-ario si dice _completo_ se **tutti i nodi hanno 0 o `d` figli**, e mai una numero in mezzo.
#### Alberi bilanciati
Un albero `d`-ario si dice _bilanciato_ se **tutti i livelli eccetto l'ultimo** hanno il numero massimo di figli.
#### Alberi perfettamente bilanciati
Un albero `d`-ario si dice _perfettamente bilanciato_ se **tutti i livelli incluso l'ultimo** hanno il numero massimo di figli.
##### Particolarità degli alberi binari perfettamente bilanciati
Si può dimostrare per induzione che:
- Hanno sempre `2^h` foglie.
- Hanno sempre `2^{h+1}-1` (`\sum_i=0^n 2^i`) nodi.
- L'altezza è in `Θ(log n)`.
## Implementazione degli alberi
Possiamo scegliere se usare una rappresentazione con array o con nodi e puntatori: ognuna ha vantaggi e svantaggi diversi.
### Implementazione tramite array
E' suggerito se l'albero è regolare; più è simile a un albero d-ario completo, meglio è.
### Implementazione tramite nodi e puntatori
Più adatta ad alberi irregolari.
Se l'albero è regolare, creiamo il numero esatto di campi:
- Valore
- Figlio1
- Figlio2
- _Opzionale:_ Padre
Se un albero è irregolare, creiamo una specie di lista:
- Valore
- Primo figlio
- Prossimo fratello
- _Opzionale:_ Padre