Algoritmi e Strutture Dati

Slides:



Advertisements
Presentazioni simili
Algoritmi di ordinamento
Advertisements

Algoritmi e Strutture Dati
Il problema della ricerca Algoritmi e Strutture Dati.
Ricorrenze Il metodo di sostituzione Il metodo iterativo
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 19 - Tecniche risolutive per problemi intrattabili Alberto Montresor Università di Trento This.
                      Insertion-Sort
Lez. 31 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
Master Bioinformatica 2002: Progetto di Algoritmi1 Programmazione Dinamica (PD) Altra tecnica per risolvere problemi di ottimizzazione, piu generale degli.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Algoritmi e strutture Dati - Lezione 7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Il problema della ricerca Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Usa la tecnica del.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Alberi di Ricorrenza Gli alberi di ricorrenza rappresentano un modo conveniente per visualizzare i passi di sostitu- zione necessari per risolvere una.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati III. Algoritmi di Ordinamento
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 7 - Tabelle hash Alberto Montresor Università di Trento This work is licensed under the Creative.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
Alessandro Tanasi - 1 Snake Alessandro Tanasi Gioco dello Snake.
Elementi di Informatica di base
UN SEMPLICE PIANO DI MARKETING
RICERCA DI MERCATO PER NON ADDETTI
Note di comunicazione business to business A cura di Bonucchi & Associati srl Questo documento è di supporto a una presentazione verbale. I contenuti potrebbero.
Passo 3: calcolo del costo minimo
Algoritmi e Strutture Dati
Riconfigurare il diritto dautore. Lipertesto, una necessità di riconfigurazione. Secondo G. P. Landow, lavvento dellipertesto implica la necessità di.
Lanalisi di settore a cura di Bonucchi & Associati srl Questo documento è di supporto a una presentazione verbale. I contenuti potrebbero non essere correttamente.
LE PROPRIETA' DELLE PROPORZIONI Prodotto da Prof.ssa Maria Raschello
Array (ordinamento) CORDA – Informatica A. Ferrari.
Ricorsione CORDA – Informatica A. Ferrari Testi da Alessandro Bugatti
Esempi di posizionamento prodotti
Algoritmi e Strutture Dati
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
GLI ALGORITMI DI ORDINAMENTO
Algoritmi e Strutture Dati Università di Camerino Corso di Laurea in Informatica (12 CFU) I periodo didattico Emanuela Merelli
Tecniche Algoritmiche/1 Divide et Impera Moreno Marzolla
Transcript della presentazione:

Algoritmi e Strutture Dati Capitolo 12: Divide-et-impera Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. © Alberto Montresor

Ambito: problemi di decisione, ricerca Programmazione dinamica Tecniche Divide-et-impera Un problema viene suddiviso in sotto-problemi indipendenti, che vengono risolti ricorsivamente (top-down) Ambito: problemi di decisione, ricerca Programmazione dinamica La soluzione viene costruita (bottom-up) a partire da un insieme di sotto-problemi potenzialmente ripetuti Ambito: problemi di ottimizzazione Memoization (o annotazione) Versione top-down della programmazione dinamica © Alberto Montresor

Approccio “ingordo”: si fa sempre la scelta localmente ottima Tecniche Tecnica greedy Approccio “ingordo”: si fa sempre la scelta localmente ottima Backtrack Procediamo per “tentativi”, tornando ogni tanto sui nostri passi Ricerca locale La soluzione ottima viene trovata “migliorando” via via soluzioni esistenti Algoritmi probablistici Meglio scegliere con giudizio (ma in maniera costosa) o scegliere a caso (“gratuitamente”) © Alberto Montresor

Impera: Risolvi i sotto-problemi ricorsivamente Divide-et-impera Tre fasi: Divide: Dividi il problema in sotto-problemi più piccoli e indipendenti Impera: Risolvi i sotto-problemi ricorsivamente Combina: “unisci” le soluzioni dei sottoproblemi Non esiste una ricetta “unica” per divide-et-impera: Quick Sort: “divide” complesso, niente fase di “combina” Merge Sort: “divide” banale, “combina” complesso E' necessario uno sforzo creativo © Alberto Montresor

