UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Algoritmi

Documenti analoghi
Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

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

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Introduzione alla programmazione

Linguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità.

Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Tecniche di Ordinamento dei Vettori

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

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Sistemi lineari. Lorenzo Pareschi. Dipartimento di Matematica & Facoltá di Architettura Universitá di Ferrara

Corso di Fondamenti di Informatica

Dispensa di Informatica II.1

Esercizi svolti. risolvere, se possibile, l equazione xa + B = O, essendo x un incognita reale

INFORMATICA GENERALE Prof. Alberto Postiglione. Università degli Studi di Salerno. UD 3.1a: Gli Algoritmi

1.1 Concetti base dell Informatica: Algoritmi

PROGRAMMAZIONE STRUTTURATA

Insiemi Specifiche, rappresentazione e confronto tra realizzazioni alternative.

Risoluzione di problemi ingegneristici con Excel

Introduzione al Metodo del Simplesso. 1 Soluzioni di base e problemi in forma standard

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Programmazione I - corso B a.a prof. Viviana Bono

Strutture dati e algoritmi. Sommario

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

Derivazione numerica. Introduzione al calcolo numerico. Derivazione numerica (II) Derivazione numerica (III)

Attività svolta con tutte le classi

PROBLEMI ALGORITMI E PROGRAMMAZIONE

20. Rappresentazione del numero naturale e strumenti di calcolo

Esempio: rappresentare gli insiemi

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD

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

= < < < < < Matematica 1

Sistemi di numerazione

Informatica, Algoritmi, Linguaggi

1 Esercizi in pseudocodice

Moltiplicazione. Divisione. Multipli e divisori

Esercizi Capitolo 7 - Hash

Algoritmi. Pagina 1 di 5

La ricerca dicotomica

Algoritmi e soluzione di problemi

Algoritmi e basi del C

Teoria dell informazione

Heap e code di priorità

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

Distribuzione Gaussiana - Facciamo un riassunto -

Errori di misura Teoria

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione

Esercizi Capitolo 6 - Alberi binari di ricerca

Problemi, istanze, soluzioni

Algoritmi e Principi dell Informatica

Sistemi Web per il turismo - lezione 3 -

Teorema di Thevenin generalizzato

Firmware Division. Prof. Alberto Borghese Dipartimento di Informatica Università degli Studi di Milano

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

Equazioni lineari con due o più incognite

Elementi di Teoria dei giochi

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

Corso di elettrotecnica Materiale didattico: i grafi

Algoritmi e Strutture Dati - Prof. Roberto De Prisco A.A Seconda prova di verifica (4 Febbraio 2005)

APPUNTI DI INFORMATICA

Algoritmi e basi del C

Permutazioni. 1 Introduzione

Cosa è l Informatica?

1 Definizione di sistema lineare omogeneo.

Esercizi su algebra lineare, fattorizzazione LU e risoluzione di sistemi lineari

Algoritmi di ordinamento. Sequential-sort, Bubble-sort, Quicksort

Appunti di informatica. Lezione 7 anno accademico Mario Verdicchio

Informatica. Come si risolve un problema?

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

DISTRIBUZIONE NORMALE (1)

Riassumiamo le proprietà dei numeri reali da noi utilizzate nel corso di Geometria.

I. Foglio di esercizi su vettori linearmente dipendenti e linearmente indipendenti. , v 2 = α v 1 + β v 2 + γ v 3. α v 1 + β v 2 + γ v 3 = 0. + γ.

Massimi e minimi vincolati

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

Ma il programma in Fig. 8.2 del libro? Stampa hello, world, dato un input n se e solo se l equazione

Corso di Matematica per la Chimica

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

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

Esercitazione del 09/03/ Soluzioni

Corso di Reti Logiche

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

CORSO ZERO DI MATEMATICA

UD 3.5a: Searching (parte 1) ALGORITMO DI RICERCA SEQUENZIALE. Dispense, cap

VOGLIO CONTINUARE A STUDIARE!

Algebra di Boole: minimizzazione di funzioni booleane

Alberi binari di ricerca

GIOCO DELLE 12 PALLINE

Inversa di una matrice

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Termine algoritmo da:

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso

Sistemi di 1 grado in due incognite

Quale delle seguenti rappresentazioni del numero reale è in virgola mobile normalizzata?

Procedura operativa per la gestione della funzione di formazione classi prime

percorso 4 Estensione on line lezione 2 I fattori della produzione e le forme di mercato La produttività La produzione

QuickSort (1962, The Computer Journal)

Corso di Informatica di Base

Anno 1. Teoria degli insiemi: definizioni principali

Modulo 1 Concetti di base della Tecnologia dell Informazione

Transcript:

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Algoritmi

