Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Documenti analoghi
Laboratorio di Algoritmi e Strutture Dati. Code con Priorità

Alberi n-ari: specifiche sintattiche e semantiche. Realizzazioni. Visita di alberi n-ari.

Insiemi Specifiche, rappresentazione e confronto tra realizzazioni alternative.

Esercitazione 6. Alberi binari di ricerca

Heap e code di priorità

Problemi di ordinamento

Algoritmi e Strutture Dati

Esercizio 1. E vero che in un AVL il minimo si trova in una foglia o nel penultimo livello? FB = -1. livello 0 FB = -1. livello 1 FB = -1.

Algoritmi e Strutture Dati

Albero binario. Alberi binari (introduzione) Terminologia. Alberi di ricerca binaria (BST)

Esercitazione 3. Heapsort

Alberi binari di ricerca

Heap, heapsort e code a priorità. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Lezione 12 Tabelle Hash

ADT Coda con priorità

heap heap heap? max- e min-heap concetti ed applicazioni heap = catasta condizione di heap non è una struttura ordinata

In questa lezione Alberi binari di ricerca: la cancellazione

Università degli Studi di L Aquila Facoltà di Scienze M.F.N. Corso di Laurea in Informatica. Modulo di Laboratorio di Algoritmi e Strutture Dati

Tipi di dato e Strutture dati elementari

lezione 9 min-heap binario Heap e Alberi posizionali generali

Alberi di ricerca. Alberi binari di ricerca. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem

Un esempio di mutua ricorsione

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Implementazione ADT: Alberi

Heap Ordinamento e code di priorità. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 9

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Alberi Binari di Ricerca

Algoritmi (9 CFU) (A.A ) Heap e Algoritmo HeapSort. Prof. V. Cutello Algoritmi 1

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei

Algoritmi e Strutture Dati. HeapSort

Algoritmi e Strutture Dati Laboratorio 15/12/2008. Daniele Loiacono

Alberi ed Alberi Binari

Algoritmi e strutture dati

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Introduzione. Heap-binomiali: un heap binomiale è un insieme di alberi binomiali.

Per semplicità eliminiamo le ripetizioni nell'albero.

23/10/2016. gli alberi. alcune definizioni. un esempio. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica.

Struttura di dati che può essere usata sia come dizionario, sia come coda con priorità

Esercizi su alberi binari

Alberi di ricerca binari

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Introduzione agli algoritmi Prova di esame del 30/6/2016 Prof.sse E. Fachini - R. Petreschi

Lezione 7 Alberi binari: visite e alberi di ricerca

Note per la Lezione 4 Ugo Vaccaro

Alberi Binari di Ricerca e Alberi Rosso-Neri

type keytype: integer; Tree: "Node; record Node = key: keytype; parent: "Node ; left: Tree; right: Tree; Figure 1: Tipi di dato per rappresentare albe

Esercizi Capitolo 6 - Alberi binari di ricerca

Pile Le pile: specifiche e realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile e procedure ricorsive

Memorizzazione di una relazione

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Capitolo 3: Gli alberi. Alberi n-ari

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Algoritmi e Strutture Dati

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

Alberi. Definizioni principali

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Corso di Fondamenti di Informatica

Algoritmi e Laboratorio a.a Lezioni

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre

Laboratorio di Python

Indici con gli alberi

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi binari e alberi binari di ricerca

Alberi binari e di ricerca. Parte 1 BST e GUI. Introduzione. 1. Minimo Antenato Comune. 2. Vistita in ampiezza

Alberi e alberi binari I Un albero è un caso particolare di grafo

Homework 2. 1 Il problema. Corso di Fondamenti di Informatica II. 26 Novembre L'Albero dei divisori

Esercitazioni di Algoritmi e Strutture Dati

Alberi di copertura. Mauro Passacantando. Dipartimento di Informatica Largo B. Pontecorvo 3, Pisa

Visite di alberi binari. Laboratorio di Algoritmi e Strutture Dati

Divide et impera su alberi

Laboratorio di Python

Algoritmi e Strutture Dati

Heap scenario. Ho un insieme dinamico di oggetti, ciascuno identificato con una priorità. (la priorità è semplicemente un numero);

