Asymptotische Analyse
Dieser Begriff bezieht sich auf die Analyse der Algorithmusleistung unter der Annahme, dass die Daten, mit denen der Algorithmus arbeitet (die Eingabe ), für Laien "groß genug sind, dass eine Vergrößerung die Schlussfolgerung nicht ändert". Obwohl die genaue Größe der Eingabe nicht angegeben werden muss (wir brauchen nur eine obere Schranke), der Datensatz selbst hat angegeben werden.
Beachten Sie, dass bisher haben wir nur über die gesprochene Methode der Analyse; Wir haben nicht genau angegeben, welche Größe wir analysieren (Zeitkomplexität? Raumkomplexität?), und wir haben auch nicht angegeben, an welcher Metrik wir interessiert sind (Worst Case? Best Case? Durchschnitt?).
In der Praxis bezieht sich der Begriff asymptotische Analyse üblicherweise auf die zeitliche Komplexität der Obergrenze eines Algorithmus, dh die Leistung im ungünstigsten Fall, gemessen anhand der Gesamtlaufzeit, die durch die Big-Oh-Notation dargestellt wird (z. B. ein Sortieralgorithmus O(nlogn)
).
Amortisierte Analyse
Dieser Begriff bezieht sich auf die Analyse der Algorithmusleistung basierend auf einer bestimmten Abfolge von Operationen, die auf das Worst-Case-Szenario abzielen. Das heißt, eine amortisierte Analyse impliziert, dass die Metrik die Worst-Case-Leistung ist (obwohl immer noch nicht angegeben ist, welche Menge gemessen wird ). Um diese Analyse durchzuführen, müssen wir die Größe der Eingabe angeben , aber wir müssen keine Annahmen über ihre Form treffen.
Für Laien bedeutet die amortisierte Analyse, eine beliebige Größe für die Eingabe auszuwählen und dann den Algorithmus "durchzuspielen". Immer wenn eine Entscheidung getroffen werden muss, die von der Eingabe abhängt, wird der schlechteste Weg eingeschlagen¹. Nachdem der Algorithmus vollständig ausgeführt wurde, teilen wir die berechnete Komplexität durch die Größe der Eingabe, um das Endergebnis zu erhalten.
¹note: Um genau zu sein, der schlechteste Weg , der theoretisch möglich ist . Wenn Sie einen Vektor haben, dessen Größe sich jedes Mal dynamisch verdoppelt, wenn seine Kapazität erschöpft ist, bedeutet "Worst Case" nicht, dass er sich bei jeder Einfügung verdoppeln muss, da die Einfügungen als Sequenz verarbeitet werden. Wir dürfen (und müssen) bekannten Zustand verwenden , um so viele "noch schlimmere" Fälle wie möglich mathematisch zu eliminieren, auch wenn die Eingabe unbekannt bleibt.
Der wichtigste Unterschied
Der entscheidende Unterschied zwischen asymptotischer und amortisierter Analyse besteht darin, dass die erstere von der Eingabe selbst abhängt, während die letztere von der Abfolge der Operationen abhängt, die der Algorithmus ausführen wird.
Deshalb:
- Die asymptotische Analyse erlaubt es uns zu behaupten, dass die Komplexität des Algorithmus, wenn ihm eine Eingabe für den besten / schlechtesten / durchschnittlichen Fall einer Größe nahe N gegeben wird, durch eine Funktion F (N) begrenzt ist - wobei N eine Variable ist
- Die amortisierte Analyse ermöglicht es uns zu behaupten, dass die Komplexität des Algorithmus, wenn er eine Eingabe mit unbekannten Merkmalen, aber bekannter Größe N erhält, nicht schlechter ist als der Wert einer Funktion F (N) - wobei N ein bekannter Wert ist