Algoritmi classici Alcuni problemi si presentano con elevata frequenza e sono stati ampiamente studiati Ricerca di un elemento in un vettore Ricerca del minimo e del massimo Ordinamento Gli algoritmi impiegabili in questi casi sono numerosi. I più noti, di seguito presentati, vengono spesso impiegati anche come termini di paragone per valutare le prestazioni di nuove soluzione proposte 2

Algoritmi di ricerca Il problema della ricerca di un elemento in un vettore si presenta frequentemente: Occorre verificare se l elemento appartiene al vettore Ad un elemento (o alla sua posizione) sono associate informazioni supplementari Esistono due algoritmi standard per la risoluzione di questo problema 3

Ricerca sequenziale (1) L idea di fondo è semplice: l intero vettore viene scorso alla ricerca dell elemento che interessa Vettore Elemento cercato 3 1 7 4 9-3 11 6 9 1 Indice 4

Ricerca sequenziale (2) Vettore Elemento cercato 3 1 7 9 4-3 11 6 9 Diverso 1 Indice Vettore Elemento cercato 3 1 2 7 9 4-3 11 6 9 Diverso Indice 5

Ricerca sequenziale (3) Vettore Elemento cercato 3 1 7 9 4-3 11 6 9 Diverso 3 Indice Vettore Elemento cercato 3 1 7 9 4-3 11 6 9 Trovato! 4 Indice 6

Ricerca sequenziale (4) L algoritmo di ricerca sequenziale funziona senza richiedere particolari ipotesi sull ordinamento dei dati Mediamente occorre scandire metà vettore per trovare l elemento cercato (se c è); se non c è, occorre scorrere tutto il vettore Diciamo che il tempo richiesto dall algoritmo è proporzionale alla lunghezza N del vettore Si dice che il tempo di esecuzione cresce linearmente al variare di N 7

Ricerca binaria (1) Se è soddisfatta l ipotesi di ordinamento dei dati all interno del vettore, allora è possibile utilizzare approcci più efficienti rispetto alla ricerca sequenziale La ricerca binaria prevede l osservazione dell elemento al centro del vettore considerato. Se è quello cercato termina, altrimenti scarta tutta una metà del vettore a seconda che l elemento analizzato sia maggiore o minore di quello cercato Il processo si ripete fino a trovare l elemento cercato o a scartarli tutti 8

Ricerca binaria (2) L approccio è lo stesso adottato per cercare una parola nel dizionario o un nome nella rubrica telefonica Es. cerco il numero di Rossi Mario Apro circa a metà, sulla lettera N Vado avanti di diverse pagine Arrivo alla lettera S Torno indietro a Ra Vado avanti di poco, arrivando a Rov.. Ci sono quasi, torno indietro di una pagina etc 9

Ricerca binaria (3) Rispetto all algoritmo sequenziale, la ricerca binaria usa due ulteriori indici per individuare gli estremi della porzione del vettore non ancora esclusa Vettore Elemento cercato -3 0 1 3 5 10 13 17 18 19 21 22 27 54 66 71 80 10 0 18 Estremo inferiore Indice Estremo superiore 10

Ricerca binaria (4) L indice iniziale è sempre a metà tra gli indici degli estremi Vettore 18-3 0 1 3 5 10 13 17 19 21 22 27 54 66 71 80 0 9 18 Estremo inferiore Indice Estremo superiore L elemento cercato (10) è minore di 18, per cui si esclude la seconda metà del vettore 11

Ricerca binaria (5) La metà tra 0 e 9 è 4,5: poiché gli indici devono essere interi, si sceglie tra 4 e 5 3 Vettore -3 0 1 5 10 13 17 18 19 21 22 27 54 66 71 80 0 4 9 Estremo inferiore Indice Estremo superiore Questa volta l elemento è precedente quello cercato, per cui si prosegue nella ricerca escludendo la metà di sinistra 12

Ricerca binaria (6) Come nel caso precedente, si tronca il valore dell indice all intero inferiore 10 Vettore -3 0 1 3 5 13 17 18 19 21 22 27 54 66 71 80 4 6 9 Estremo inferiore Indice Estremo superiore L elemento cercato, presente nell algoritmo viene quindi trovato. La risposta fornita dall algoritmo è 6, cioè la posizione corrispondente al valore cercato 13

Ricerca binaria (7) Se avessimo cercato 12, i passi fino a qui sarebbero stati gli stessi. Poi: -3 0 1 3 5 10 13 17 18 19 21 22 27 54 66 71 80 6 7 9 10-3 0 1 3 5 13 17 18 19 21 22 27 54 66 71 80 6 6 7 In questo caso, l algoritmo terminerebbe senza successo 14