Calcolare x n = x x x (n volte)

Laboratorio di Algoritmi e Strutture Dati

Alberi Binari di Ricerca

Alberi. Se x è il genitore di y, allora y è un figlio di x. Un albero binario è un albero in cui ogni nodo ha al massimo due figli.

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Problema del cammino minimo

Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree

In questa lezione Strutture dati elementari: Pila Coda

Alberto Montresor Università di Trento

Implementazione dell albero binario in linguaggio C++

La programmazione nel linguaggio C

T 1 =1. n 6 n. T n =3 T. Esercizio 1 (6 punti)

Verificare se un albero binario è bilanciato

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Algoritmi e Strutture Dati

In questa lezione. Heapsort. ordinamento con complessità, nel caso peggiore, O(nlogn) [CLRS01] cap. 6 da pag. 106 a pag. 114

Implementazione con alberi binari di ricerca

Grafi: visita generica

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Alberi binari (radicati e ordinati) della radice Il padre del nodo 5 e del nodo 3

Alberi binari. Alberi binari di ricerca

Transcript:

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro

CODE CON PRIORITA SONO UN CASO PARTICOLARE DI INSIEME, SUGLI ELEMENTI DEL QUALE E DEFINITA UNA RELAZIONE DI ORDINAMENTO TOTALE. E POSSIBILE INSERIRE UN NUOVO ELEMENTO O ESTRARRE L ELEMENTO MINIMO. LA SPECIFICA E SIMILE A QUELLA DEL TIPO DI DATO INSIEME. LE OPERAZIONI AMMESSE SONO: CREA INSERISCI MIN SECONDO GLI OPERATORI DEL TIPO DI DATO INSIEME, E LA NUOVA OPERAZIONE CANCELLAMIN CHE RIMUOVE L ELEMENTO MINIMO. IL NOME DERIVA DALL INTERPRETAZIONE CHE A E UNA CODA DI ELEMENTI CHE DEVONO ESSERE SERVITI RISPETTANDONE LA PRIORITA. PER SEMPLICITA SI FA COINCIDERE LE PRIORITA CON GLI ELEMENTI STESSI E SI ASSUMONO PRIORITA DISTINTE IN ACCORDO ALLA SPECIFICA DEL TIPO DI DATO INSIEME. IN GENERALE, LE PRIORITA POSSONO INTENDERSI COME PROPRIETA ASSOCIATE AGLI ELEMENTI CHE, TALVOLTA, POSSONO AVERE LA STESSA PRIORITA. ESEMPIO: PRONTO SOCCORSO Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 2

SPECIFICA SINTATTICA TIPI: PRIORICODA,TIPOELEM OPERATORI: CREAPRIORICODA: ( ) PRIORICODA INSERISCI: ( TIPOELEM, PRIORICODA ) ) PRIORICODA MIN: ( PRIORICODA ) TIPOELEM CANCELLAMIN: ( PRIORICODA ) PRIORICODA Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro

SPECIFICA SEMANTICA TIPI: PRIORICODA: INSIEME DI CODE CON PRIORITA CON ELEMENTI DI TIPO TIPOELEM OPERATORI: CREAPRIORICODA = A POST: A = INSERISCI (x,a) = A POST: A = A {x} (se x A allora A=A ) MIN(A) = x PRE: A POST: x A e x < y per ogni y A, x y CANCELLAMIN (A) = A PRE: A POST: A = A { x } con x = MIN(A) Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 4

RAPPRESENTAZIONE CON STRUTTURE SEQUENZIALI SI PUO RAPPRESENTARE UNA CODA CON PRIORITA DI n ELEMENTI UTILIZZANDO STRUTTURE SEQUENZIALI COME LISTE ORDINATE E LISTE NON ORDINATE. TUTTAVIA, POICHE LA CODA CON PRIORITÀ E COSTITUITA DA UN INSIEME DI ATOMI LINEARMENTE ORDINATI MA SENZA ALCUNA RELAZIONE STRUTTURALE SULL INSIEME DELLE POSIZIONI, LA SUA RAPPRESENTAZIONE E QUASI SEMPRE ASSOCIATA AD UN UNICO MODELLO CONCETTUALE: QUELLO DI ALBERO BINARIO. Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 5