n dischi di dimensioni diverse Le torri di Hanoi Gioco matematico tre pioli n dischi di dimensioni diverse Inizialmente, tutti i dischi sono impilati in ordine decrescente (più piccolo in alto) nel piolo di sinistra Scopo del gioco Impilare in ordine decrescente i dischi sul piolo di destra Senza mai impilare un disco più grande su uno più piccolo Muovendo al massimo un disco alla volta Utilizzando il piolo centrale come appoggio © Alberto Montresor

Le torri di Hanoi – Soluzione basata su divide-et-impera n-1 dischi da origine a intermedio 1 disco da origine a destinazione n-1 dischi da intermedio a destinazione © Alberto Montresor

Le torri di Hanoi – Soluzione basata su divide-et-impera Costo computazionale: T(n) = 2T(n-1)+1 Domanda: Come risolvere questa ricorrenza? Nota: La soluzione è ottima (si può dimostrare) © Alberto Montresor

Algoritmo di ordinamento Basato su divide-et-impera Quick Sort Algoritmo di ordinamento Basato su divide-et-impera Caso medio: O(n log n), caso pessimo O(n2) Caso medio vs caso pessimo Il fattore costante di Quick Sort è migliore di Merge Sort E' possibile utilizzare tecniche “euristiche” per evitare il caso pessimo Quindi spesso è preferito ad altri algoritmi Ulteriori dettagli R. Sedgewick, “Implementing Quicksort Programs” Communications of the ACM, 21(10):847-857, 1978 http://portal.acm.org/citation.cfm?id=359631 © Alberto Montresor

A[j] prende il nome di perno Quick Sort Input: Array A[1..n], indici primo,ultimo tali che 1 ≤ primo ≤ ultimo ≤ n Divide-et-impera Divide: partiziona l'array A[primo..ultimo] in due sottovettori A[primo..j-1] e A[j+1..ultimo] (eventualmente vuoti) in modo che: A[j] prende il nome di perno Impera: ordina i due sottovettori A[primo..j-1] e A[j+1..ultimo] richiamando ricorsivamente Quick Sort Combina: non fa nulla; i due sottovettori ordinati e l'elemento A[j] sono già ordinati © Alberto Montresor

Quick Sort: Codice © Alberto Montresor

Quick Sort: Esempio di funzionamento Partition 20 14 28 29 15 27 12 30 21 25 13 A[i] ≥ x j i 20 14 28 29 15 27 12 30 21 25 13 A[i] < x: j ← j+1, A[i] ↔A[j] j i 20 14 28 29 15 27 12 30 21 25 13 A[i] ≥ x j i 20 14 28 29 15 27 12 30 21 25 13 A[i] ≥ x j i 20 14 28 29 15 27 12 30 21 25 13 A[i] < x: j ← j+1, A[i] ↔A[j] j i 20 14 15 29 28 27 12 30 21 25 13 A[i] ≥ x j © Alberto Montresor

Quick Sort: Esempio di funzionamento Partition 20 14 15 29 28 27 12 30 21 25 13 A[i] < x: j ← j+1, A[i] ↔A[j] j i 20 14 15 12 28 27 29 30 21 25 13 A[i] ≥ x j i 20 14 15 12 28 27 29 30 21 25 13 A[i] ≥ x j i 20 14 15 12 28 27 29 30 21 25 13 A[i] ≥ x j i 20 14 15 12 28 27 29 30 21 25 13 A[i] < x: j ← j+1, A[i] ↔A[j] j A[primo] ← A[j]; A[j] ← x 13 14 15 12 20 27 29 30 21 25 28 j © Alberto Montresor

Quick Sort: Esempio di ricorsione 20 14 28 34 15 27 12 30 21 25 13 13 14 15 12 20 27 29 30 21 25 28 12 13 15 14 25 21 27 29 30 28 12 14 15 21 25 28 29 30 14 21 28 30 © Alberto Montresor

Quick Sort: Esempio di ricorsione 20 14 28 34 15 27 12 30 21 25 13 13 14 15 12 27 29 30 21 25 28 12 15 14 25 21 29 30 28 14 21 28 30 12 13 14 15 20 21 25 27 28 29 30 © Alberto Montresor

Quick Sort: Invariante di ciclo per perno() All'inizio di ogni iterazione, primo < k ≤ j, allora A[k] ≤ x j < k < i, allora A[k] > x k=primo, allora A[k] = x Inizializzazione Primo ciclo: i=j=primo. I due range sono vuoti, quindi 1. e 2. sono rispettati. A[primo] = x dall'assegnazione Conclusione i=ultimo+1. Questo significa che tutti gli elementi sono stati divisi in tre partizioni: x, < di x, ≥ di x Con lo scambio fra A[j] e A[primo], si ottiene la proprietà desiderata j i < x ≥ x © Alberto Montresor