Ricerca binaria (8) L algoritmo di ricerca binaria dimezza la dimensione dello spazio di ricerca ad ogni passo Il tempo necessario all esecuzione dell algoritmo è dunque proporzionale al logaritmo di N Visto che logn cresce più lentamente di N, la ricerca binaria è più efficiente di quella sequenziale (ma richiede l ipotesi supplementare di ordinamento dei dati) Nel caso pessimo l algoritmo termina quando la dimensione dello spazio di ricerca diventa 1 15

Ricerca del minimo (1) Un secondo problema riguarda la ricerca del valore minimo (o massimo) all interno di un vettore non ordinato Naturalmente il problema è banale se invece il vettore è ordinato! Dato che i problemi di ricerca del minimo e di ricerca del massimo sono del tutto analoghi, di seguito si farà riferimento esclusivamente alla ricerca del minimo 16

Ricerca del minimo (2) Per risolvere il problema vengono utilizzate due variabili di supporto, contenenti: il valore minimo trovato sinora la posizione (indice) di tale valore L algoritmo scorre l intero vettore e confronta ciascun elemento col minimo contenuto nella variabile di supporto Se l elemento nel vettore è inferiore a quello nella variabile di appoggio, allora sostituisce la variabile di supporto con l elemento considerato 17

Ricerca del minimo (3) Si inizializzano le variabili di supporto con la posizione e il valore del primo elemento Vettore Minimo Valore / Posizione 3 1 7 4 9-3 11 6 3 1 1 Indice In questo modo il minimo temporaneo è non inferiore al minimo del vettore 18

Ricerca del minimo (4) Vettore Minimo Valore / Posizione 3 1 7 4 9-3 11 6 3 1 1 Uguale al minimo corrente (è una conseguenza dell inizializzazione in effetti questo primo passo può essere sottointeso) Indice Vettore Minimo Valore / Posizione 3 1 7 4 9-3 11 6 1 2 2 Minore del minimo corrente aggiorno valore e posizione del minimo Indice 19

Ricerca del minimo (5) Vettore Minimo Valore / Posizione 3 1 7 4 9-3 11 6 1 2 3 Maggiore del minimo corrente Indice Vettore Minimo Valore / Posizione 3 1 7 4 9-3 11 6 1 2 4 Indice Maggiore del minimo corrente 20

Ricerca del minimo (6) Vettore Minimo Valore / Posizione 3 1 7 4 9-3 11 6 1 2 5 Maggiore del minimo corrente Indice Vettore Minimo Valore / Posizione 3 1 7 4 9-3 11 6-3 6 6 Minore del minimo corrente aggiorno valore e posizione del minimo Indice 21

Ricerca del minimo (7) Vettore Minimo Valore / Posizione 3 1 7 4 9-3 11 6-3 6 7 Indice Maggiore del minimo corrente Vettore Minimo Valore / Posizione 3 1 7 4 9-3 11 6-3 6 8 Maggiore del minimo corrente Indice 22

Ricerca del minimo (8) Al termine dell algoritmo le variabili di supporto contengono il valore e la posizione del minimo Se fossero presenti più minimi uguali sarebbe possibile decidere quale tenere in considerazione Data la lunghezza N del vettore, è necessario effettuare N confronti Il tempo necessario al completamento dell esecuzione è proporzionalealla dimensione del vettore 23

Ordinamento Un ultimo problema consiste nell ordinare gli elementi di un vettore Esiste una grande varietà di algoritmi di ordinamento, con caratteristiche anche molto diverse in termini di velocità e memoria utilizzata 24

Ordinamento: Bubblesort (1) Bubblesort confronta coppie di elementi adiacenti (primo-secondo, secondo-terzo,...) e ne scambia il contenuto se gli elementi non sono nell ordine corretto Dopo aver effettuato una prima iterazione dell intero vettore, l algoritmo inizia nuovamente dal primo elemento Il procedimento si ripete finché la lista di elementi non è ordinata, ovvero: Dopo N passate Oppure quando, durante un intera passata, l algoritmo non effettua scambi (il vettore è cioè già ordinato ad un passo intermedio) 25

Ordinamento: Bubblesort (2) 3 1 7 4 9-3 Scambio gli elementi 1 3 7 4 9-3 Nessuna operazione 1 3 7 4 9-3 1 3 4 7 9-3 1 3 4 7 9-3 Al termine della prima iterazione, l ultimo elemento del vettore è nella posizione corretta (il massimo è finito in ultima posizione) 1 3 4 7-3 9 26

Ordinamento: Bubblesort (3) 1 3 4 7-3 9 1 3 4 7-3 9 1 3 4 7-3 9 1 3 4 7-3 9 1 3 4-3 7 9 Dopo la seconda iterazione, anche il penultimo elemento del vettore è a posto. Dopo altre 3 iterazioni il vettore risulterà ordinato 1 3 4-3 7 9 27