RAPPRESENTAZIONE CON ALBERI BINARI GLI ELEMENTI DI UNA CODA CON PRIORITÀ C POSSONO ESSERE MEMORIZZATI NEI NODI DI UN ALBERO BINARIO B CHE DEVE AVERE LE PROPRIETÀ: L ALBERO B È QUASI PERFETTAMENTE BILANCIATO SE k È IL LIVELLO MASSIMO DELLE FOGLIE, ALLORA B HA ESATTAMENTE 2 K -1 NODI DI LIVELLO MINORE DI k ; TUTTE LE SUE FOGLIE DI LIVELLO k SONO ADDOSSATE A SINISTRA; L ALBERO B È PARZIALMENTE ORDINATO OGNI NODO CONTIENE UN ELEMENTO DI C CHE E MAGGIORE DI QUELLO DEL PADRE Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 6

ESEMPIO (CODA CON PRIORITA ): LA FIGURA MOSTRA UN ALBERO B, CHE VERIFICA LE PROPRIETÀ SUDDETTE E CONTIENE GLI ELEMENTI DELLA CODA CON PRIORITÀ C = { 5, 10, 8, 11, 1, 12, 9, 18,, 6 }.} IL LIVELLO MASSIMO DELLE FOGLIE DI B E E CI SONO 2 1 = 7 NODI DI LIVELLO 2. LE TRE FOGLIE DI LIVELLO SONO ADDOSSATE A SINISTRA. 5 9 6 8 1 12 11 18 10 FIG. 1 ALBERO QUASI PERFETTAMENTE BILANCIATO PARZIALMENTE ORDINATO Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 7

PER REALIZZARE GLI OPERATORI SI OSSERVI CHE: MIN RESTITUISCE IL CONTENUTO DELLA RADICE DELL'ALBERO B; INSERISCI DEVE INSERIRE UNA NUOVA FOGLIA IN MODO DA MANTENERE VERIFICATA LA PROPRIETÀ (1) E QUINDI FAR SALIRE L'ELEMENTO INTRODOTTO FINO A VERIFICARE LA PROPRIETÀ (2); CANCELLAMIN CANCELLAMIN PREVEDE LA CANCELLAZIONE DELLA FOGLIA DI LIVELLO MASSIMO PIÙ A DESTRA, IN MODO DA MANTENERE VERIFICATA LA PROPRIETÀ (1) ED IL REINSERIMENTO DEL CONTENUTO DELLA FOGLIA CANCELLATA NELL'ALBERO PARTENDO DALLA RADICE E FACENDOLO "SCENDERE" IN MODO CHE L'ALBERO COSÌ MODIFICATO VERIFICHI ANCHE LA PROPRIETÀ (2). Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 8

ESEMPIO (INSERISCI): VOLENDO INSERIRE L ELEMENTO 4 NELL ALBERO B DI FIG. 1, SI AGGIUNGE UN FIGLIO, CON 4, AL NODO 8, SI SCAMBIA 4 CON 8 E SUCCESSIVAMENTE 4 CON 5. 5 9 4 9 6 8 1 12 6 5 1 12 11 18 10 4 11 18 10 8 FIG. 2 INSERIMENTO DI 4 Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 9

5 5 9 6 9 6 8 1 12 10 8 1 12 11 18 10 11 18 FIG. CANCELLAZIONE DEL MINIMO VOLENDO CANCELLARE DALL ALBERO DI FIG. 1 SI CANCELLA LA FOGLIA CONTENENTE 10, SI RICOPIA 10 NELLA RADICE, SI SCAMBIA 10 CON 5 E SUCCESSIVAMENTE 10 CON 6. Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 10

