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

Documenti analoghi
Quicksort Moltiplicazione di interi Master Theorem Valutazione del tempo di esecuzione di algoritmi iterativi e ricorsivi

Esercizi per il corso di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Ordinamenti: mergesort e quicksort

Esercizi Capitolo 6 - Alberi binari di ricerca

Note su quicksort per ASD (DRAFT)

Algoritmi e Strutture Dati

Corso di Tecniche di Programmazione

Algoritmi e Strutture Dati

4.1 Modelli di calcolo analisi asintotica e ricorrenze

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Algoritmi e strutture dati

Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano. Usa la tecnica del divide et impera:

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento

Tecnica Divide et Impera

Algoritmi e Strutture Dati

Algoritmi di ordinamento

Algoritmi e Strutture Dati

Quick Sort. PARTITION(A,p,r) risistema il sottoarray A[p...r] e riporta l indice q:

Algoritmi di Ricerca. Esempi di programmi Java

Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente

Esercizi per il corso di Algoritmi, anno accademico 2014/15

AA LA RICORSIONE

QUICKSORT. Basato sul paradigma divide-et-impera (come MERGE-SORT)

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

GESTIONE INFORMATICA DEI DATI AZIENDALI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

Introduzione alla tecnica di Programmazione Dinamica

Algoritmi di ordinamento

Algoritmi e strutture dati. Codici di Huffman

Gli algoritmi ricorsivi di ordinamento. Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Esercizi Capitolo 2 - Analisi di Algoritmi

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Tecniche avanzate di sintesi di algoritmi: Programmazione dinamica Algoritmi greedy

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

Esercitazione 2. Quicksort

Esercizi per il corso di Algoritmi, anno accademico 2011/12

Semantica Assiomatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Alberi binari di ricerca

QuickSort (1962, The Computer Journal)

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

ALGORITMI DI ORDINAMENTO E RICERCA BINARIA. Docente: Giorgio Giacinto AA 2008/2009. problema dell ordinamento in modi diversi

ALGORITMI Docente: Prof. Domenico Cantone

10 - Programmare con gli Array

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento: Selection e Insertion Sort

B-Tree. Struttura dati usata in applicazioni che necessitano di gestire insiemi di chiavi ordinate Una variante (B+-Tree) è diffusa in:

Descrizione di un algoritmo

Semplici Algoritmi di Ordinamento

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo

Ricerca binaria. Operazione dominante: confronto

Albero di Riscorsione

Sono casi particolari di MCF : SPT (cammini minimi) non vi sono vincoli di capacità superiore (solo x ij > 0) (i, j) A : c ij, costo di percorrenza

Lezione 8. La macchina universale

Elementi di Informatica

Codifica: dal diagramma a blocchi al linguaggio C++

Crittografia. Primalità e Fattorizzazione. Corso di Laurea Specialistica. in Informatica

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006

Corso di Algoritmi e Strutture Dati Informatica per il Management Prova Scritta, 25/6/2015

Algoritmi e Strutture Dati

QuickSort (1962, The Computer Journal)

Introduzione al MATLAB c Parte 2

L algoritmo di ricerca binaria. Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala

Algoritmi basati sulla tecnica Divide et Impera

Laboratorio di Algoritmi

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

Sommario della lezione

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Programmazione dinamica

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Esempi di algoritmi. Lezione III

Ricerche, ordinamenti e fusioni. 5.1 Introduzione. 5.2 Ricerca completa

Algoritmi e Strutture Dati

Analisi algoritmi ricorsivi e relazioni di ricorrenza

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Appendice B. Algoritmi e Complessità

ALGORITMI e PROGRAMMI Programmazione: Lavoro che si fa per costruire sequenze di istruzioni (operazioni) adatte a svolgere un dato calcolo

Esercizi Capitolo 5 - Alberi

Come ragiona il computer. Problemi e algoritmi

Matematica in laboratorio

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Esercitazione Informatica I AA Nicola Paoletti

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Primi esercizi per gli studenti del corso di Statistica ed Elementi di Probabilita

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Verifica parte IIA. Test (o analisi dinamica) Mancanza di continuità. Esempio

Introduzione al Corso di Algoritmi

Appunti sulla Macchina di Turing. Macchina di Turing

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Laboratorio di programmazione

Alberi binari di ricerca

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Transcript:

Due algoritmi di ordinamento basati sulla tecnica Divide et Impera: Mergesort e Quicksort (13 ottobre 2009, 2 novembre 2010)

Ordinamento INPUT: un insieme di n oggetti a 1, a 2,, a n presi da un dominio totalmente ordinato secondo OUTPUT: una permutazione degli oggetti a 1, a 2,, a n tale che a 1 a 2 a n Applicazioni: Ordinare alfabeticamente lista di nomi, o insieme di numeri, o insieme di compiti d esame in base a cognome studente Velocizzare altre operazioni (per es. è possibile effettuare ricerche in array ordinati in tempo O(log n) ) Subroutine di molti algoritmi (per es. greedy).

Algoritmi per l ordinamento Data l importanza, esistono svariati algoritmi di ordinamento, basati su tecniche diverse: Insertionsort Selectionsort Heapsort Mergesort Quicksort Bubblesort Countingsort.. Ognuno con i suoi lati positivi e negativi. Il Mergesort e il Quicksort sono entrambi basati sulla tecnica Divide et Impera, ma risultano avere differenti prestazioni

