Backtracking.

Slides:



Advertisements
Presentazioni simili
Problemi di ottimizzazione
Advertisements

Master Bioinformatica 2002: Grafi Problema: cammini minimi da tutti i vertici a tutti i vertici Dato un grafo pesato G =(V,E,w), trovare un cammino minimo.
Master Bioinformatica 2002: Progetto di Algoritmi1 Programmazione Dinamica (PD) Altra tecnica per risolvere problemi di ottimizzazione, piu generale degli.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. A)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Trovare il percorso minimo da b ad ogni altro vertice
Passo 3: calcolo del costo minimo
Cerchiamo di rispondere alla seconda domanda 2)La soluzione trovata con lalgoritmo goloso è ottima o esistono anche soluzioni con più di quattro attività?
Algoritmi e Strutture Dati
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Algoritmi golosi Tecniche di soluzione dei problemi viste finora:
Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte III)
Algoritmi e Strutture Dati
Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
Disequazioni in una variabile. LaRegola dei segni La disequazione A(x) · B(x) > 0 è soddisfatta dai valori di per i quali i due fattori A(x) e B(x) hanno.
© 2007 SEI-Società Editrice Internazionale, Apogeo
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
x2 – 4x + 1 x – 3 6x 5y2 ; x2 – 4x + 1 x – 3 x – 3 ≠ 0 x ≠ 3
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Statistica Prima Parte I Dati.
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Le frazioni decimali Tutto in un click.
Ordinamento.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
Le potenze ad esponente reale
Sulla complessità Lezione n°2
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Usi (meno scontati) della visita DFS
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Lezione n°12 Prof.ssa Rossella Petreschi
Il sistema di numerazione decimale
Principali Algoritmi di Scheduling
Algoritmi e Strutture Dati
I numeri relativi DEFINIZIONE. Si dicono numeri relativi tutti i numeri interi, razionali e irrazionali dotati di segno (positivo o negativo). ESEMPI Numeri.
Programmazione Dinamica: tecnica risolutiva che conduce all’ottimo, non fornisce algoritmi risolutivi generali. Stadi: fasi in cui il problema è scomposto.
Algoritmi per il flusso nelle reti
Algoritmi per il flusso nelle reti
Scrivere programmi corretti
Ordinamento in tempo lineare
Scheduling in Linux (Kernel 2.4 e 2.6)
Ricorsione 16/01/2019 package.
Schema generale, visita in ampiezza e profondità.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Backtracking Lezione n°13 Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
L’algoritmo MergeSort
Algoritmi e Strutture Dati
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
MergeSort Usa la tecnica del divide et impera:
Algoritmi e Strutture Dati
Ricerca 01/08/2019 package.
La programmazione strutturata
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Algoritmi di ordinamento
Transcript della presentazione:

Backtracking

Labirinth

Graph Coloring As an example: The vertices are enumerated in order A-F The colors are given in order: R, G, B B F C E D

Graph Coloring A B F C E D

Graph Coloring A B F C E D

Graph Coloring A B F C E D

Graph Coloring A B F C E D

Graph Coloring A B F C E D

Graph Coloring A Stuck! B F C E D

Graph Coloring A B F C E D

Graph Coloring A B F C E D

Graph Coloring A B F C E D

Graph Coloring A B F C E D

Graph Coloring A B F C E A X B D C X D X X X E X X X X X F

Algoritmi Greedy

Soluzione di un problema di ottimizzazione Ad ogni problema è associato un costo/valore Una soluzione e’ frutto di una sequenza di scelte, ciascuna delle quali contribuisce a determinare il costo/valore finale Si è interessati a trovare una soluzione che abbia un costo/valore ottimo (minimo o massimo)

Algoritmi greedy Si applicano a problemi di ottimizzazione in cui dato un insieme di oggetti {a1,…,an} occorre selezionare un sottoinsieme “ottimo” S di oggetti che verificano una determinata proprietà Idea: “per trovare un soluzione globalmente ottima, scegli ripetutamente soluzioni ottime localmente”