OSSERVAZIONE: INSERISCI E CANCELLAMIN PREVEDONO DUE FASI, LA PRIMA DI MODIFICA DELLA STRUTTURA DELL'ALBERO (CONDIZIONATA DALLA PROPRIETÀ (1)), LA SECONDA DI AGGIUSTAMENTO DEGLI ELEMENTI IN BASE ALLE PRIORITÀ (PROPRIETÀ (2) ). NELLA PRIMA FASE SI DEVE NECESSARIAMENTE FARE RIFERIMENTO ALLA FOGLIA ALL'ESTREMA DESTRA DELL'ULTIMO LIVELLO: QUESTO EVIDENZIA L'UTILITÀ DI MANTENERE TRACCIA DI TALE FOGLIA E DI CONSEGUENZA UNA DEFINIZIONE PASCAL DEL TIPO PRIORICODA PUÒ ESSERE LA SEGUENTE: PrioriCoda=RECORD albero:binalbero; ultimo:nodo END; Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 11

ANALIZZIAMO PIÙ IN DETTAGLIO INSERISCI. LA PRIMA FASE, QUELLA DI MODIFICA DELLA STRUTTURA DELL'ALBERO, PREVEDE L'INSERIMENTO DI UNA FOGLIA DOPO L'ULTIMA. CASI PARTICOLARMENTE SEMPLICI SONO: L'ALBERO È VUOTO: BASTA AGGIUNGERE L'ELEMENTO COME RADICE; L'ALBERO È COSTITUITO DALLA SOLA RADICE: L'ELEMENTO VIENE AGGIUNTO COME FIGLIO SINISTRO DELLA RADICE; L'ULTIMA FOGLIA È UN NODO FIGLIO SINISTRO: L'ELEMENTO VIENE AGGIUNTO COME FRATELLO DESTRO. PER ESEMPIO: 5 5 16 7 5 16 7 5 16 9 22 16 9 22 11 Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 12

I FASE: MODIFICA DELLA STRUTTURA NEL CASO GENERALE LA FASE DI MODIFICA DELLA STRUTTURA PREVEDE UN PRIMO PASSO DI SALITA DA DESTRA" ED UNO SUCCESSIVO DI "DISCESA VERSO SINISTRA ALLO SCOPO DI INDIVIDUARE DOVE ATTACCARE IL NUOVO NODO. IL PROCESSO DI SALITA (SI PASSA DA FIGLIO A PADRE) PROSEGUE FINTANTOCHÉ IL NODO CONSIDERATO È UN FIGLIO DESTRO (LIVELLO COMPLETO) OPPURE NON È STATA RAGGIUNTA LA RADICE; MENTRE IL PROCESSO DI DISCESA (SI PASSA DAL PADRE AL FIGLIO SINISTRO) VIENE ITERATO FINO A QUANDO NON SI TROVA UNA FOGLIA. SOLO A QUESTO PUNTO SI PUÒ AGGIUNGERE IL NUOVO NODO COME FOGLIA. NEL CASO IL LIVELLO NON SIA COMPLETO IL NUOVO NODO VERRA AGGIUNTO A COMPLETARLO. 16 5 16 5 1 CASO 9 Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 1

1 CASO 7 5 16 22 9 18 7 5 16 22 9 18 1 NEL SECONDO CASO, O NON SI GIUNGE ALLA RADICE, OPPURE SI GIUNGE ALLA RADICE DAL FIGLIO SINISTRO: SI SCENDE PARTENDO DAL FRATELLO DESTRO DELL'ULTIMO NODO CHE È STATO VISITATO IN SALITA COME FIGLIO DESTRO. 7 5 7 5 16 9 16 9 22 2 CASO Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 14

2 CASO 7 5 7 5 1 9 22 11 1 9 22 11 16 18 16 18 20 Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 15

II FASE: AGGIUSTAMENTO NELLA SECONDA FASE DI INSERISCI, CIOÈ L'AGGIUSTAMENTO DEGLI ELEMENTI IN BASE ALLE PRIORITÀ, SI PARTE DALLA FOGLIA INSERITA E SI CONFRONTA IL VALORE DI PRIORITÀ DEL NODO FIGLIO CON QUELLO DEL NODO PADRE: I VALORI VENGONO SCAMBIATI SE NON SODDISFANO LA PROPRIETÀ (2) E QUINDI SI RISALE L'ALBERO VERSO LA RADICE. QUESTO PROCESSO DI CONFRONTO-SCAMBIO SI RIPETE FINO A QUANDO NON SI TROVANO DUE ELEMENTI CHE SODDISFANO GIÀ LA PROPRIETÀ (2) OPPURE NON SI ARRIVA ALLA RADICE. 5 16 16 5 16 5 9 5 9 16 Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 16

