Approssimazione Lezione n°20 Prof.ssa Rossella Petreschi Lezione del 12/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design and analysis of algorithms” Edizioni: Addison Wesley
Classi di complessità Classe P(polinomiale) - classe dei problemi decisionali verificabili in tempo polinomiale da algoritmi deterministici. Classe NP(polinomiale non deterministica) - classe dei problemi decisionali verificabili in tempo polinomiale da algoritmi nondeterministici. Un problema decisionale D1 è polinomialmente riducibile ad un problema decisionale D2 se esiste una funzione t, polinomialmente calcolabile, che trasforma tutte e sole le istanze positive di D1 in istanze positive di D2 . Classe NP-completa - classe dei problemi decisionali che appartengono a NP e che sono riducibili uno all’altro. Classe NP-ardua - classe dei problemi che sono riducibili uno all’altro Notare che i problemi NP-ardui di sicuro sono difficili almeno quanto un problema NP-completo, ma non è detto che siano NP-completi.
Problemi combinatorici di ottimizzazione NP-completi - versione decisionale NP-ardui - versione di ottimizzazione Alternativa per la soluzione dei problemi NP-ardui è l’approssimazione che si ottiene applicando algoritmi semplici che sfruttano euristiche relative al problema (regole derivate dall’esperienza e non dimostrate matematicamente). 3
Accuratezza dell’approssimazione sa - soluzione approssimata s* - soluzione ottima esatta re(sa) = (f(sa) - f(s*))/ f(s*) errore relativo rapporto di accuratezza r(sa) ≥ 1 per p. minimizzazione r(sa) = f(sa)/f(s*) per p. massimizzazione r(sa) = f(s*)/f(sa) Il massimo fra i diversi r(sa) calcolati su tutte le istanze del problema si indica con RA e ci indica la qualità di sa (rapporto di approssimazione) La soluzione approssimata è tanto migliore, quanto più RA si avvicina ad 1. Sfortunatamente è facile avere RA =∞. In tal caso bisogna considerare con cautela l’algoritmo che si sta considerando che non è detto vada scartato. Un algoritmo di approssimazione polinomiale è un algoritmo approssimante se garantisce rapporto di approssimazione per ogni istanza del problema. 4
Equivalenze Tutti i problemi che appartengono alla classe dei problemi NP-ardui hanno uguale livello di difficoltà per trovare una soluzione esatta dato che appartengono alla classe dei problemi riducibili uno all’altro in tempo polinomiale. Questa equivalenza non vale nel caso delle soluzioni approssimate. Infatti trovare soluzioni approssimate con un ragionevole livello di accuratezza è più facile per alcuni di questi problemi (bisaccia) che per altri(commesso viaggiatore) 5
Il problema della bisaccia a variabili reali Algoritmo goloso per il problema della bisaccia a variabili reali: Step1 calcola il rapporto ri = vi / wi, per i = 1,…,n; Step2 ordina le ri in ordine non crescente ; Step3 considera lo ri corrente e immettilo intero nella bisaccia se non porta a superare la capacità, in caso contrario prendine la frazione maggiore inseribile nella bisaccia. Ripeti finchè o sono state considerate tutte le ri o la bisaccia è piena. La soluzione ottima trovata per la bisaccia a variabili reali può essere utilizzata come upper bound per il problema della bisaccia a variabili intere 6
Il problema della bisaccia a variabili intere Algoritmo goloso per il problema della bisaccia a variabili intere: Step1 calcola il rapporto ri = vi / wi, per i = 1,…,n; Step2 ordina le ri in ordine non crescente ; Step3 considera lo ri corrente e immettilo nella bisaccia se non porta a superare la capacità, in caso contrario scartalo. Ripeti finchè sono state considerate tutte le ri . Esempio: bisaccia con capacità w>2, r(sa) = f(s*)/ f(sa)= w/2 peso valore valore/peso 1 2 w 7
Algoritmo per schemi di approssimazione Per il problema della bisaccia a variabili intere è possibile ottenere una approssimazione sa,k per ogni prestabilito livello di accuratezzak, 0≤k<n, tale che f(sa,k)/ f(s*) ≤ 1 + 1/k, per ogni istanza di dimensione n L’algoritmo genera tutti i sottoinsiemi di x ≤ k elementi e per ciascuno di questi, prima mette nella bisaccia gli x elementi (ammesso che sia possibile), poi continua come nel metodo greedy. Il sottoinsieme che genera il maggior valore è dato in output come soluzione. Complessità computazionale O(knk+1) 8
Il vicino più vicino Algoritmo VpV per TSP: Step1 scegli una città arbitraria come punto di partenza; Step2 vai alla città (non ancora visitata) più vicina dall’ultima visitata e ripeti questo passo finchè tutte le città non saranno state visitate; Step3 ritorna alla città di partenza. In questo problema f calcola la somma dei costi su gli archi prescelti ed è facile mostrare con un esempio che per questo semplice algoritmo greedy RA = ∞ 9
TSP con distanze euclidee Si definisce un TSP con distanze euclidee un TSP dove le distanze fra le città soddisfano le seguenti condizioni naturali: disuguaglianza triangolare: d(i,j) ≤ d(i,k) + d(k,j), per ogni tripla i,j,k simmetria: d(i,j) = d(j,i), per ogni coppia i,j VALE (Reingold, Nievergelt,Deo 1977) Sebbene il rapporto di approssimazione RA rimane illimitato su istanze euclidee, il rapporto di accuratezza dell’algoritmo VpV per queste istanze soddisfa la disuguaglianza f(sa)/f(s*)≤ 1/2 (logn+1) 10
Due giri intorno all’albero Algoritmo 2gA per TSP: Step1 costruisci un minimo albero ricoprente del grafo di TSP, sia MAR; Step2 a partire da un nodo qualunque, esegui un ciclo intorno a MAR, marcando i nodi visitati; Step3 analizza la lista generata al passo 2 ed elimina da essa tutte le ripetizioni dei nodi, eccetto il primo. 11
2gA per TSP con distanze euclidee L’algoritmo 2gA è un algoritmo 2-approssimante per il problema TSP con distanze euclidee. Dobbiamo provare f(sa) ≤ 2f(s*) L’eliminazione di un qualunque arco da s* genera un albero ricoprente, T, di costo non migliore del MAR generato dall’algoritmo, quindi f(s*) > w(T) ≥ w(T*) da cui 2f(s*) > 2 w(T*) ≥ f(sa) c.v.d. --------------------------------- 2w(T*): lunghezza del cammino ottenuto al passo 2 f(sa) : lunghezza del tour trovato da sa 12
Un risultato negativo Se P≠ NP, non esiste alcun algoritmo approssimante per TSP Idea: se per assurdo si accettasse l’esistenza di un tale algoritmo A approssimante, allora questo algoritmo si potrebbe adoperare per risolvere in tempo polinomiale il problema del ciclo hamiltoniano che si sa essere NP-completo e quindi P=NP. Siano G (V,E) grafo qualunque, G’(V,E’) grafo completo pesato (E E’)t.c. se e E, w(e)=1, se e E’/E, w(e)=n+1. Applichiamo ora A a G’ e troviamo la soluzione sa. Si calcoli f(sa). La soluzione ottima del TSP in G’ sarà n se G ha un circuito hamiltoniano, maggiore di n in caso contrario. Nel I caso: f(sa) ≤ f(s*) = n (≤ :per def. di approssimante , = per circuito ham) Nel II caso: f(sa) ≥ f(s*) > n (≥:per def. di sa , > per mancanza di circuito ham) Da questi confronti si deduce la soluzione del problema del circuio ham e che P = NP 13