Vai al contenuto

Cenni di complessità computazionale

1.6 Cenni di complessità computazionale

  • La forza bruta richiede tempo esponenziale. Esiste un algoritmo che risolve un problema di ottimizzazione combinatoria in tempo polinomiale? La complessità computazionale classifica i problemi in base a questa domanda; qui diamo solo le definizioni che servono nel corso.

  • La dimensione di un'istanza è il numero di bit necessari per scriverla. Per esempio, un'istanza con \(n\) numeri, il più grande dei quali è \(M\), ha dimensione dell'ordine di \(n \log_2 M\): un numero \(M\) si scrive con circa \(\log_2 M\) bit, non con \(M\) simboli.

  • Un algoritmo è polinomiale se il suo tempo di esecuzione è limitato da un polinomio nella dimensione dell'istanza.

  • La versione decisionale di un problema di ottimizzazione pone una domanda sì/no, per esempio: “esiste una soluzione ammissibile di valore almeno \(k\)?”.

Definizione 1.7: le classi P e NP

  1. P è la classe dei problemi decisionali che si possono risolvere con un algoritmo polinomiale.

  2. NP è la classe dei problemi decisionali le cui istanze “sì” ammettono un certificato che si può verificare in tempo polinomiale (per esempio, una soluzione ammissibile di cui ammissibilità e valore si calcolano in tempo polinomiale).

  3. Un problema decisionale in NP è NP-completo se ogni problema in NP si può ridurre a esso in tempo polinomiale. Un problema di ottimizzazione è NP-hard se la sua versione decisionale è NP-completa (più in generale, se un algoritmo polinomiale per esso darebbe un algoritmo polinomiale per un problema NP-completo).

  • Non è noto se \(P = NP\). Non si conosce alcun algoritmo polinomiale per un problema NP-completo, ed è opinione diffusa che non ne esista nessuno: per un problema NP-hard non ci aspettiamo un algoritmo esatto polinomiale.

1.6.1 Algoritmi pseudo-polinomiali e problemi NP-hard in senso forte

  • Alcuni problemi NP-hard si possono risolvere in tempo polinomiale in \(n\) e nel valore dei numeri dell'istanza. Per esempio, un algoritmo che richiede tempo \(O(n\,M)\), dove \(M\) è il numero più grande dell'istanza, non è polinomiale: \(M\) è esponenziale nel suo numero di bit \(\log_2 M\).

Definizione 1.8: algoritmo pseudo-polinomiale, problemi NP-hard in senso debole e forte

  1. Un algoritmo è pseudo-polinomiale se il suo tempo di esecuzione è limitato da un polinomio nella dimensione dell'istanza e nel numero più grande che vi compare.

  2. Un problema NP-hard è NP-hard in senso forte se resta NP-hard quando tutti i suoi numeri sono limitati da un polinomio nella dimensione dell'istanza (equivalentemente, quando i numeri sono scritti in unario). Altrimenti, se ammette un algoritmo pseudo-polinomiale, si dice NP-hard in senso debole (NP-hard in senso ordinario).

  • Un problema NP-hard in senso forte non ha algoritmi pseudo-polinomiali, a meno che \(P = NP\).

Che un problema sia NP-hard non significa che un'istanza non si possa risolvere: significa che non ci aspettiamo un algoritmo che risolva ogni istanza in tempo polinomiale. In pratica combiniamo metodi esatti che chiudono il gap fra bound primali e duali, euristiche che trovano rapidamente buone soluzioni, e algoritmi di approssimazione che garantiscono un gap limitato nel caso peggiore.

  • I problemi dei prossimi capitoli sono tutti NP-hard: il problema dello zaino 0/1 è NP-hard in senso debole, mentre il bin packing, la colorazione dei vertici, la clique massima e il problema del commesso viaggiatore sono NP-hard in senso forte. Ogni capitolo discute la complessità del suo problema.

1.7 Errori tipici

Attenzione

  • Confondere soluzioni candidate e ammissibili. I numeri \(2^n\), \((n-1)!/2\) e \(B(n)\) contano le candidate; le soluzioni ammissibili possono essere molte meno, per esempio \(11\) sottoinsiemi su \(16\) nell'Esempio 1.1.

  • Scambiare i due versi dei bound. In un problema di massimo un bound primale è un lower bound e un bound duale è un upper bound; in un problema di minimo i ruoli si scambiano.

  • Arrotondare un bound duale quando l'obiettivo non è intero. L'arrotondamento dell'Osservazione 1.6 richiede \(f(S) \in \Z\) per ogni soluzione ammissibile.

  • Contare due volte soluzioni equivalenti. Un ordinamento ciclico e il suo inverso sono lo stesso ordinamento ciclico, e due assegnamenti che differiscono per una ridenominazione di etichette intercambiabili sono la stessa soluzione.

  • Leggere NP-hard come irrisolvibile. Essere NP-hard è un'affermazione sul caso peggiore: molte istanze di dimensione pratica si risolvono, e il resto del corso mostra come.

1.8 In sintesi

In sintesi

  • Un problema di ottimizzazione combinatoria ha un insieme base finito, una famiglia di sottoinsiemi ammissibili e una funzione obiettivo; una soluzione ottima esiste quando esiste una soluzione ammissibile.

  • La categoria delle decisioni dà l'oggetto combinatorio di una soluzione: un sottoinsieme, un vettore di quantità intere, un assegnamento, un ordinamento o una partizione.

  • Le soluzioni candidate sono \(2^n\) sottoinsiemi, \(n!\) ordinamenti, \((n-1)!/2\) ordinamenti ciclici e \(B(n)\) partizioni: la forza bruta funziona solo su istanze molto piccole.

  • Una soluzione ammissibile dà un bound primale, un rilassamento o un argomento combinatorio dà un bound duale; un gap nullo certifica che la soluzione ammissibile è ottima.

  • I problemi del corso sono NP-hard: per essi non ci aspettiamo un algoritmo esatto polinomiale.

Quadro riassuntivo della piccola istanza.

Esempio 1.1 (max) lower bound upper bound da
primi bound \(11\) \(14\) scelta greedy, uno dei pesi \(7\) e \(6\)
bound finali \(13\) \(13\) soluzione \(\{2,3,4\}\), argomento sulla cardinalità


Esercizi su questo capitolo: Ottimizzazione combinatoria