Quick Sort: Invariante di ciclo per perno() Conservazione La proprietà (3) non viene mai toccata Assumiamo sia vero all'inizio del ciclo i Caso 1: A[i] ≥ x j non viene modificato, i viene incrementato di 1. Le proprietà (1) e (3) restano valide Poiché A[i] ≥ x, la proprietà (2) è vera anche per il ciclo i+1 Caso 2: A[i] < x j viene incrementato di 1 Viene effettuato lo swap fra A[i] e A[j] → A'[i] = A[j], A'[j] = A[i] Quindi A[j] < x, quindi la proprietà (1) è valida per i+1 Se i=j, l'insieme 2. è vuoto e resta tale. Se j<i, A'[i] ≥ x, quindi (2) è valida per i+1 © Alberto Montresor

Quick Sort: Complessità computazionale Costo di perno(): θ(ultimo-primo) = θ(n) Costo Quick Sort: Dipende dal partizionamento Partizionamento peggiore Dato un problema di dimensione n, viene sempre diviso in due sottoproblemi di dimensione 0 e n-1 T(n) = T(n-1)+T(0)+θ(n) = T(n-1) + θ(n) = θ(n2) Domanda Quando si verifica il caso pessimo? Partizionamento migliore Data un problema di dimensione n, viene sempre diviso in due sottoproblemi di dimensione n/2 T(n) = 2T(n/2)+θ(n) = θ(n log n) © Alberto Montresor

Quick Sort: Complessità computazionale Partizionamenti parzialmente bilanciati Il partizionamento nel caso medio di Quick Sort è molto più vicino al caso ottimo che al caso peggiore Esempio: partizionamento 9-a-1: T(n) = T(n/10)+T(9n/10)+cn Costruiamo l'albero di ricorsione, alto log10/9 n = θ(log n) partizionamento 99-a-1: T(n) = T(n/100)+T(99n/100)+cn Costruiamo l'albero di ricorsione, alto log100/99 n = θ(log n) Note: In questi esempi, il partizionamento ha proporzionalità limitata I fattori moltiplicativi possono essere importanti © Alberto Montresor

Quick Sort: Complessità computazionale Caso medio: Il costo dipende dall'ordine degli elementi, non dai loro valori Dobbiamo considerare tutte le possibili permutazioni Difficile dal punto di vista analitico Caso medio: un'intuizione: Alcuni partizionamenti saranno parzialmente bilanciati Altri saranno pessimi In media, questi si alterneranno nella sequenza di partizionamenti I partizionamenti parzialmente bilanciati “dominano” quelli pessimi © Alberto Montresor

Inneffective sorts © Alberto Montresor

Moltiplicazione di matrici Moltiplicazione matrici C=AB 7x3 3x5 A: B: = 7x5 C: Complessità T(p,c,q) = p·c·q T(n) = θ(n3) © Alberto Montresor

Come migliorare il prodotto fra matrici Suddividiamo le matrici n·n in quattro matrici n/2·n/2 Calcolo matrice: Equazione di ricorrenza: © Alberto Montresor

Come migliorare il prodotto fra matrici Calcoliamo alcuni termini intermedi Matrice finale Equazione ricorrenza © Alberto Montresor

Alcune informazioni storiche Algoritmo di Strassen (1969): θ(n2.81) Il primo ad “scoprire” che era possibile moltiplicare due matrici in meno di n3 moltiplicazioni scalari Coppersmith and Winograd (1990): O(n2.38) Attuale algoritmo migliore Limite inferiore Ω(n2) 100003 = 1.00 · 1012 100002.81 = 1.74 · 1011 100002.38 = 3.31 · 109 © Alberto Montresor

Metodo divide-et-impera Quando applicare divide-et-impera I passi “divide” e “combina” devono essere semplici Ovviamente, i costi devono essere migliori del corrispondente algoritmo iterativo Esempio ok: sorting Esempio non ok: ricerca del minimo Ulteriori vantaggi Facile parallelizzazione “cache oblivious” utilizzo ottimale della cache © Alberto Montresor