Mergesort Dato un array di n elementi I ) Divide: trova l indice della posizione centrale e divide l array in due parti ciascuna con n/2 elementi (più precisamente n/2 e n/2 ) II) Risolve i due sottoproblemi ricorsivamente III) Impera: fonde i due sotto-array ordinati usando la procedura Merge T(n) = (1) + 2T(n/2) + (n) Vedremo che la soluzione è T(n) = (n log n)

Nota: Il tempo di esecuzione di Merge è (n) (e non solo O(n)). Infatti: nel caso peggiore faremo O(n) confronti: 1 3 5 2 4 6 nel caso migliore faremo (n) confronti 1 2 3 4 5 6 Ricorda: Il tempo di esecuzione di un algoritmo è ( f(n) ) se nel caso peggiore è O(f(n)) e nel caso migliore è (f(n)) Il tempo di esecuzione di Mergesort è ( n log n)

Quicksort Dato un array di n elementi I ) Divide: scegli un elemento x dell array (detto pivot o perno) e partiziona la sequenza in elementi x ed elementi x II) Risolvi i due sottoproblemi ricorsivamente III) Impera: restituisci la concatenazione dei due sotto-array ordinati 5 3 2 6 4 1 3 7 x=5 3 3 2 1 4 6 5 7 1 2 3 3 4 5 6 7 1 2 3 3 4 5 6 7

Scelta del pivot L algoritmo funziona per qualsiasi scelta (primo / ultimo / ), ma se voglio algoritmo deterministico devo fissare la scelta; nel seguito sceglierò il primo. Altrimenti: scelgo random e avrò algoritmi randomizzati (vedi Kleinberg, Tardos)

Partizionamento Partiziona l array in elementi x ed elementi x Banalmente: scorro l array da 1 ad n e inserisco gli elementi pivot in un nuovo array e quelli del pivot in un altro nuovo array Però: 1) avrei bisogno di array ausiliari 2) di che dimensione? I due sotto-array hanno un numero variabile di elementi

Partizione in loco Partition: pivot = A[1] Scorri l array da destra verso sinistra (con un indice j) e da sinistra verso destra (con un indice i) : da destra verso sinistra, ci si ferma su un elemento del pivot da sinistra verso destra, ci si ferma su un elemento del pivot; Scambia gli elementi Riprendi la scansione finché i e j si incrociano

Partition (A, p, r) x = A[p] i = p-1 j = r+1 while True do repeat j=j-1 until A[j] x repeat i=i+1 until A[i] x if i < j then scambia A[i] A[j] else return j

i Partizione in loco: un esempio 5 3 2 6 4 1 3 7 5 3 2 6 4 1 3 7 i j 3 3 2 6 4 1 5 7 i j 3 3 2 6 4 1 5 7 i j 3 3 2 1 4 6 5 7 i j 3 3 2 1 4 6 5 7 j i 5 5 j pivot = 5 Scambia 3 con 5 Scambia 1 con 6 Restituisce q = j

Correttezza di Partition Perché funziona? Ad ogni iterazione (quando raggiungo il while): la parte verde di sinistra (da p ad i) contiene elementi 5; la parte verde di destra (da j a r) contiene elementi 5. Tale affermazione è vera all inizio e si mantiene vera ad ogni iterazione (per induzione) Analisi Partition Il tempo di esecuzione è (n)

Quicksort (A, p, r) if p < r then q = Partition (A,p,r) Quicksort(A, p, q) Quicksort(A, q+1, r) Correttezza: la concatenazione di due array ordinati in cui l array di sinistra contiene elementi minori o uguali degli elementi dell array di destra è un array ordinato Analisi: T(n) = (n) + T(k) + T(n-k) Se k sono gli elementi da p a q (e n-k i rimanenti da q+1 a r) con 1 k n-1

Analisi Quicksort Un primo caso: ad ogni passo il pivot scelto è il minimo o il massimo degli elementi nell array (la partizione è 1 n-1 ): T(n) = T(n-1) + T(1) + (n) essendo T(1)= (1) T(n) = T(n-1) + (n) La cui soluzione (vedremo) è T(n) = (n 2 ) Si può dimostrare che questo è il caso peggiore; quindi per il Quicksort: T(n) = O(n 2 )

Un esempio del caso peggiore del Quicksort Un array ordinato 1 2 3 4 5 6 x = 1 1 2 3 4 5 6 x = 2 2 3 4 5 6 x = 3 3 4 5 6 x = 4 4 5 6 x = 5 5 6

Analisi Quicksort Un altro caso: ad ogni passo il pivot scelto è la mediana degli elementi nell array (la partizione è n/2 n/2 ): T(n) = 2 T(n/2) + (n) La cui soluzione è T(n) = (n log n) (è la stessa relazione di ricorrenza del Mergesort) Si può dimostrare che questo è il caso migliore; quindi per il Quicksort: T(n) = (n log n) Riassumendo: T(n) = O(n 2 ) e T(n) = (n log n) Il caso migliore è diverso dal caso peggiore quindi T(n) non è di nessuna funzione

Quicksort vs Mergesort

Da ricordare Esistono algoritmi di ordinamento con tempo nel caso peggiore (n 2 ) (nlogn) Esistono anche algoritmi di ordinamento con tempo nel caso peggiore (n) ma non sono basati sui confronti e funzionano solo sotto certe ipotesi Inoltre si può dimostrare che tutti gli algoritmi di ordinamento basati sui confronti richiedono Ω(n log n) confronti nel caso peggiore! Si dice che Ω(n log n) è una delimitazione inferiore (lower bound) al numero di confronti richiesti per ordinare n oggetti. Delimitazione inferiore = quantità di risorsa necessaria per risolvere un determinato problema Indica la difficoltà intrinseca del problema.