Ordinamenti per confronto: albero di decisione

Documenti analoghi
Algoritmi e Strutture Dati. Capitolo 4 Ordinamento

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

UNIVERSITA DEGLI STUDI DI PERUGIA

Albero di Riscorsione

Esercizi per il corso di Algoritmi e Strutture Dati

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

Esercizi di Algoritmi e Strutture Dati

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort

IL TEOREMA DEGLI ZERI Una dimostrazione di Ezio Fornero

Algoritmi e Strutture Dati

Approssimazione di dati e funzioni

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Algoritmi e Strutture Dati

Alberi ed Alberi Binari

Algoritmi e Strutture Dati. HeapSort

Problemi, istanze, soluzioni

4.1 Modelli di calcolo analisi asintotica e ricorrenze

Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla

Tempo e spazio di calcolo

Modulo 1 Concetti di base della Tecnologia dell Informazione

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

Esercitazione: La distribuzione NORMALE

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

Geometria della programmazione lineare

Informatica Teorica. Macchine a registri

Piccolo teorema di Fermat

Alberi binari e alberi binari di ricerca

Algoritmi e Strutture Dati Esercizi Svolti. Giuseppe Persiano Dipartimento di Informatica ed Appl. Renato M. Capocelli Università di Salerno

Tempo e spazio di calcolo (continua)

04 - Logica delle dimostrazioni

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

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Algoritmi e Strutture Dati

Alberi Binari di Ricerca

RAPPRESENTAZIONE DELLE INFORMAZIONI

8. Completamento di uno spazio di misura.

Un ripasso di aritmetica: Conversione dalla base 10 alla base 2

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015

Heap e code di priorità

Note per la Lezione 4 Ugo Vaccaro

Strutture dati e loro organizzazione. Gabriella Trucco

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Algoritmi e soluzione di problemi

= < < < < < Matematica 1

L algoritmo AKS. L algoritmo AKS. Seminario per il corso di Elementi di Algebra Computazionale. Oscar Papini. 22 luglio 2013

In molte applicazioni sorge il problema di sapere in quanti modi possibili si può presentare un certo fenomeno.

ADT Coda con priorità

Alberi binari di ricerca

Programmazione dinamica

Matematica. Corso integrato di. per le scienze naturali ed applicate. Materiale integrativo. Paolo Baiti 1 Lorenzo Freddi 1

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale

Operatori di relazione

Codifica dell Informazione

Gara Matematica. Dipartimento di Matematica Ulisse Dini. Viale Morgagni 67/a Firenze. Soluzioni edizione 2011

Algoritmi e Strutture Dati

Codifica binaria. Rappresentazioni medianti basi diverse

Luca Costabile Esercizi di Logica Matematica Dispensa Calcolo Proposizionale 1

Esercizi Capitolo 6 - Alberi binari di ricerca

Caratteristiche di un linguaggio ad alto livello

I.4 Rappresentazione dell informazione

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

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

Complessità Computazionale

Codifica dell Informazione

Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi

Algoritmi e Strutture dati a.a. 2012/2013

Rappresentazione dell Informazione

Algoritmi e Strutture Dati

Introduzione alla tecnica di Programmazione Dinamica

Strutture di accesso ai dati: B + -tree

Distribuzione di frequenza e rappresentazioni grafiche

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso

LEZIONE 4. { x + y + z = 1 x y + 2z = 3

Quali condizionisi si possono richiedere sulla funzione interpolante?

Addizionatori: metodo Carry-Lookahead. Costruzione di circuiti combinatori. Standard IEEE754

Il codice di Sarngadeva

Rappresentazione di Numeri Reali. Rappresentazione in virgola fissa (fixed-point) Rappresentazione in virgola fissa (fixed-point)

Transcript:

Ordinamenti per confronto: albero di decisione Albero di decisione = rappresentazione grafica di tutte le possibili sequenze di confronti eseguite da un algoritmo assegnato di ordinamento per confronto quando opera su un input di una data dimensione Assunzioni semplificative: tutti gli elementi di input sono distinti ( i confronti a i = a j sono inutili) tutti i confronti hanno la forma a i a j Cammino dalla radice a una foglia: una esecuzione dell algoritmo di ordinamento Nodo interno: esecuzione di un confronto a i a j (etichetta a i : a j ) per qualche i,j tale che 1 i,j n Foglia: permutazione degli indici dell input ( n foglie n permutazioni dell input, n!) che costituisce la soluzione per l esecuzione dell algoritmo che porta a tale foglia Altezza dell albero di decisione = n di confronti che l algoritmo di ordinamento esegue nel caso pessimo Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 1

Albero di decisione di INSERTION-SORT a 1 :a 2 > <1,2,3> a 2 :a 3 > a 1 :a 3 > a 1 :a 3 <2,1,3> a 2 :a 3 > > <1,3,2> <3,1,2> <2,3,1> <3,2,1> Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 2

Ordinamenti per confronto: limite inferiore per il caso pessimo Limite inferiore sull altezza degli alberi di decisione = limite inferiore sul tempo di esecuzione di qualunque algoritmo di ordinamento per confronto Teorema: qualunque albero di decisione che ordina n elementi ha altezza Ω(nlgn). Dimostrazione n! 2 h (cioè n permutazioni n foglie di un albero binario di altezza h) h lg(n!) (per l approssimazione di Stirling, lg(n!) = Θ(nlgn)) h Θ(nlgn) h = Ω(nlgn) Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 3

Ordinamenti per confronto: limite inferiore per il caso pessimo (cont.) Corollario: MERGE-SORT e HEAPSORT asintoticamente ottimi sono ordinamenti per confronto Dimostrazione Il limite superiore del tempo di esecuzione dei due algoritmi coincide con quello inferiore del caso pessimo descritto dal teorema Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 4

COUNTING-SORT Ipotesi: ognuno degli n elementi di input è un intero che cade nell intervallo da 1 a k, per qualche intero k L algoritmo determina, per ogni elemento x dell array di input, il n di elementi x e poi usa questa informazione per porre x nella posizione che gli compete nell array di output B (con qualche aggiustamento se esistono più elementi uguali) Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 5

COUNTING-SORT (cont.) COUNTING-SORT(A,B,k) 0 l array B ha le stesse dimensioni di A e mantiene l output ordinato 1 for i 1 to k 2 do C[i] 0 3 l array C[1.. k] fornisce la memoria di lavoro temporanea 4 for j 1 to length[a] 5 do C[A[j]] C[A[j]]+1 6 C[i] contiene ora il numero di elementi uguali a i 7 for i 2 to k 8 do C[i] C[i] + C[i 1] 9 C[i] contiene ora il numero di elementi i 10 for j length[a] downto 1 11 do B[C[A[j]]] A[j] 12 C[A[j]] C[A[j]] 1 O(k) O(n) O(k) O(n) Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 6

Esempio: COUNTING-SORT A 1 2 3 4 5 6 7 3 6 3 6 4 1 2 C 1 2 3 4 5 6 1 1 2 1 0 2 C 1 2 3 4 5 6 1 2 4 5 5 7 B 1 2 3 4 5 6 7 2 C 1 2 3 4 5 6 1 1 4 5 5 7 Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 7

Esempio: COUNTING-SORT (cont.) B C 1 2 3 4 5 6 7 1 2 1 2 3 4 5 6 0 1 4 5 5 7 B C 1 2 3 4 5 6 7 1 2 4 1 2 3 4 5 6 0 1 4 4 5 7 Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 8

Esempio: COUNTING-SORT (cont.) B C 1 2 3 4 5 6 7 1 2 4 6 1 2 3 4 5 6 0 1 4 4 5 6 B C 1 2 3 4 5 6 7 1 2 3 4 6 1 2 3 4 5 6 0 1 3 4 5 6 Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 9

Esempio: COUNTING-SORT (cont.) B C 1 2 3 4 5 6 7 1 2 3 4 6 6 1 2 3 4 5 6 0 1 3 4 5 5 B C 1 2 3 4 5 6 7 1 2 3 3 4 6 6 1 2 3 4 5 6 0 1 2 4 5 5 Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 10

Analisi di COUNTING-SORT T(n) = O(k+n) Se k = O(n), come di solito accade, T(n) = O(n) L algoritmo è stabile, cioè elementi con lo stesso valore compaiono nell array di output nello stesso ordine in cui compaiono in quello di input (proprietà molto importante quando l ordinamento avviene in base a una chiave ma ciascun elemento è un intero record) Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 11

RADIX-SORT Scheda perforata: 12 righe * 80 colonne, dove ogni elemento della matrice può essere perforato Rappresentazione di un n in base 10: sono usate solo 10 righe e 1 colonna per ogni cifra per rappresentare un n di d cifre si usano d colonne La macchina ordinatrice di schede può esaminare una sola colonna per volta Per ordinare dei numeri, si ordina prima secondo la cifra meno significativa, e poi via via in modo stabile fino ad arrivare alla più significativa L algoritmo può essere usato anche per ordinare record in info con chiavi multiple Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 12

RADIX-SORT (cont.) RADIX-SORT(A,d) 1 for i 1 to d 2 do usa un ordinamento stabile per ordinare l array A sulla cifra i Esempio O(k+n) (se COUNTING-SORT) 200 200 200 122 451 200 200 200 418 451 418 200 122 122 418 222 222 222 122 418 200 418 222 418 418 418 451 451 A: situazione iniziale i = 1 i = 2 i = d Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 13

Analisi di RADIX-SORT T(n) dipende da quale ordinamento stabile viene usato Se ogni cifra è nell intervallo da 1 a k, con k non troppo grande, viene scelto COUNTING-SORT (che però non ordina in loco ) T(n) = O(dn+dk) = O(n+k) = O(n) se d è costante se k = O(n) Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 14

BUCKET-SORT Ipotesi: l input è generato da un processo casuale che distribuisce gli n elementi in modo uniforme nell intervallo [0,1) L algoritmo divide l intervallo [0,1) in n sottointervalli di uguale dimensione, detti bucket (secchi), in cui distribuisce gli elementi, poi ordina gli elementi di ogni bucket BUCKET-SORT(A) 1 n length[a] 2 richiede un array ausiliario B[0.. n 1] di liste concatenate 3 for i 1 to n 4 do inserisci A[i] nella lista B[ na[i] ] 5 for i 0 to n 1 6 do ordina la lista B[i] con INSERTION-SORT 7 concatena le liste B[0], B[1],.., B[n 1] in quest ordine O(n) O(n) nel caso peggiore Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 15

Esempio: BUCKET-SORT Situazione al termine dell esecuzione dell algoritmo A B 1.78 0 / 2.17 1.12.17 / 3.39 2.21.23.26 / 4.26 3.39 / 5.72 4 / 6.94 5 / 7.21 6.68 / 8.12 7.72.78 / 9.23 8 / 10.68 9.94 / Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 16

Prova di correttezza di BUCKET-SORT CASO 1 Ipotesi: A[i] e A[j], i j, sono due elementi distinti che cadono nello stesso bucket B[k] Tesi (da dimostrare): A[i] e A[j] compaiono nella sequenza di output in ordine appropriato Dimostrazione: la tesi è dimostrata perché il contenuto di B[k] viene ordinato con INSERTION-SORT Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 17

Prova di correttezza di BUCKET-SORT (cont.) CASO 2 Ipotesi: A[i] e A[j], i j, sono due elementi distinti che cadono in due bucket distinti, rispettivamente B[i ] e B[j ], i < j ( nella sequenza di output A[i] precede A[j]) Tesi: A[i] A[j] Dimostrazione: assumiamo, per assurdo, la negazione della tesi, cioè A[i] > A[j]; se ciò è vero, segue che i = na[i] > na[j] = j che contraddice l ipotesi la tesi è dimostrata Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 18

BUCKET-SORT: caso medio n i = variabile casuale che rappresenta il n di elementi memorizzati nel bucket B[i] Valor medio Tempo di esecuzione della linea 6 : Tempo di esecuzione delle linee 5 + 6: [ ( )] ( [ ] 2 2 O n O E ) E = n 1 i= 0 i n i ( [ ]) [ ] 2 2 O E n O( n) O E n n 1 = i i = i= 0 E 2 2 [ n ] = Var[ n ] + E [ n ] i i i = 1 1 n + 1 2 = 2 1 n T(n) = O(n) La distribuzione di n i è binomiale Marina Zanella Algoritmi e strutture dati Ordinamento in tempo lineare 19