Problema del cambio di denaro Input Un numero intero positivo n Output Il più piccolo numero intero di banconote o monete per cambiare n euro usando pezzi da 20, 10, 5, e 1. Esempi n = 58, 7 pezzi: 20+20+10+5+1+1+1 n = 18, 5 pezzi: 10+5+1+1+1 Algoritmo Dispensa un pezzo alla volta Ad ogni passo, utilizza il pezzo più grande che non superi la cifra rimanente.

Un altro problema del cambio di denaro Input Un intero positivo n Output Il più piccolo numero di banconote per cambiare n dollari usando banconote da 12, 8, e 1 dollari. Esempio n = 31 9 banconote: 12 + 12 + 1 + 1 + 1 + 1 + 1 + 1 + 1 6 banconote : 12 + 8 + 8 + 1 + 1 + 1 Il criterio greedy non garantisce ottimalità

Struttura degli algoritmi greedy Si assume che gli oggetti abbiano associato un valore di “appetibilità”. La soluzione viene costruita incrementalmente scegliendo ad ogni passo l’oggetto che ha appetibilita’ maggiore e puo’ essere aggiunto a quelli già selezionati.

Algoritmi Greedy - Schema generale 1 Se le appetibilità degli oggetti sono note fin dall’inizio e non vengono modificate Greedy1 ({a1, a2, …an}) S   “ ordina gli ai in ordine non crescente di appetibilità” for ogni ai nell’ordine do if “ai puo’ essere aggiunto a S” then S  S  {ai} return S

Algoritmi Greedy - Schema generale 2 Se le appetibilità degli oggetti possono essere modificate dalle scelte già fatte. Greedy2 ({a1, a2, …an}) S   “valuta le appetibilità degli ai ” while “ci sono elementi da scegliere” do “scegli l’ai più appetibile” if “ai può essere aggiunto a S” then S  S  {ai} “aggiorna le appetibilità degli ai ” return S

Esempio: Problema della Selezione di attivita’ Input: S = {1, 2, …, n} insieme di attività che devono usare una risorsa in modo esclusivo. Ogni attività i è caratterizzata da un tempo di inizio e da un tempo di fine: [si, fi) con (si < fi). [si, fi) e [sj, fj) sono compatibili se si  fj o sj  fi i j si fi sj fj j i sj fj si fi

Selezione di attvità Output: insieme che contiene il massimo numero di attivita’mutuamente compatibili.

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 12

Idea dell’algoritmo seleziona ad ogni passo un’attività che sia compatibile con quelle già selezionate e lasci più opportunità di selezione futura  seleziona ad ogni passo un’attività che sia compatibile con quelle già selezionate e che abbia tempo di fine minimo tra quelle che possono ancora essere selezionate

Applicando lo schema greedy: Oggetti: le attività Appetibilità: tempo di fine Ordiniamo le attività per tempo di fine visita non decrescente.

2 6 5 7 9 8 10 3 4 1 1 2 3 4 5 6 7 8 9 10 11 12 Attività ordinate per fine visita

Activity_selector(s, f) sia {a1, a2, …an} ordinata in modo che f1,  f2 ,…  fn A = {1} j  1 for i = 2 to n do if si  fj then A  A  {i} j  i return A

Spiegazione dell’algoritmo fj rappresenta il massimo tempo di fine visita delle attività già selezionate (quelle in A)  per sapere se un’attività i è compatibile con quelle già selezionate basta verificare che si  fj

2 6 5 7 9 8 10 3 4 1 1 2 3 4 5 6 7 8 9 10 11 12 Soluzione: {2,9,8,1}

6 2 5 7 9 10 8 3 4 1 1 2 3 4 5 6 7 8 9 10 11 12 Altra soluzione: {6,9,10,1}

Tutte le soluzioni {2, 9, 8, 1} {6, 9, 10, 1} {2, 9, 10, 1} {6, 9, 8, 1} Osserva che si ottiene una soluzione da un altra sostituendo un’attività con un’altra con lo stesso tempo di fine visita

Proprietà1: sottostruttura ottima Sia A una soluzione ottima per S, sia k  A. Considera Ak = {i A | fi  fk} A’ = A - Ak S’ = {i  S | si  fk} A’ e’ una soluzione ottima per S’.

