STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.

Slides:



Advertisements
Presentazioni simili
Andrea Zandatutoraggio strutture dati STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°14 albero di ricerca binario.
Advertisements

Algoritmi e Strutture Dati
Strutture dati per insiemi disgiunti
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
INFORMATICA Algoritmi fondamentali
Argomenti della lezione
Uso avanzato di C.
Estendere i linguaggi: i tipi di dato astratti
Lez. 131 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Rappresentazione.
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
Strutture dati elementari
Algoritmi in C++ (1) da completare
Alberi binari di ricerca
Code con priorità Ordinamento
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Heap Sort. L’algoritmo heap sort è il più lento di quelli di ordinamento O(n * log n) ma, a differenza degli altri (fusione e quick sort) non richiede.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
Esercizi su alberi binari
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Il problema del dizionario
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Boruvka Algoritmi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 8 Code con.
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.
1 Corso di Informatica (Programmazione) Esercitazione 1 (26 novembre 2008)
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
Algoritmi e strutture dati
Algoritmi e Strutture Dati IV. Heap e Code di Priorità
Algoritmi e Strutture Dati III. Algoritmi di Ordinamento
Algoritmi di ordinamento
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.
Heap binomiali Gli heap binomiali sono strutture dati su cui si possono eseguire efficientemente le operazioni: Make(H) : crea uno heap vuoto Insert(H,
File di testo, file binari
Fibonacci Heaps e il loro utilizzo nell’algoritmo di Prim
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.
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Corso di informatica Athena – Periti Informatici
Vedremo in seguito che (n log n) è un limite stretto per il problema dellordinamento. Per ora ci limitiamo a dimostrare che: La complessità nel caso pessimo.
RB-insert(T, z) // z.left = z.right = T.nil Insert(T, z) z.color = RED // z è rosso. Lunica violazione // possibile delle proprietà degli alberi // rosso-neri.
Heap Ordinamento e code di priorità Ugo de Liguoro.
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Esercizi su File.
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Esercitazioni su liste
Soluzione: Algoritmo Heap-Sort Un array A[1..n] può essere interpretato come un albero binario: A[1] è la radice, A[2i] e A[2i+1] sono i figli di A[i]
Struttura di una lista legata Una lista legata è una variabile strutturata in cui ogni elemento mantiene l’indirizzo (mediante un puntatore) dell’elemento.
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.
AlgoLab - MST code binomiali Algoritmi per il calcolo di MST: uso di code unificabili Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
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.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Esercitazioni su alberi
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo

TESTO ESERCITAZIONE Gestire un insieme S di nomi come una coda con priorità. La priorità è data dallordinamento alfabetico, cioè un nome ha priorità più alta di un altro se esso lo precede nellordinamento alfabetico. Si richiede: linserimento di nuovi nomi nellinsieme S; la cancellazione del nome con priorità maggiore dallinsieme S; la visualizzazione di tutti i nomi dellinsieme S; il salvataggio di tutti i nomi dellinsieme S su file alluscita del programma; la lettura dei nomi già esistenti dallo stesso file allavvio del programma.

Suggerimento. Utilizzare un heap massimo per gestire la lista di nomi con priorità implementato con un array. Organizzare lalgoritmo con un menù del tipo: Inserire un nuovo nome -> 1 Eliminare il primo nome -> 2 Visualizzare la lista -> 3 Terminare il programma -> 0 facendo corrispondere una funzione ad ogni scelta. TESTO ESERCITAZIONE

Gli elementi di una coda con priorità hanno una chiave(key) che indica la precedenza nelleliminazione. Si elimina lelemento con priorità più elevata (o meno elevata). LE CODE CON PRIORITÀ L Heap non è lunico modo di implementare una coda con priorità, ma sicuramente è il migliore. RappresentazioneInserimentoCancellazione Array non ordinato (1)(n) Lista concatenata non ordinata (1)(n) Array ordinato (n)(1) Lista concatenata ordinata (n)(1) Heap massimo (log 2 n)

HEAP MASSIMO Definizione: Un albero massimo(max tree) è un albero in cui il valore della chiave di ogni nodo non è minore dei valori delle chiavi dei suoi figli (se esistono). Un heap massimo è un albero binario completo [1] [2] [3] [6] [4][5]

INSERIMENTO IN UN HEAP MASSIMO [1] [2] [3] [6] [4][5]

INSERIMENTO IN UN HEAP MASSIMO [1] [2] [3] [6] [4][5]

[1] [2] [3] [6] [4][5] INSERIMENTO IN UN HEAP MASSIMO

[1] [2] [3] [6] [4][5]

[1] [2] [6] [4][5] [1] [2] [3] [6] [4][5] INSERIMENTO IN UN HEAP MASSIMO

[1] [2] [3] [6] [4][5] INSERIMENTO IN UN HEAP MASSIMO

DICHIARAZIONI: #define MAX_ELEMENTI 200 #define HEAP_FULL(n) (n == MAX_ELEMENTI-1) #define HEAP_EMPTY(n) (!n) typedef struct elemento { int chiave; /*altri campi*/ }elemento; elemento heap[MAX_ELEMENTI]; int n = 0;

INSERIMENTO IN UN HEAP MASSIMO void insert_max_heap(elemento item, int *n){ //inserisce item in un heap massimo di dimensione corrente *n int i; if (HEAP_FULL(*n)) { fprintf(stderr, LHeap è pieno. \n); exit(1); } i = ++ (*n); while ((i != 1) && (item.chiave > heap[i/2].chiave)){ heap[i] = heap [i/2]; i /= 2; } heap[i] = item; } ALGORITMO:

INSERIMENTO IN UN HEAP MASSIMO Nellalgoritmo di inserimento per il nostro esercizio, il campo chiave è rappresentato da una stringa. Per il confronto tra nodi quindi invece degli operatori >(maggiore) o <(minore) utilizzeremo la funzione definita in string.h int strcmp( string s1, string s2). codice

CANCELLAZIONE IN UN HEAP MASSIMO [1] [2] [3] [4][5]

[1] [2] [3] [4] CANCELLAZIONE IN UN HEAP MASSIMO

[1] [2] [3] [4] CANCELLAZIONE IN UN HEAP MASSIMO

[1] [2] [3] [4] CANCELLAZIONE IN UN HEAP MASSIMO

elemento delete_max_heap(int *n) { //cancella elemento con il valore della chiave maggiore int padre, figlio; elemento item, temp; if (HEAP_EMPTY(*n)){ fprintf(stderr, Lheap è vuoto.\n); exit(1); } //salva il valore dellelemento con la chiave maggiore item = heap[1]; //usa lultimo elemento dellheap per modificare lheap temp = heap[(*n)--]; padre = 1; figlio = 2; }

CANCELLAZIONE IN UN HEAP MASSIMO while (figlio <= *n) { //trova il figlio più grande del padre corrente if (figlio < *n) && (heap[figlio].chiave < heap[figlio+1].chiave) figlio++; if (temp.chiave >= heap[figlio].chiave) break; //passa al livello inferiore heap[padre] = heap[figlio]; padre = figlio; figlio *= 2; } heap[padre] = temp; return item; }

CANCELLAZIONE IN UN HEAP MASSIMO Poiché laltezza di un heap con n elementi è log2(n+1), il ciclo while, sia per linserimento che per la cancellazione, verrà ripetuto O(log2n) volte. Da qui la complessità. Per la cancellazione da implementare nel nostro esercizio sarà necessario attuare delle modifiche per il confronto tra le chiavi dei nodi. codice

VISUALIZZAZIONE DI UN HEAP MASSIMO La visualizzazione può essere implementata con vari algoritmi: preorder, inorder, postorder, level_order. Nessuno di questi necessariamente ci visualizzerà gli elementi dellheap ordinati. eseguibile