Ordinamento: Bubblesort (4) L algoritmo Bubblesort è semplice da implementare ma è molto lento Poiché ho N elementi, devo effettuare N-1 confronti ogni iterazione; inoltre l algoritmo termina dopo N iterazioni. Il tempo di esecuzione dell algoritmo è quindi proporzionale a N*(N-1)N 2 28

Ordinamento: Quicksort (1) Quicksort è un algoritmo ricorsivo dato un problema lo scompone e risolve la versione semplificata utilizzando il medesimo algoritmo Se il vettore è di dimensione 1 allora è ordinato e termina, altrimenti: sceglie un elemento del vettore (pivot) separa gli elementi maggiori del pivot da quelli minori, cioè il vettore diventa {elementi <} pivot { elementi >} esegue Quicksort separatamente sui vettori {elementi <} e {elementi >} 29

Ordinamento: Quicksort (2) 1 3 < 3 1 7 4 9-3 >3 o <3? 1 7 4 9-3 1-3 3 7 4 9 Scelgo l elemento pivot e lo escludo dal vettore Scorro quindi il resto della lista, separando in due vettori diversi gli elementi rispettivamente minori e maggiori del pivot Termino quando tutti gli elementi sono stati inseriti in uno dei due vettori 30

Ordinamento: Quicksort (3) Elementi < Pivot <1 1-3 3 7 4 9 1-3 1-3 -3 1 3 Elementi > Pivot 7 4 9 <7 >7 4 7 9 4 7 9-3 1 3 4 7 9 Il procedimento viene ripetuto in maniera ricorsiva, applicato distintamente ai vettori a destra e sinistra dell elemento pivot Quando l algoritmo termina, il risultato viene costruito assemblando i diversi sotto-vettori ordinati, a loro volta formati da sotto-sotto vettori ordinati etc 31

Ordinamento: Quicksort (4) Quicksort termina, nel caso medio, dopo circa N logn operazioni; nel caso pessimo il tempo è però ancora proporzionale a N 2 Una buona scelta del pivot è essenziale per evitare di ricadere nel caso pessimo Rispetto a Bubblesort, questo algoritmo è mediamente più veloce 32

Caratteristiche degli algoritmi In generale non vi è sempre un unica soluzione. Al contrario, per uno stesso problema posso esistere vari algoritmi con caratteristiche anche molto differenti in termini di: Complessità computazionale (numero di operazioni richieste per trovare la soluzione) Quantità di memoria richiesta Complessità implementativa 33

Complessità computazionale (1) L analisi teorica della complessità computazionale ci fornisce uno strumento tecnico per conoscere a priori il numero di operazioni necessarie (e quindi i tempi di esecuzione) per ogni algoritmo La conoscenza di questi parametri permette di confrontare in maniera oggettiva i diversi algoritmi tra loro 34

Complessità computazionale (2) Come è stato mostrato in precedenza, vi è spesso una relazione tra la dimensione dei dati in ingresso ed il numero di operazioni effettuate dall algoritmo In simboli si usa spesso indicare che il tempo è un O(f(Dim)), dove Dim è la dimensione del problema e f() è una funzione matematica E importante osservare che più f(dim) cresce rapidamente con Dim, più l algoritmo diventa oneroso all aumentare della dimensione dei dati in ingresso 35

Complessità computazionale (3) Ad esempio, la ricerca lineare ha complessità O(N) mentre l algoritmo binaria è dell ordine O(logN) Ipotizzo che la ricerca di un numero di telefono nella rubrica (60 utenti circa) richieda mediamente: 0,5 s con l algoritmo lineare 0,1 s con la ricerca binaria Con questi tempi, la ricerca di un immatricolato tra gli studenti pavesi (60.000 circa) richiederebbe mediamente: 480 s (8 minuti!) con il metodo lineare 4 s con l algoritmo di ricerca binaria 36

Caso medio e caso pessimo La scelta più consueta è quella di utilizzare il tempo medio, che risulta essere più rappresentativo del caso pessimo (auspicabilmente raro) In alcune applicazioni è necessario però considerare il caso peggiore In generale, la scelta tra prestazioni medie e prestazioni minime riguarda tutti gli ambiti dell Ingegneria, non solo l Informatica 37

Riferimenti N. Wirth, Algoritmi + Strutture dati = Programmi, 1987 D. Knuth, The Art of Computer Programming, 1970s G. Cupini et al., Corso di Informatica, 1987 en.wikipedia.org/wiki/( Big_O_notation Sorting_algorithm Search_algorithm Selection_algorithm ) 38