|B  Ak| > |A’  Ak| = |A| Dimostrazione: supponi che A’ non sia ottima allora esiste una soluzione B per S’con |B| > |A’|. Poichè B  Ak =  e ogni attività in B è compatibile con quelle in Ak ottengo che Ak  B è una soluzione per S e |B  Ak| > |A’  Ak| = |A| contro l’ipotesi che A sia ottima.

Proprietà2: scelta greedy Sia 1  S, un’attività con tempo di fine f1 minimo. Esiste una soluzione ottima A tale che 1  A

si  fj  f1 per ogni i in A -{j} Dimostrazione: sia A una soluzione ottima per S e sia j  A un’attività con tempo di fine minimo tra quelle in A, vale f1  fj Considera l’insieme A’ = (A -{j})  {1} poichè vale si  fj  f1 per ogni i in A -{j} anche A’ e’una soluzione ed e’ottima essendo |A’| = |A| e abiamo che 1  A’

Correttezza dell’algoritmo Segue dalle due proprietà dimostrate mediante un ragionamento induttivo. Considera un insieme di attività S = {1,…,n} ordinate in modo che f1  f2  …  fn. Per la Proprietà2 esiste una soluzione ottima che contiene la prima scelta greedy 1. Sia A una tale soluzione. Per la Proprietà1, A’ = A - {1} e’ una soluzione ottima per l’insieme di attivita’ S’ = {i  S: si  f1}. Riapplica lo stesso ragionamento ad S’

Formalmente provo che: siano i1,…,ik le attività gia’ scelte dall’algoritmo con k 0, supponi che esista una soluzione ottima i cui primi k elementi (nell’ordine di f) sono i1,…,ik e che l’algoritmo scelga al prossimo passo l’attività ik+1 allora esiste una soluzione ottima i cui primi k+1 elementi i1,…ik, ik+1 . Dimostrazione k = 0, allora ik+1 = 1, e’ la Proprietà2. k > 0, supponi che sia A soluzione ottima e che i1,…, ik siano i primi k elementi di A, caso i se ik+1  A non c’è niente da dimostrare.

caso ii se ik+1  A considera A’= A - {i1,…, ik} e sia S’= {i  S | si  f ik}. Per la proprietà 2 applicata a S’ esiste una soluzione ottima B per S’che contiene ik+1 come elemento piu’piccolo. Per la Proprietà 1 A’ e’ottima per S’ quindi |B| =|A’|. Dato che B  {i1,…, ik} =  e che ogni attivita in B è compatibile con {i1,…, ik} ho che B  {i1,…, ik} è una soluzione ottima per S e ha come primi k+1 elementi i1,… ik+1.

Quando è applicabile la metodologia greedy? Sottostruttura ottima: una soluzione ottima del problema contiene al suo interno una soluzione di dei sottoproblemi Scelta greedy: la scelta dell’ottimo locale garantisce una soluzione ottima globale

La scelta greedy riduce un problema ad un problema più piccolo dello stesso tipo di quello di partenza. Una soluzione ottima è determinata dalla sequenza di tali scelte che alla fine producono un problema vuoto.

Il problema dello zaino Un ladro vuole rubare dei beni che trasporterà in uno zaino. Può prendere W chili di bottino (W è la capacità dello zaino). Deve scegliere tra n articoli, ognuno dei quali ha peso wi e valore vi. Può prendere qualsiasi articolo, purchè non ecceda la capacità W.

Problema: Quale è il massimo valore che può mettere insieme e quali articoli deve prendere per massimizzare il valore complessivo del bottino?

Due varianti del problema: Lo zaino frazionario (o continuo): si possono prendere frazioni di ciascun articolo. Lo zaino discreto (o zaino 0-1): gli articoli sono indivisibili, quindi ciascun articolo o lo si prende oppure no (scelta 0-1)

Lo zaino frazionario è risolvibile con un metodo greedy Consideriamo come valore di appetibilità il valore di ciascun oggetto (vi) per unità di peso (wi): vi/wi

Idea dell’algoritmo greedy: Prendi il più possibile dell’oggetto con il più alto rapporto vi/wi. Se la dotazione dell’oggetto è esaurita e non hai ancora riempito lo zaino, considera il prossimo oggetto con il più alto rapporto vi/wi. Ripeti il procedimento finchè lo zaino è pieno.

