Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.

Slides:



Advertisements
Presentazioni simili
Strutture dati per insiemi disgiunti
Advertisements

Uso avanzato di C.
Algoritmi Avanzati Grafi e Alberi
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
RB-alberi (Red-Black trees)
Code a priorità (Heap) Definizione
Strutture dati elementari
Alberi binari di ricerca
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
PROGRAMMI DI RICERCA E ORDINAMENTO
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Esercizi su alberi binari
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su alberi binari di ricerca
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Algoritmi e strutture Dati - Lezione 7
Il problema del dizionario
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.
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II Operazioni su alberi ordinati e non
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati
APPUNTI SUL LINGUAGGIO C
Algoritmi e Strutture Dati 20 aprile 2001
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 code Date due code in ingresso a valori interi in ordine crescente, scrivere una funzione che restituisca una terza coda che contenga i valori.
Esercizi su alberi binari
Le liste dinamiche La ricorsione
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
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.
Algoritmi e Strutture Dati
void binario(int n); …………………
Lordinamento di tre numeri interi. acquisisci a,b,c (a > b) AND (a > c)(b > a) AND (b > c) (c > a) AND (c > b) Scrivi c,b,aScrivi b,c,aScrivi c,a,bScrivi.
Esercizi su File.
Esercizi Liste.
Grafi Rappresentazione mediante liste di adiacenza:
Tail recursion: esempio
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
ND-partizione (A) n   A  somma  0 M  1/2 (  a i ) for i  1 to n do S[i]  choice ({true, false}) if S[i] then somma  somma + a i if somma > M then.
Corso di Informatica 2 a.a. 2003/04 Lezione 6
Cammini minimi da un sorgente
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
AlgoLab - Code unificabili Code unificabili con alberi binomiali Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Algoritmi e Strutture Dati Strutture Dati Elementari.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
APPUNTI SUL LINGUAGGIO C
Lezione sulle allocazioni dinamiche
Esercitazioni su alberi
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Esercitazioni di Prog. II (esercizi su alberi ennari)
Esercitazioni di Prog. II (esercizi _aggiuntivi_su alberi binari)
Alberi n-ary Lezioni di C.
APPUNTI SUL LINGUAGGIO C
comprensione e modifica di codice
LINGUAGGIO C Alberi e livelli
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
Transcript della presentazione:

Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi

Esercizio Scrivere un algoritmo che, dato in input un albero binario T i cui nodi sono etichettati con interi, visiti per livelli T

Visita per livelli VisitaLivello(T,l) if (T ≠ NIL) then if l = 0 then visita info[T] else l <- l - 1 VisitaLivello(left[T],l) VisitaLivello(right[T],l)

Visita per livelli VisitaLivelli(T) if (T ≠ NIL) then i = Profondita(T) for j <- 0 to i do VisitaLivello(T,j)

// definizione della struttura nodo typedef struct elem{ int info; struct elem* left; struct elem* right; } etree; // definizione del puntatore ai nodi dell’albero typedef etree* ptree; Alberi in C

void VisitaLivello(ptree p, int livello){ if (p != NULL) { if (livello == 0) printf("%d ",p->info); else { livello--; VisitaLivello(p->left,livello); VisitaLivello(p->right,livello); } Visita per livelli

void VisitaLivelli(ptree p){ if (p!= NULL) { printf("Visita per livelli: "); int i = Profondita(p); int j; for(j = 0; j <= i; j++) VisitaLivello(p,j); printf("\n"); } Visita per livelli

Esercizio Scrivere un algoritmo che, dato in input un albero binario T i cui nodi sono etichettati con interi, e dato un numero intero l, crei una lista collegata mediante puntatori che contiene tutte le etichette di T che si trovano al livello l, se esistono.

Lista livello ListaLivello(T, l, lista){ if T ≠ NIL then if (l = 0) then inserisciInCoda(lista,info[T]) else l-- ListaLivello(left[T],l,lista) ListaLivello(right[T],l,lista)

void ListaLivello(ptree p, int livello, plist *l){ if (p != NULL) { if (livello == 0) inserisciInCoda(l,p->info); else { livello--; ListaLivello(p->left,livello,l); ListaLivello(p->right,livello,l); } Lista Livello

Esercizio Un albero si definisce livellato crescente se la somma dei nodi delle etichette sul livello i è maggiore o uguale di quella a livello i+1 (per ogni i). Scrivere un algoritmo che, dato in input un albero binario T i cui nodi sono etichettati con interi, verifichi se questo albero è livellato crescente.

Livellato Crescente Crescente(T,somma,j,p) if (T = NIL) then return true else if j > p then return true else ListaLivello(T,j,l) s <- SUM(l) return s > somma and Crescente(T,s,j+1,p) LivCrescente(T) return Crescente(T,0,0,Profondita(T))

int Crescente(ptree T, int somma, int j, int p) { if (T == NULL) return 1; else { if (j > p) return 1; else{ plist l = NULL; ListaLivello(T,j,&l); int s = SUM(l); j++; return ((s > somma) && Crescente(T,s,j,p)); } int LivCrescente(ptree T) { return Crescente(T,0,0,Profondita(T)); } Livellato Crescente

Esercizio Scrivere un algoritmo che, dato in input un albero binario di ricerca T i cui nodi sono etichettati con interi, e un intero l, inserisca l in T mantenendo T un albero binario di ricerca.

Inserimento in ABR InsertABR(T,z) y <- NIL x <- head[T] while x ≠ NIL do y <- x if info[z] < info[x] then x <- left[x] else x <- right[x] if y = NIL then head[T] <- z else if info[z] < info[y] then left[y] <- z else right[y] <- z

int InsertABR(ptree *T, int z){ ptree y = NULL; ptree x = *T; while (x != NULL) { y = x; if (z info) x = x->left; else x = x->right; } ptree temp = (ptree)malloc(sizeof(etree)); temp->info=z; temp->left=NULL; temp->right=NULL; if (y == NULL) *T = temp; else if (z info) y->left = temp; else y->right=temp; } Inserimento in ABR

Esercizio Scrivere un algoritmo che, dato in input un albero binario T i cui nodi sono etichettati con interi, costruisca da T un albero binario di ricerca.

Crea ABR LivelloABR(T,l,ABR) if T ≠ NIL then if l = 0 then InsertABR(ABR,info[T]) else l-- LivelloABR(left[T],l,ABR) LivelloABR(right[T],l,ABR) CreaABR(T,ABR) if T ≠ NULL then i = Profondita(T) for j <- 0 to i LivelloABR(T,j,ABR)

void LivelloABR(ptree p, int livello, ptree *ABR){ if (p != NULL) { if (livello == 0) InsertABR(ABR,p->info); else { livello--; LivelloABR(p->left,livello,ABR); LivelloABR(p->right,livello,ABR); } Crea ABR

void CreaABR(ptree T,ptree* ABR){ if (T!= NULL) { int i = Profondita(T); int j; for(j = 0; j <= i; j++) LivelloABR(T,j,ABR); } Crea ABR

Corso di Algoritmi e strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su alberi FINE