• Non ci sono risultati.

Appunti lezione – Capitolo 6 Alberi Binari di Ricerca

N/A
N/A
Protected

Academic year: 2021

Condividi "Appunti lezione – Capitolo 6 Alberi Binari di Ricerca"

Copied!
2
0
0

Testo completo

(1)

Appunti lezione – Capitolo 6 Alberi Binari di Ricerca

Alberto Montresor 08 Gennaio, 2020

1 Domanda – Propriet`a d’ordine

Q: Come devo visitare un albero binario di ricerca per ottenere la lista ordinata dei valori?

A: Una visita di tipo simmetrico restituisce i valori in ordine crescente.

2 Domanda – Altezza albero ABR, qual `e il caso pessimo?

Qui bisognerebbe specificare meglio la domanda. Si intende: qual `e l’albero di altezza massima? E’ quello in cui valori sono disposti linearmente, per esempio a causa di un inserimento ordinato di valori. Nel qual caso h = n.

3 Domanda – Altezza albero ABR, qual `e il caso ottimo?

Qui bisognerebbe specificare meglio la domanda. Si intende: qual `e l’albero di altezza minima? E’ quello meglio bilanciato, ovvero un albero completo o perfetto. Nel qual caso h = Θ(log n).

4 Altezza massima di un albero rosso-nero con n nodi interni

Teorema 1. In un albero RB, un sottoalbero di radice u contiene almeno n ≥ 2b(u)− 1 nodi interni.

Dimostrazione. Dimostrazione per induzione sull’altezza (non sull’altezza nera).

• Caso base: h = 0. Allora u deve essere una foglia nil e il sottoalbero con radice in u contiene esattamente almeno n ≥ 2b(u)− 1 = 20− 1 = 0 nodi interni.

• Passo induttivo: h > 1. Allora v `e un nodo interno con due figli. Ogni figlio v ha un’altezza nera b(v) pari a b(u) o a b(u) − 1, a seconda del suo colore (rosso: b(u), nero: b(u) − 1). Usando l’ipotesi induttiva, possiamo dire che ogni figlio ha almeno 2b(u)−1− 1 nodi interni. Quindi, il sottoalbero con radice in u ha almeno:

n ≥ 2b(u)−1− 1 + 2b(u)−1− 1 + 1 = 2b(u)− 1 nodi

Questo dimostra il teorema.

Lemma 1. In un albero RB, almeno la met`a dei nodi dalla radice ad una foglia deve essere nera.

Dimostrazione. Per la propriet`a 2, se un nodo `e rosso, i suoi figli devono essere neri. Quindi la situazione in cui sono presenti il minor numero di nodi neri `e il caso in cui rossi e neri sono alternati, dimostrando il teorema.

1

(2)

Teorema 2. In un albero RB, nessun percorso da un nodo v ad una foglia `e lungo pi`u del doppio del percorso da v ad un’altra foglia.

Dimostrazione. Per definizione, ogni percorso da un nodo ad una qualsiasi foglia contiene lo stesso numero di nodi neri. Dal Lemma1, almeno met`a dei nodi in ognuno di questi percorsi sono neri. Quindi, al limite, uno dei due percorsi `e costituito da solo nodi neri, mentre l’altro `e costituito da nodi neri e rossi alternati.

Teorema 3. L’altezza massima di un albero rosso-nero con n nodi interni `e al pi`u 2 log(n + 1).

Dimostrazione.

n ≥ 2b(r)− 1 ⇔ n ≥ 2h/2− 1

⇔ n + 1 ≥ 2h/2

⇔ log(n + 1) ≥ h/2

⇔ h ≤ 2 log(n + 1)

2

Riferimenti

Documenti correlati

Caso 1: se la chiave k è contenuta in un nodo che ha un sottoalbero sinistro, allora il predecessore di k è il massimo delle chiavi contenute nel sottoalbero sinistro, e

•Se la massa del residuo dell'esplosione è eccessiva può capitare che la forza di gravità alla superficie di questi oggetti raggiunga valori altissimi, tanto

• In un albero binario la profondità di un nodo è la lunghezza del percorso dalla radice al nodo (cioè il numero di archi tra la radice e il nodo). • L’altezza dell’albero

• Nella rappresentazione basata sui nodi ogni nodo di un albero binario avrà due riferimenti a ciascuno dei figli (Left e Right). In alcune implementazioni si può avere anche

Definire la classe AlberoBRConDuplicatiInLista come estensione di AlberoBR per mantenere i duplicati (elementi distinti ma di chiavi uguali) in una lista contenuta in un nodo (cioè

Arricchire l’interfaccia AlberoBinario e la classe AlberoBinarioImpl con la seguente operazione: public boolean isBST(AlberoBinario T); che verifica se un dato albero binario

Scrivere un programma che legga da tastiera una sequenza di N interi di- stinti e li inserisca in un albero binario di ricerca (senza ribilanciamento).. Il programma deve

Dato un albero binario i cui nodi sono colorati di rosso o di nero, progettare un algoritmo efficiente che calcoli il numero di nodi aventi lo stesso numero di discendenti rossi