Esercizi su alberi binari di ricerca

Slides:



Advertisements
Presentazioni simili
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Advertisements

MultiSet, Liste Ordinate
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Code a priorità (Heap) Definizione
Alberi binari di ricerca
Cammini minimi con sorgente singola
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
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 strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
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.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
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.
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II
APPUNTI SUL LINGUAGGIO C
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 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
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,…),
AN Fondam98 Sorting Ricerca in un vettore ordinato.
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.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
Corso di informatica Athena – Periti Informatici
void binario(int n); …………………
Programmazione di Calcolatori
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.
Esercizi su File.
Esercizi Liste.
Esercizi su File e Liste
Registro a scorrimento
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 { };
Cammini minimi da un sorgente
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Esercitazione 5 D. Bloisi, A.
Alberi di copertura minimi. Dato un grafo pesato G = (V,E), si richiede di trovare un albero T = (V,E’), E’  E, tale che la somma dei pesi associati.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
alberi completamente sbilanciati
1 Un esempio con iteratore: le liste ordinate di interi.
Struttura di una lista legata Una lista legata è una variabile strutturata in cui ogni elemento mantiene l’indirizzo (mediante un puntatore) dell’elemento.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Heap concetti ed applicazioni. maggio 2002ASD - Heap2 heap heap = catasta condizione di heap 1.albero binario perfettamente bilanciato 2.tutte le foglie.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Algoritmi e Strutture Dati Strutture Dati Elementari.
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Compitino del 2004 Alberi Generici. Idea Si vuole un tipo di dato astratto che definisca una struttura ad albero in cui nodi e foglie hanno associato.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
1 Un esempio: le liste ordinate di interi. 2 Liste ordinate  OrderedIntList 4 lista ordinata di interi –modificabile.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Primo Compitino Terzo Esercizio Implementare il tipo di dato astratto Table un oggetto di tipo Table ha due colonne e un numero variabile di righe.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
C++:Strutture di Controllo
1 Un esempio con iteratore: le liste ordinate di interi.
APPUNTI SUL LINGUAGGIO C
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Esercitazioni di Prog. II (esercizi su alberi ennari)
LINGUAGGIO C Alberi e livelli
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
Transcript della presentazione:

Esercizi su alberi binari di ricerca Scrivere una funzione che, dato un albero binario, verifichi se è un albero binario di ricerca. Scrivere una funzione che, dato un albero binario di ricerca e un intero i, restituisca il nodo contenente l'i-esimo valore nell'ordine. NOTA: scrivere sempre pre e post condizione di ogni funzione

Esercizio 1 Pre condizioni: Post condizioni: Scrivere una funzione che, dato un albero binario, verifichi se è un albero binario di ricerca. Pre condizioni: La funzione prende in ingresso un albero binario Post condizioni: La funzione restituisce 1 se l'albero binario è di ricerca, 0 altrimenti.

Implementazione int abr_aux(tree *t, int *prec) { int ris; if (!t) return 1; ris = abr_aux(t->sx, prec); ris &= *prec < t->val; if (ris) *prec = t->val; ris &= abr_aux(t->dx, prec); } return ris; tree *abr(tree *t, int *i) int prec = INT_MIN; return abr_aux(t, &prec);

Esercizio 2 Pre condizioni: Post condizioni: Scrivere una funzione che, dato un albero binario di ricerca e un intero i, restituisca il nodo contenente l'i-esimo valore nell'ordine. Pre condizioni: La funzione prende in ingresso un albero binario di ricerca e un intero i (passato per riferimento). Supponiamo i >= 1. Post condizioni: La funzione restituisce il nodo contenente l'i-esimo valore nell'ordine se i <= del numero di nodi dell'albero (NULL altrimenti).

Implementazione tree *trova(tree *t, int *i) { tree *temp; if (!t) return NULL; temp = trova(t->sx, i); if (*i == 1) temp = t; (*i)--; if (*i >= 1) temp = trova(t->dx, i); return temp; }

Esercizi su grafi Scrivere una funzione che, dato un grafo rappresentato mediante liste di adiacenza e dato un nodo del grafo v, restituisca il numero di nodi a massima distanza da v. Scrivere una funzione che, dato un grafo rappresentato mediante liste di adiacenza e un cammino rappresentato mediante una lista di nodi, verifichi se il cammino esiste nel grafo fornito in input. NOTA: scrivere sempre pre e post condizione di ogni funzione

Esercizio 1 Pre condizioni: Post condizioni: Scrivere una funzione che, dato un grafo rappresentato mediante liste di adiacenza e dato un nodo del grafo v, restituisca il numero di nodi a massima distanza da v. Pre condizioni: La funzione prende in ingresso un grafo e un indice v di un nodo del grafo Post condizioni: La funzione restituisce il numero di nodi aventi distanza massima da v.

Implementazione int max_dist(graph *g, int k) { int max_dist = 0; int count; int a; for (a = 0; a < g.N; a++) vis[a] = dist[a] = 0; coda *t = crea_coda(); tail_add(t, k); vis[k] = 1; while(!coda_vuota(t)) int u = tail_remove(t); list *adj = g->adj_list[u]; while(adj != NULL) int v = adj->el; if (!vis[v]) vis[v] = 1; dist[v] = dist[u]+1; tail_add(t, v); if (dist[u] > max_dist) max_dist = dist[u]; count = 0; } count++; adj = adj->next; return count;

Esercizio 2 Pre condizioni: Post condizioni: Scrivere una funzione ricorsiva che, dato un grafo rappresentato mediante liste di adiacenza e un cammino rappresentato mediante una lista di nodi, verifichi se il cammino esiste nel grafo fornito in input. Pre condizioni: La funzione prende in ingresso un grafo e una lista di nodi (ovvero un cammino) Post condizioni: La funzione restituisce 1 se e' possibile percorrere il cammino nel grafo in input, 0 altrimenti..

Implementazione int verifica_arco(graph *g, int u, int v) { list *adj = g->adj_list[u]; while(adj) if (adj->el == v) return 1; adj = adj->next; } return 0; int verifica(graph *g, list *p) if (!p || p->next == NULL) return 1; return verifica_arco(g, p->el, p->next->el) && verifica(g, p->next);