Proprietà della sottostruttura ottima Se rimuovo una quantità w di un articolo j da un carico ottimo ottengo un carico ottimo che pesa al piu’ W-w e che posso mettere insieme avendo a disposizione n-1 articoli con le quantità originarie e wj -w chili dell’articolo j. Altrimenti: se ci fosse un carico che vale di più, potrei ottenere un carico migliore con la dotazione originaria degli n articoli e peso W, aggiungendo w chili di j a quel carico.

Proprietà della scelta greedy Sia h un articolo con il più alto rapporto vh/wh. C’è una soluzione ottima L in cui prendo il massimo di h, cioè Lh= min(W,wh) Dopo aver scelto Lh il problema si riduce a trovare una soluzione ottima scegliendo tra n-1 oggetti (h escluso) e potendo mettere insieme un peso non superiore a W- Lh. Si ripete il ragionamento considerando la prossima scelta greedy.

Knapsack(W, w,v) Ordina {1,…,n} per vi/wi non crescente C  W for i = 1 to n do Li  0 i  1 while (i  n) and (C > 0) do Li  min(C, wi) C  C - Li i  i+1 return L

Knapsack(W, w,v) (L valori frazionari) Ordina {1,…,n} per vi/wi non crescente C  W for i = 1 to n do Li  0 i  1 while (i  n) and (C > 0) do if (wi > C) then Li  C (Li  C/wi) C  0 else Li  wi (Li  1) C  C - wi, i  i+1 return L

Esempio

Esecuzione algoritmo / 50 0 0 0 1 40 10 0 0 2 20 10 20 0 3 0 10 20 20 i C L1 L2 L3 / 50 0 0 0 1 40 10 0 0 2 20 10 20 0 3 0 10 20 20 Soluzione: V = 10*6 + 20 *5+20* 4 = 240

Zaino 0-1 Stesso problema, ma gli articoli vanno presi interamente: Li = 1 se prendiamo l’articolo i Li = 0 se non prendiamo l’articolo i Vale la proprietà della sottostruttura ottima anche per lo zaino0-1: se ad un carico ottimo di peso W tolgo un oggetto j, ottengo un carico ottimo di peso W - wj

GreedyKnapsack0-1(W, w,v) Ordina {1,…,n} per vi/wi non crescente C  W for i = 1 to n do Li  0 i  1 while (i  n) and (C > 0) do if (wi > C) then Li  0 else Li  1 C  C - wi, i  i+1 return L

Rivediamo l’esempio

Esecuzione algoritmo / 50 0 0 0 1 40 10 0 0 2 20 10 20 0 i C L1 L2 L3 / 50 0 0 0 1 40 10 0 0 2 20 10 20 0 3 20 10 20 0 (w=30) Soluzione: V = 10*6 + 20 *5= 160

Se prendo l’articolo 2 e l’articolo 3 ottengo: È ottima la soluzione? NO!! Se prendo l’articolo 2 e l’articolo 3 ottengo: V = 100 + 120 = 220 La strategia greedy non trova una soluzione ottima per il problema dello zaino 0-1

Non vale il principio della scelta greedy la scelta se prendere o no un oggetto non dipende dalla sua appetibilità. Per trovare una soluzione ottima bisogna comparare la soluzione del sottoproblema in cui si è scelto di prendere un articolo con la soluzione in cui si è scelto di non prendere quell’articolo.

Un semplice problema di Scheduling n job e 1 macchina Ogni job ha un tempo di esecuzione Esegui i job sulla macchina Minimizzare il tempo di completamento totale 1 4 3 6 1 4 3 6 5 11 14 4+5+11+14 = 34 1 4 3 6 8 14 1+4+8+14 = 27 Criterio: esegui il job più piccolo per primo

1 4 3 6 5 11 14 4+5+11+14 = 34 1 3 6 5 11 14 34+1-4 = 31 4 1 6 5 8 14 31+8-11 = 28 4 3 1 6 4 8 14 28+4-5 = 27 3

1 4 3 6 1 4 3 6 8 14 1+4+8+14 = 27 4 3 6 7 13 3+7+13 = 23 Sottoproblema