Paradigmi per l'analisi della complessità degli algoritmi


16

L'analisi dei casi peggiori e dei casi medi sono misure ben note per la complessità di un algoritmo. L'analisi recentemente lisciata è emersa come un altro paradigma per spiegare perché alcuni algoritmi che sono esponenziali nel caso peggiore funzionano così bene nella pratica, ad esempio l'algoritmo simplex.

La mia domanda è: ci sono altri paradigmi per misurare la complessità di un algoritmo? Sono particolarmente interessato a quelli che tentano di spiegare perché alcuni algoritmi che presentano una complessità nel peggiore dei casi funzionano bene nella pratica.

Risposte:


21

Esistono anche varianti naturali dell'analisi del caso peggiore che sono utili. Forse il più famoso è la complessità parametrizzata. Qui, consideriamo una misura "bidimensionale": la solita lunghezza di inputn e alcuni numeri interi non negativi aggiuntivi K, il parametro. Anche se un algoritmo può funzionare in modo orribile nel peggiore dei casi (per tutti i valori din e K), potrebbe essere che tutti i casi nella propria applicazione che devono essere risolti, questo parametro K sembra essere basso, quindi l'algoritmo funziona bene su quelle istanze.

Ad esempio, supponiamo di voler risolvere il set indipendente massimo su una classe di grafici e sviluppare un algoritmo interessante che è sorprendentemente veloce. Esaminando ulteriormente la classe dei grafici stessi, scopri che tutti i grafici esaminati hanno la larghezza degli alberi al massimo10. Bene, Bodlaender (cfr. Neidermeier [1]) ha mostrato che quando la larghezza dell'albero è k, Max Independent Set è un parametro fisso trattabile : può essere risolto inO(2K(|E|+|V|))tempo. Questo dà alcune spiegazioni sul perché il tuo algoritmo funziona bene.

[1] R. Niedermeier, Invito a algoritmi a parametri fissi. Oxford Lecture Series in Mathematics and its Applications, Oxford University Press, Oxford, 2006.


15

C'è una complessità ammortizzata - perché alcune operazioni possono essere costose nel peggiore dei casi, ma se si considerano molte operazioni, il costo medio per operazione è buono.

Un esempio classico è una struttura di dati che si svuota quando è piena copiando tutti i suoi elementi in un archivio. L'operazione di copia può essere costosa, ma non accade spesso: è necessario inserire elementi sufficienti nella struttura dei dati per provocarla.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.