alberi completamente sbilanciati

Slides:



Advertisements
Presentazioni simili
Alberi binari Definizione Sottoalberi Padre, figli
Advertisements

Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Lez. 141 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati 2-3 BTree Copyright.
RB-alberi (Red-Black trees)
Code a priorità (Heap) Definizione
Alberi binari di ricerca
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Capitolo 6 Alberi di ricerca Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Esercizi su alberi binari
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su alberi binari di ricerca
Algoritmi e strutture Dati - Lezione 7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Interrogazioni.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Interrogazioni su un albero binario di ricerca Search(S,k) – dato un insieme S ed un valore chiave k restituisce un puntatore x ad un elemento in S tale.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Alberi AVL (Adelson-Velskii.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
CORSO DI PROGRAMMAZIONE II
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati
Albero: insieme di punti chiamati NODI e linee chiamate EDGES
Algoritmi e Strutture Dati 20 aprile 2001
Algoritmi e Strutture Dati
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Heap binari e HeapSort.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
Sorting: MERGESORT Vogliamo ordinare lista (a 1,…,a n ). 1.Dividi lista in 2 sottoliste aventi (quasi) la stessa dimensione: (a 1,a 3,a 5,…) e (a 2,a 4,…),
Alberi di ricerca binari
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.
Heap Ordinamento e code di priorità Ugo de Liguoro.
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
Alberi CORDA – Informatica A. Ferrari Testi da
Ordinamento e Operazioni su Strutture Dati Fabio Massimo Zanzotto.
1/32 Algoritmi e Strutture Dati HEAP Anno accademico
1 Un esempio con iteratore: le liste ordinate di interi.
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Rotazioni.
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Soluzione esercizio.
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 6 Il problema.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Prof.ssa Rossella Petreschi Lezione del 15 /10/2012 del Corso di Algoritmica B-alberi Lezione n°5.
Prog21 Alberi binari (radicati e ordinati) Il figlio destro della radice La radice Il figlio sinistro della radice Il padre del nodo 5.
Verifica bilanciamento nel numero dei nodi: definizioni.
Transcript della presentazione:

alberi completamente sbilanciati Il numero dei nodi al livello i è 1, per 0≤ i ≤ altezza L’altezza h di un albero completamente sbilanciato con n nodi è h = n-1

Un albero completamente bilanciato o pieno (full) Definizione: Un albero è pieno se tutte le foglie sono sullo stesso livello e ogni nodo non foglia ha due figli. Il numero dei nodi al livello i è 2i, per 0≤ i ≤ altezza Il numero dei nodi n di un albero pieno di altezza h è n = 2h+1 -1 Per un albero binario qualsiasi di altezza h e numero di nodi n vale log2(n)< h+1 ≤ n

log2(n)< h+1 ≤ n Per ottenere questi limiti per l'altezza di un albero binario in funzione del numero dei nodi osserviamo che: l'albero completamente sbilanciato con n nodi ha altezza massima a parità di nodi. In altre parole è il più alto albero binario con n nodi, infatti ha un solo nodo per ogni livello. L'altezza è h = n-1. Quindi qualsiasi albero binario con n nodi ha altezza h ≤ n-1, da cui h+1≤ n. l'albero pieno ha il maggior numero di nodi fra gli alberi binari della stessa altezza. Il numero di nodi è n = 2h+1 - 1. Quindi qualsiasi albero binario di altezza h ha un numero di nodi n ≤ 2h+1 - 1, da cui n < 2h+1, e passando ai logaritmi si ha log2(n)< h+1

Un albero binario completo Definizione: un albero binario è completo se tutti i livelli, tranne al più il massimo, hanno il massimo numero di nodi e le foglie sul livello massimo sono più a sinistra possibile. Per ogni n esiste un unico albero binario completo con n nodi

Numero nodi n = 2h - 1 Alt = h-1 Numero nodi n = 2h Alt = h posso aggiungere altri 2h - 1 nodi, senza aumentare l’altezza. 2h ≤ n ≤ 2h+1 -1, da cui h = log2(n), n≥1.

alberi n-bilanciati Definizione: Un albero è bilanciato nel Numero dei Nodi, brevemente n-bilanciato, quando, per ogni sottoalbero t radicato in un suo nodo, il numero dei nodi del sottoalbero sinistro di t meno il numero dei nodi del sottoalbero destro di t è in valore assoluto al più 1. Anche per gli alberi n-bilanciati h = log2(n), n≥ 1.

_______________________________________________________ n = 23-1 nodi n = 22-1 nodi _______________________________________________________ n = 22 nodi _______________________________________________________ ... n = 22 +1 nodi _______________________________________________________ ... n = 22 +2 nodi

Se t è un albero n-bilanciato con numero dei nodi n e altezza h,vale 2h ≤ n ≤ 2h+1 -1, per ogni n≥1. Dimostriamolo per induzione sul numero dei nodi. Per n = 1 è banalmente vero (l’altezza è 0). Sia vero per tutti gli alberi con meno di n nodi e sia t un albero con n nodi. t = h h1 t1 t2 h2 n = n1 + n2 + 1 h = max(h1,h2) +1 Per ipotesi induttiva 2h1 ≤ n1 ≤ 2h1+1 -1 e 2h2 ≤ n2 ≤ 2h2+1 -1, graficamente: n1 2h1+1 n2 2h2+1 2h1+1 -1 2h2 2h2+1 -1 2h1 Ma |n1-n2| ≤ 1!!

Poichè |n1-n2| ≤ 1, possiamo avere i seguenti casi, assumendo, senza ledere la generalita’, che n2≥n1: Caso 1: n1 = n2, per cui h1 = h2 n1= n2 2h1+1 2h1+1 -1 2h1 Caso 2: n2 = n1+1 e entrambi cadono nello stesso intervallo, per cui h1 = h2 n1 n1+1 2h1+1 2h1+1 -1 2h1 Caso 3: n2 = n1+1 e cadono in intervalli diversi ma successivi, per cui h2 = h1 +1 n2 = 2h2 = 2h1+1 2h2+1 2h2+1 -1 n1 = 2h1+1 -1

2*2h1 ≤ 2*n1≤ 2*2h1+1 -2 da cui 2*2h1 ≤ n1+n2≤ 2*2h1+1 -2 da cui n = n1 + n2 + 1 h = max(h1,h2) +1 Caso 1: n1 = n2, per cui h1 = h2 Per ipotesi induttiva 2h1 ≤ n1=n2 ≤ 2h1+1 -1, quindi 2*2h1 ≤ 2*n1≤ 2*2h1+1 -2 da cui 2h1+1≤ 2*n1+1≤ 2h1+2 -1 da cui la tesi essendo n = 2*n1+1 e h = h1+1 Caso 2: n2 = n1+1 e entrambi cadono nello stesso intervallo, per cui h1 = h2 Per ipotesi induttiva 2h1 ≤ n1≤ 2h1+1 -1, e 2h1 ≤ n2≤ 2h1+1 -1 quindi 2*2h1 ≤ n1+n2≤ 2*2h1+1 -2 da cui 2h1+1≤ n1+n2+1≤ 2h1+2 -1 da cui la tesi essendo n = n1+n2+1 e h = h1+1 Caso 3: n2 = n1+1 e cadono in intervalli diversi ma successivi, per cui h=h2 = h1 +1 Per ipotesi induttiva 2h1 ≤ n1≤ 2h1+1 -1, e 2h2 ≤ n2≤ 2h2+1 -1 , ma allora deve essere n1 = 2h2 -1 e n2 = 2h2 da cui n1+n2 = 2h2 -1 + 2h2 da cui n1+n2+1 = 2h2 + 2h2 = 2h2+1

bilanciato in altezza e non bilanciato nel numero dei nodi Analogamente si dimostra che in un albero n-bilanciato le altezze dei sottoalberi sinistro e destro dell’albero radicato in ogni nodo differiscono in valore assoluto al più di uno. Definizione: Un albero è bilanciato in altezza , brevemente h-bilanciato, quando, per ogni sottoalbero t radicato in un suo nodo, l’altezza del sottoalbero sinistro di t meno l’altezza del sottoalbero destro di t è in valore assoluto al più 1. Quindi possiamo dire che ogni albero bilanciato nel numero dei nodi è anche bilanciato in altezza. Che rapporto c'è tra le classi di albero introdotte fino ad ora? esempio di albero bilanciato in altezza e non bilanciato nel numero dei nodi

Questo e' un esempio di albero completo non bilanciato nel numero dei nodi alberi h-bilanciati alberi n-bilanciati alberi pieni alberi completi

A partire da un vettore di interi possiamo costruire ricorsivamente un albero bilanciato nel numero di nodi selezionando a ogni chiamata una radice alla metà del vettore su cui si effettua la chiamata. C A B C D E F 1 2 3 4 5 A B D E F 1 3 4 5

TreePtr AlbBinBil(int * vett, int i, int j) /*costruisce un albero n-bilanciato a partire da un vettore di indici i e j * prec: vett!=NULL && i ≥0 && j≥0 *postc: t punta alla radice di un albero n-bilanciato che contiene vett[i],…,vett[j]*/ {int m; TreePtr t; if (i <= j) {m = (i+j)/2; t = malloc(sizeof(Node)); if (t) t -> elem = vett[m]; else /* malloc ha restituito un puntatore nullo */ fprintf(stderr,"%d non inserito, memoria non disponibile per AlbBibBil.\n",vett[m]); t->lPtr = AlbBinBil(vett,i,m-1); t->rPtr = AlbBinBil(vett,m+1,j); return t; } return NULL;

C A B C D E F C A B C D E F A C A B C D E F - A - B - i =0,j=5 C A B C D E F 1 2 3 4 5 C i =0,j=1 A B C D E F A 1 2 3 4 5 C i =0,j=5 A B C D E F - A 1 2 3 4 5 - B -

C A B C D E F - A E - B - C A B C D E F - A E - B - - D - - F - 1 2 3 4 5 - B - C A B C D E F - A E 1 2 3 4 5 - B - - D - - F -

Esercizio 1: si definisca una funzione che dovrà restituire “vero” se l’albero è bilanciato nel numero dei nodi, “falso” altrimenti. Esercizio 2: si definisca una funzione che dovrà restituire “vero” se l’albero è bilanciato in altezza, “falso” altrimenti.