Was ist Amortized Analysis? Und wie kann es mir helfen , in meinen Programmen Worst-Case-Leistungsgarantien zu erzielen ?
Ich habe gelesen, dass die folgenden Techniken dem Programmierer helfen können, Garantien für die Leistung im schlimmsten Fall zu erzielen (dh in meinen eigenen Worten: Gewährleisten, dass die Laufzeit eines Programms die Laufzeit in der schlechtesten Besetzung nicht überschreitet):
- Randomisierte Algorithmen (zB Quicksort-Algorithmus ist im schlimmsten Fall quadratisch, aber zufällige Reihenfolge der Eingabe gibt eine Wahrscheinlichkeitsgarantie dafür, dass die Laufzeit linearithmisch ist)
- Abläufe (unsere Analyse muss sowohl die Daten als auch den Ablauf der vom Kunden durchgeführten Abläufe berücksichtigen)
- Amortized Analysis (eine andere Möglichkeit, eine Leistungsgarantie zu geben, besteht darin, die Kosten zu amortisieren, indem die Gesamtkosten aller Vorgänge geteilt durch die Anzahl der Vorgänge nachverfolgt werden. In dieser Einstellung können wir einige kostspielige Vorgänge zulassen, während die durchschnittlichen Kosten beibehalten werden.) Mit anderen Worten, wir verteilen die Kosten der wenigen teuren Vorgänge, indem wir einen Teil davon einer großen Anzahl kostengünstiger Vorgänge zuweisen.)
Der Autor erwähnte die Verwendung der Größenänderung der Array-Datenstruktur für Stack als ein Beispiel dafür, wie eine amortisierte Analyse erzielt werden kann, aber ich verstehe immer noch nicht, was eine amortisierte Analyse ist und wie sie tatsächlich implementiert werden kann (Datenstruktur-? Algorithmus?), Um das Schlechteste zu erreichen Leistungsgarantien
quelle