Algoritmi e strutture dati Camil Demetrescu Irene Finocchi

  • Slides: 22
Download presentation
Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e Strutture

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e Strutture Dati Capitolo 4 Ordinamento: Heapsort Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Punto della situazione

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Punto della situazione • Problema dell’ordinamento: – Lower bound – (n log n) Albero di decisione – Upper bound – O(n log n) Mergesort (non in loco e complessità Θ(n log n)) – Algoritmi quadratici Insertion, Selection (in loco) • Proviamo a costruire un nuovo algoritmo ottimo, che ordini in loco e che costi O(n log n)) 2 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap. Sort •

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap. Sort • Stesso approccio incrementale (invertito) del Selection. Sort – seleziona gli elementi dal più grande al più piccolo… – … ma usa una struttura dati efficiente (heap binario), per cui l’estrazione del massimo avviene in tempo O(log n), invece che O(n) • Struttura dati (efficiente) – Organizzazione specifica (e memorizzazione) di una collezione di dati che consente di supportare le operazioni previste su di essi usando meno risorse di calcolo possibile • Obiettivo: progettare una struttura dati H su cui eseguire efficientemente le operazioni: – dato un array A, genera H – estrai il più grande oggetto da H – ripristina l’organizzazione specifica dei dati in H (ovvero mantieni invariate le proprietà strutturali di H) 3 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Alberi: qualche altra

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Alberi: qualche altra definizione albero d-ario: albero in cui tutti i nodi interni hanno (al più) d figli d=2 albero binario Un albero d-ario è completo se tutti nodi interni hanno esattamente d figli e le foglie sono tutte allo stesso livello 4 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap Binario •

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap Binario • Struttura dati heap (catasta) binario associata ad un insieme S: albero binario radicato con le seguenti proprietà: 1) Quasi completo, ovvero completo fino al penultimo livello, con tutte le foglie sull’ultimo livello compattate a sinistra 2) gli elementi di S sono memorizzati nei nodi dell’albero (ogni nodo v memorizza uno e un solo elemento, denotato con chiave(v)) 3) chiave(padre(v)) ≥ chiave(v) per ogni nodo v (proprietà di ordinamento parziale dell’heap) 5 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …un esempio 16

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano …un esempio 16 10 14 In questa direzione è presente un ordinamento 7 8 2 4 9 3 il massimo è contenuto nella radice! 1 In questa direzione non è presente un ordinamento 6 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Proprietà salienti degli

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Proprietà salienti degli heap 1) Ogni nodo interno contiene un valore maggiore o uguale del valore contenuto in tutti i suoi discendenti (deriva banalmente dalla proprietà di ordinamento parziale) 1. L’elemento massimo è contenuto nella radice 2) L’albero binario associato ad un heap di n elementi ha altezza (log n) 7 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Osservazione • La

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Osservazione • La struttura dati presentata è più propriamente denominata max-heap, per via del fatto che il massimo è contenuto nella radice • In alcuni contesti, avrà più senso definire la struttura duale min-heap, in cui la relazione di ordine parziale diventa: chiave(padre(v)) ≤ chiave(v) per ogni nodo v e conseguentemente la radice conterrà il minimo. 8 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Altezza di un

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Altezza di un heap binario • Abbiamo già dimostrato che un albero binario con k foglie in cui ogni nodo interno ha esattamente due figli, ha altezza h(k) log k. • Adesso vogliamo dimostrare che un albero binario quasi completo di n nodi in cui ogni nodo interno ha esattamente due figli (eccezion fatta per al più un nodo), ha altezza h: = h(n) = (log n) • Ma se l’albero è completo: n = 1 +2 + 22 + … + 2 h = =2 h · ((1/2)h + (1/2)h-1 + … +(1/2)+ 1)= =2 h · [1 -(1/2)h+1]/(1 -1/2) = 2 h · (2 -(1/2)h) = 2 h+1– 1 • Quindi, se l’albero è quasi completo: 2 h -1 < n < 2 h+1 – 1 h = log n 9 h = (log n) Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Rappresentazione con array

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Rappresentazione con array posizionale sin(i) = 2 i des(i) = 2 i+1 padre(i)= i/2 è sufficiente un vettore di dimensione n in generale dimensione vettore diverso da numero elementi nello pseudocodice numero oggetti indicato con heapsize[A] (che può essere minore della dimensione dell’array) 10 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano La procedura fix.

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano La procedura fix. Heap Se tutti i nodi di H tranne v soddisfano la proprietà di ordinamento parziale dell’heap (N. B. : significa che v è l’unico nodo il cui valore è MINORE di quello di almeno uno dei figli), possiamo ripristinarla come segue: fix. Heap(nodo v, heap H) if (v è una foglia) then return else sia u il figlio di v con chiave massima if ( chiave(v) < chiave(u) ) then scambia chiave(v) e chiave(u) fix. Heap(u, H) Tempo di esecuzione: O(h)=O(log n) 11 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano i=1 Fix. Heap

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano i=1 Fix. Heap - esempio 16 2 3 4 10 4 5 14 7 8 9 10 2 8 1 6 9 3 16 2 3 14 10 4 5 8 7 8 9 10 2 4 1 12 i=1 7 6 9 16 2 3 14 10 4 5 4 7 8 9 10 2 8 1 6 9 7 3 Copyright © 2004 - The Mc. Graw - Hill Companies, srl 7 3

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Pseudocodice di fix.

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Pseudocodice di fix. Heap per l’array posizionale fix. Heap (i, A) 1. s=sin(i) 2. d=des(i) 3. if (s heapsize[A] e A[s] >A[i]) 4. then massimo=s 5. else massimo=i 6. 7. 8. if (d heapsize[A] e A[d] >A[massimo]) then massimo=d if (massimo i) 9. then scambia A[i] e A[massimo] 10. fix. Heap(massimo, A) 13 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Costruzione dell’heap Algoritmo

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Costruzione dell’heap Algoritmo ricorsivo basato sul divide et impera heapify(heap H) if (H è vuoto) then return else heapify(sottoalbero sinistro di H) heapify(sottoalbero destro di H) fix. Heap(radice di H, H) 14 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Complessità heapify Sia

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Complessità heapify Sia h l’altezza di un heap con n elementi Sia n' n l’intero tale che un heap con n' elementi ha 1. altezza h 2. è completo fino all’ultimo livello Vale: T(n) T(n') e n' 2 n Tempo di esecuzione: T(n')= 2 T(n'/2)+O(log n') T(n') = (n') (caso 1 del Teorema Master: se f(n)=O(nlogba - ) per >0, allora T(n) = (n logba ) Quindi: T(n) T(n') = (n')= (2 n)= (n) T(n)=O(n) Ma ovviamente T(n) = Ω(n) T(n)=Θ(n) 15 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Estrazione del massimo

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Estrazione del massimo • Copia nella radice la chiave contenuta nella foglia più a destra dell’ultimo livello – nota: è l’elemento in posizione n (n: dimensione heap) • Rimuovi la foglia • Ripristina la proprietà di ordinamento a heap richiamando fix. Heap sulla radice Tempo di esecuzione: O(log n) 16 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano L’algoritmo Heap. Sort

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano L’algoritmo Heap. Sort • Costruisce un heap tramite heapify • Estrae ripetutamente il massimo per n-1 volte – ad ogni estrazione memorizza il massimo nella posizione dell’array che si è appena liberata 17 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati heap. Sort (A) 1. Heapify(A) 2. Heapsize[A]=n 3. for i=n

Algoritmi e strutture dati heap. Sort (A) 1. Heapify(A) 2. Heapsize[A]=n 3. for i=n down to 2 do 4. scambia A[1] e A[i] 5. Heapsize[A] = Heapsize[A] -1 6. fix. Heap(1, A) Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano (n) n-1 estrazioni di costo O(log n) ordina in loco in tempo O(n log n) 18 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempio Input: A=<4,

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempio Input: A=<4, 1, 3, 2, 16, 9, 10, 14, 8, 7> Heapify(A) A 0 =<16, 14, 10, 8, 7, 9, 3, 2, 4, 1> Scambia(A[1], A[n]) i=1 16 19 2 3 14 10 4 5 8 7 8 9 10 2 4 1 6 9 7 3 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap-size = Heap-size

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Heap-size = Heap-size -1 i=1 1 2 3 14 10 4 5 8 7 8 9 10 2 4 16 Fix. Heap(A, 1) 6 7 9 3 i=1 14 20 2 3 8 10 4 5 4 7 8 9 10 2 1 16 6 9 7 3 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Scambia(A[1], A[n-1]) 2

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Scambia(A[1], A[n-1]) 2 8 4 4 5 7 9 1 8 2 i=1 14 3 10 6 9 7 3 10 16 Heap-size = Heap-size -1 i=1 1 2 8 4 4 8 2 21 5 7 14 3 10 6 9 7 3 10 16 Copyright © 2004 - The Mc. Graw - Hill Companies, srl

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Fix. Heap(A, 1)

Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Fix. Heap(A, 1) i=1 10 2 8 4 4 8 2 5 7 14 3 9 6 1 7 3 2 10 16 E così via, sino ad arrivare a 1 2 3 4 7 8 9 10 14 16 Esercizio: E’ possibile definire un’istanza di input su cui l’heapsort costa o(n log n)? Risposta: NO: Si può dimostrare che nel caso migliore l’heapsort richiede circa ½ n log n operazioni Copyright © 2004 - The Mc. Graw - Hill Companies, srl 22