Paradigmen zur Komplexitätsanalyse von Algorithmen

16

Die Worst-Case- und Average-Case-Analyse sind bekannte Maßstäbe für die Komplexität eines Algorithmus. Die kürzlich geglättete Analyse hat sich als weiteres Paradigma herausgestellt, um zu erklären, warum einige im schlimmsten Fall exponentielle Algorithmen in der Praxis so gut funktionieren, beispielsweise der Simplex-Algorithmus.

Meine Frage ist - gibt es andere Paradigmen, um die Komplexität eines Algorithmus zu messen? Mich interessieren vor allem diejenigen, die zu erklären versuchen, warum einige Algorithmen, die im schlimmsten Fall eine schlechte Komplexität aufweisen, in der Praxis gut funktionieren.

Opt
quelle

Antworten:

21

Es gibt natürliche Varianten der Worst-Case-Analyse, die ebenfalls nützlich sind. Das vielleicht bekannteste ist die parametrisierte Komplexität. Hier betrachten wir ein "zweidimensionales" Maß: die übliche Eingabelänge und einige zusätzliche nicht negative ganze Zahlen , den Parameter. Auch wenn ein Algorithmus im schlimmsten Fall (für alle Werte von und ) schrecklich läuft , kann es sein, dass in allen Fällen, die in einer Anwendung gelöst werden müssen, dieser Parameter niedrig ist, sodass der Algorithmus gut läuft in diesen Fällen.k n k knknkk

Angenommen, Sie möchten Maximum Independent Set für eine bestimmte Klasse von Diagrammen lösen und einen interessanten Algorithmus entwickeln, der überraschend schnell ist. Wenn Sie sich näher mit der Klasse der Diagramme befassen, stellen Sie fest, dass alle Diagramme, die Sie untersuchen, zufällig nur eine Baumbreite von höchstens . Nun, Bodlaender (vgl. Neidermeier [1]) hat gezeigt, dass wenn die Baumbreite k ist, die Max Independent Set fest parametrierbar ist : Sie kann in gelöst werden. Dies gibt eine Erklärung, warum Ihr Algorithmus gut funktioniert.10Ö(2k(|E|+|V|))

[1] R. Niedermeier, Einladung zu Algorithmen mit festen Parametern. Oxford Lecture Series in Mathematik und ihre Anwendungen, Oxford University Press, Oxford, 2006.

Ryan Williams
quelle
15

Die Komplexität ist amortisiert - weshalb einige Vorgänge im schlimmsten Fall kostspielig sein können. Wenn Sie jedoch viele Vorgänge berücksichtigen, sind die durchschnittlichen Kosten pro Vorgang gut.

Ein klassisches Beispiel ist eine Datenstruktur, die sich selbst leert, wenn sie voll ist, indem alle ihre Elemente in einen Speicher kopiert werden. Der Kopiervorgang kann teuer sein, kommt aber nicht oft vor - Sie müssen genügend Elemente in die Datenstruktur einfügen, um ihn auszulösen.

Dana Moshkovitz
quelle