L ALGORITMO DI INSERISCI: if l'albero è vuoto then inserisci l'elemento come radice else if l'albero ha solo la radice (che coincide con ultimo ) then inserisci l'elemento come figlio sinistro della radice else if ultimo è un figlio sinistro then inserisci l'elemento come suo fratello destro else while il nodo è un figlio destro risali if il nodo attuale non è la radice then passa al fratello destro scendi verso sinistra fino ad arrivare ad una foglia inserisci l'elemento come figlio sinistro ultimo diventa la foglia inserita while il nodo corrente non è la radice e la sua priorità è minore di quella del padre scambia il contenuto di padre e figlio Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 17

ANALIZZIAMO ORA CANCELLAMIN. LA PRIMA FASE, QUELLA DI MODIFICA DELLA STRUTTURA DELL'ALBERO, PREVEDE LA CANCELLAZIONE DELLA FOGLIA DI LIVELLO MASSIMO PIÙ A DESTRA, MENTRE NELLA SECONDA FASE VA RISISTEMATO IL CONTENUTO. CASI PARTICOLARMENTE SEMPLICI SONO: L'ALBERO È COSTITUITO DALLA SOLA RADICE: SI CANCELLA L'INTERO ALBERO E NON È NECESSARIA LA SECONDA FASE; SI TRATTA DELL ULTIMA FOGLIA O DI UN NODO FIGLIO DESTRO: DOPO LA CANCELLAZIONE L'ULTIMA FOGLIA DIVENTA IL NODO FRATELLO SINISTRO; PER ESEMPIO 20 18 18 22 20 22 Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 18

IL CASO PIU GENERALE PREVEDE SEMPRE UNA PRIMA FASE DI MODIFICA ED UNA DI AGGIUSTAMENTO. I FASE: MODIFICA SI PROCEDE ATTRAVERSO PASSI DI "SALITA DA SINISTRA" E SUCCESSIVI PASSI DI "DISCESA VERSO DESTRA" ALLA RICERCA DELLA NUOVA ULTIMA FOGLIA. IL PROCESSO DI SALITA (SI PASSA DA FIGLIO A PADRE) PROSEGUE FINTANTOCHÉ IL NODO CONSIDERATO È UN FIGLIO SINISTRO OPPURE NON È STATA RAGGIUNTA LA RADICE, MENTRE IL PROCESSO DI DISCESA (SI PASSA DAL PADRE AL FIGLIO DESTRO) VIENE ITERATO FINO A QUANDO NON SI TROVA UNA FOGLIA. QUELLO CHE DIFFERENZIA I DUE CASI È SE IL LIVELLO MASSIMO VIENE O MENO SVUOTATO. NEL PRIMO CASO SI GIUNGE ALLA RADICE DAL FIGLIO SINISTRO: SI SCENDE QUINDI PARTENDO DALLA RADICE. 16 22 16 18 20 18 20 22 Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 19

16 7 9 11 7 9 11 1 18 22 17 1 18 22 17 16 Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 20

22 11 10 20 16 18 22 16 11 10 20 18 7 5 20 7 5 1 9 22 11 1 9 22 11 16 18 20 16 18 NEL SECONDO CASO O NON SI GIUNGE ALLA RADICE, OPPURE SI GIUNGE ALLA RADICE DAL FIGLIO DESTRO: SI SCENDE PARTENDO DAL FRATELLO SINISTRO DELL'ULTIMO NODO CHE È STATO VISITATO IN SALITA COME FIGLIO DESTRO. Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 21

