Verifica bilanciamento nel numero dei nodi: definizioni.

Slides:



Advertisements
Presentazioni simili
Alberi binari Definizione Sottoalberi Padre, figli
Advertisements

Alberi binari di ricerca
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Stesso approccio.
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.
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 Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
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.
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
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 pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
Esercizi su alberi binari
Tail recursion: esempio
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
alberi completamente sbilanciati
Flusso Statico e Dinamico 20/03/2006. Codice da Interpretare int valore; valore = funz(); if( valore > 0 ) { [codice1] } else { [codice2] } return valore;
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Prog21 Alberi binari (radicati e ordinati) Il figlio destro della radice La radice Il figlio sinistro della radice Il padre del nodo 5.
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Alberi Binari di Ricerca Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Alberi Bilanciati di Ricerca Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Dudo.
Esercitazioni di Prog. II (esercizi su alberi ennari)
Progettare algoritmi veloci usando strutture dati efficienti
Progettare algoritmi veloci usando strutture dati efficienti
Dizionari alberi bilanciati.
Alberi di ricerca di altezza logaritmica
Alberi binari Definizione Sottoalberi Padre, figli
Divide et Impera Quicksort Mergesort Charles Antony Richard Hoare
Algoritmi e Strutture Dati
Le postcondizioni specificano l’output della funzione.
Algoritmi e Strutture Dati
Divide et Impera Quicksort Mergesort
Lezione n°4 Prof.ssa Rossella Petreschi
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Programmazione e Laboratorio di Programmazione
Algoritmi e Strutture Dati
Programmazione e Laboratorio di Programmazione
Dizionari alberi bilanciati.
Introduzione agli Algoritmi e alle Strutture Dati
Alberi n-ary Lezioni di C.
Progettare algoritmi veloci usando strutture dati efficienti
esercizi alberi binari
comprensione e modifica di codice
Algoritmi e Strutture Dati
comprensione e modifica di codice
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
MergeSort Usa la tecnica del divide et impera:
concetti ed applicazioni
Insiemi disgiunti.
Algoritmi e Strutture Dati
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Verifica bilanciamento nel numero dei nodi: definizioni. 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. E' evidente che l’albero vuoto è n-bilanciato e che un albero t, con sottoalberi t1 e t2, rispettivamente con n1 e n2 nodi, è n-bilanciato sse t1 e t2 sono n-bilanciati e |n1-n2|≤1.

Verifica bilanciamento nel numero dei nodi. 1° int nBilIneff(TreePtr tPtr) /* post: restituisce 1 se l'albero t e' bilanciato nel numero di nodi, ossia se la differenza tra il numero dei nodi nel sottoalbero sinistro e quello nel sottoalbero destro di ogni nodo è minore di 1 in valore assoluto, altrimenti restituisce 0. VERSIONE INEFFICIENTE */ { int nnr, nnl; if (!tPtr) return 1; if (nBilIneff(tPtr->lPtr)) if (nBilIneff(tPtr->rPtr)) { nnl = numNodi(tPtr->lPtr); nnr = numNodi(tPtr->rPtr); if (abs(nnr - nnl)<=1) return 1; } return 0;

Verifica bilanciamento nel numero dei nodi. 2° int nBilEffAus(TreePtr tPtr) /* Verifica il bilanciamento di tPtr con un unica scansione dell'albero. Ogni chiamata restituisce il numero dei nodi del sottoalbero radicato nel nodo della chiamata, se questo è bilanciato, mentre restituisce -1 altrimenti. postc: restituisce -1 se l’albero non e’ bilanciato nel numero dei nodi, un valore positivo altrimenti.*/ { int nnl, nnr; if (!tPtr) return 0; else { nnl = nBilEffAus(tPtr->lPtr); if (nnl >= 0) { nnr = nBilEffAus(tPtr->rPtr); if (nnr>=0 && abs(nnl-nnr)<=1) return (nnl+nnr+1); } return -1;

Verifica bilanciamento fine int nBilEff(TreePtr tPtr) /* verifica il bilanciamento nel numero di nodi di tPtr, *postc: restuisce 1 se l'albero è bilanciato, 0 altrimenti */ { if (nBilEffAus(tPtr) == -1) return 0; else return 1; }

int hSbil(TreePtr tPtr) Esercizio 2: Si definisca la funzione C di prototipo int hLSbil(TreePtr t); che restituisce il numero dei nodi sbilanciati a sinistra in altezza, cioè dei nodi X tali che l'altezza del sottoalbero sinistro di X e' maggiore di quella di quello destro. int hSbil(TreePtr tPtr) /*postc: restituisce il numero dei nodi sbilanciati a sinistra in altezza */ {int hsbil=0; hSbilAus(tPtr,&hsbil);return hsbil;} int hSbilAus(TreePtr tPtr,int *ris) /* postc:restituisce l'altezza di t e calcola in ris il numero dei nodi sbilanciati a sinistra in altezza */ {int lh,rh; if (!tPtr) return -1; /* l'albero vuoto ha altezza –1*/ lh = hSbilAus(tPtr -> lPtr, ris); rh = hSbilAus(tPtr -> rPtr,ris ) ; if (lh > rh) {(*ris)++;return lh + 1;} else return rh+1;