Big-O-Notation

Unabhängig davon, ob man sich das Programmieren im Selbststudium beibringt oder ob man im Informatikstudium damit konfrontiert wird, irgendwann trifft man auf die Big-O-Notation.

Was ist die Big-O-Notation?

Aber was versteht man unter der Big-O-Notation? Bei der Entwicklung bzw. der Auswahl eines Algorithmus kommt es auf die Frage an, wie schnell dieser ist. Hinsichtlich der Geschwindigkeit, wie auch der Größe des verwendeten Speichers, wird als Indikator die Big-O-Notation verwendet.

Dies ermöglicht eine Aussage darüber,

  • wie performant ein Algorithmus ist, wenn sich die Zahl der durchzuführenden Aufgaben erhöht und
  • wie der Algorithmus hinsichtlich der Geschwindigkeit und der Speichernutzung im Vergleich zu anderen Algorithmen abschneidet.

Nachfolgende Tabelle gibt eine Auskunft über die verwendeten Big-O-Werte:

Big-O-NotationBezeichnungBeschreibung
O(1)konstantDies ist der best mögliche Wert. Es bedeutet, dass der Algorithmus stets die gleiche Zeit benötigt, unabhängig davon, wie viele Daten verarbeitet werden müssen.
O(log n)logarithmischDies ist ein ziemlich guter Wert. Diese Art von Algorithmen halbieren die vorhanden Daten bei jedem Durchlauf (Beispiel: Binär-Suche). Selbst bei einer großen Datenmenge ist ein solcher Algorithmus sehr schnell.
O(n)linearAuch dieser Algorithmus hat eine gute Performance. Eine Verdopplung der vorhanden Daten führt zu eine Verdoppelung der benötigten Zeit (Beispiel: Sequentielle Suche)
O(n log n)loglinearDies ist ein noch annehmbarer Wert, wenn auch nicht so gut wie bei der linearen Big-O-Notation.
O(n2)quadratischVon nun an geht es “den Bach runter”. Dieser Algorithmus ist langsam. Eine Verdoppelung der vorhandenen Daten führt zu einer Vervierfachung der aufzuwendenden Zeit. (Beispiel: Algorithmen, die verschachtelte Schleifen verwenden.)
O(n3)kubischDies ist eine schlechte Performance. Eine Verdoppelung der Daten führt zu einer Verachtfachung der Zeit.
O(2n)exponentiellUnd es wird nicht besser. Diese Algorithmen sollte man eher vermeiden. Nur das Hinzufügen eines Bits verdoppelt die aufzuwendende Zeit.

Nachfolgende Abbildung verdeutlicht die Big-O-Werte grafisch.

big-o-notation

Als Faustformel für die Praxis kann man sich merken, dass ein Algorithmus, der über alle n-Elemente einer Eingabe in einer Schleife iteriert, den Wert O(n) hat. Bei zwei verschachtelten Schleifen ist man beim Wert O(n2), bei drei verschachtelten Schleifen bei O(n3), usw.

Man sollte aber bedenken, dass die Orientierung anhand der Big-O-Notation nur bei einer sehr hohen Anzahl von n-Elementen aussagekräftig ist.

Anmerkung: Die Grafik wurde übrigens mit Python und matplotlib erstellt. Den Code dafür könnt Ihr Euch bei Github ansehen.

Zuletzt aktualisiert am 11. Juli 2020