II FASE: AGGIUSTAMENTO L'AGGIUSTAMENTO DEGLI ELEMENTI AVVIENE IN BASE ALLE PRIORITÀ, SI PARTE DALLA RADICE E SI RICERCA LA POSIZIONE DOVE INSERIRE IL CONTENUTO NELLA FOGLIA CANCELLATA IN MODO CHE SIA SODDISFATTA LA PROPRIETÀ (2). PER OGNI NODO ESAMINATO SE NE CONSIDERANO I FIGLI E, SE IL CONTENUTO DEL NODO CANCELLATO HA PRIORITÀ MINORE, SI SCRIVE NEL NODO ATTUALE IL CONTENUTO DEL FIGLIO CON PRIORITÀ MAGGIORE, VALUTANDO SE LA POSIZIONE DI TALE FIGLIO PUÒ ACCOGLIERE IL CONTENUTO DEL NODO CANCELLATO. QUESTO PROCESSO SI RIPETE FINO A QUANDO NON SI TROVA UNA CONFIGURAZIONE CHE SODDISFA GIÀ LA PROPRIETÀ (2) E QUINDI IL CONTENUTO DEL NODO CANCELLATO HA PRIORITÀ MAGGIORE DI ENTRAMBI I FIGLI DEL NODO ATTUALE, OPPURE NON SI ARRIVA AL LIVELLO FOGLIARE. SI OSSERVI CHE, COME CONSEGUENZA DELLA PROPRIETÀ (1), IL CONFRONTO COINVOLGE ENTRAMBI I FIGLI, TRANNE IL CASO IN CUI SI È RAGGIUNTO IL PENULTIMO LIVELLO, DOVE PUÒ ESSERCI UN NODO CON IL SOLO FIGLIO SINISTRO. Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 22

16 7 16 9 9 9 11 9 11 1 11 1 18 22 17 1 18 22 17 16 18 22 17 20 9 11 20 11 1 11 1 11 1 20 16 18 22 16 18 22 16 18 22 Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 2

L ALGORITMO DI CANCELLAMIN: if l'albero non è vuoto then if l'albero ha solo la radice then cancella l'intero albero else copia il contenuto dell'ultima foglia nella radice cancellala /* inizio della fase di modifica della struttura */ if ultimo è un figlio destro then il nuovo ultimo sarà il fratello sinistro else while il nodo è un figlio sinistro risali if non si è raggiunta la radice then passa al fratello sinistro scendi verso destra fino ad arrivare ad una foglia impostala come nuovo ultimo Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 24

/* inizio della fase di aggiornamento delle priorità partendo dalla radice */ while il nodo attuale non è una foglia e la sua priorità è minore di quella dei suoi figli do if sono presenti entrambi i figli then scegli il figlio con priorità maggiore else seleziona l unico figlio (che è il sinistro) scambia il contenuto del nodo attuale con quello del figlio selezionato spostati sul figlio selezionato Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 25

REALIZZAZIONE CON HEAP GLI ELEMENTI DI B POSSONO ESSERE DISPOSTI IN UN VETTORE H (LO HEAP) NELL ORDINE IN CUI SI INCONTRANO VISITANDO L ALBERO PER LIVELLI CRESCENTI ED ESAMINANDO DA SINISTRA VERSO DESTRA I NODI ALLO STESSO LIVELLO. IN TAL CASO, SI HA CHE: H[1] E L ELEMENTO CONTENUTO NELLA RADICE DI B; H[2i] E H[2i+1] SONO GLI ELEMENTI CORRISPONDENTI AL FIGLIO SINISTRO E AL FIGLIO DESTRO DI H[i] SE B CONTIENE n ELEMENTI, ALLORA IL FIGLIO SINISTRO (DESTRO) DI H[i] NON ESISTE NELL ALBERO SE E SOLO SE 2i > n (2i+1 > n). n INOLTRE, PER LA PROPRIETÀ (2), SE IL FIGLIO SINISTRO (DESTRO) DI H[i] ESISTE, ALLORA H[2i] > H[i] (H[2i+1] > H[i ]).] ESEMPIO (HEAP): GLI ELEMENTI DELL ALBERO B DI FIG. 1 SI MEMORIZZANO NEL VETTORE H COME SEGUE: H[1] =, H[2] = 5, H[] = 9, H[4] = 6, H[5] = 8, H[6] = 1, H[7] = 12, H[8] = 11, H[9] = 18, H[10] = 10. Algoritmi e Strutture Dati A.A. 1/14, N. Di Mauro 26