0 Daumen
278 Aufrufe

Was es bedeutet, wenn ein Algorithmus eine amortisierte Laufzeit in O(1) hat

und wenn ein Algorithmus eine Laufzeit in O(1) hat??

Avatar von

1 Antwort

0 Daumen
 
Beste Antwort

\(O(1)\) bedeutet konstante Laufzeit. Das heißt, die Laufzeit ist nicht abhängig von der Größe der Eingabe.

Beispiel. Zugriff auf ein Element eines std:array anhand der Position innerhalb des Arrays. Anhand der Adresse des Arrays und des Position des Elementes kann mittels Addition die Adresse des Elements berechnet werden. Ist die Addition \(O(1)\), dann ist auch die Ermittlung der Adresse des Elements \(O(1)\).

Gegenbeispiel. Zugriff auf ein Element einer std::list anhand der Position innerhalb der Liste. Die Liste muss elementweise vom ersten Element aus durchwandert werden bis die gewümschte Position erreicht wurde.

Amortisiert \(O(1)\) bedeutet, dass die Laufzeit für einen einzelnen Zugriff lange sein kann, aber die Gesamtlaufzeit für \(m\) Zugriffe die Laufzeit \(O(m)\) benötigt.

Beispiel. Hinzufügen eines Elements ans Ende eines std::vector. Dieser Datentyp verhält sich größtenteils wie ein Array, kann aber dynamisch vergrößert werden. Dazu wird eventuell Speicher reserviert und das zugrunde liegende Array an die neue Stelle kopiert. Das ist zwar teuer. Allerdings wird die neue Größe des Arrays berechnet indem die alte Größe mit einem Faktor m multipliziert wird. Dadurch ist es nicht bei jedem Hinzufügen eines Elements notwendig, das Array zu kopieren.

Avatar von 107 k 🚀

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community