Die Big-O-Notation wird verwendet, um die Rechenkomplexität eines Programms oder einer Datenstruktur anzugeben. Das bedeutet im Grunde: Wie viele Schritte werden benötigt, um eine bestimmte Aktion auszuführen.
Big O notation is the language we use for talking about the efficiency of data structures and algorithms.
Die Big O Notation ist eine mathematische Notation (ein
beschreibender Ausdruck - Darstellung von Rechenoperationen,
Bewegungsverläufen und Reihenfolgen anhand von Formeln), welche das
Limit einer Funktion beschreibt, wenn das Argument/der Fall zu einem
bestimmten Wert oder Undendlichkeit tendiert. Bestimmte Operationen
können mehr oder weniger gut performen, abhängig von ihrer
Datenstruktur/ ihrem Algorithmus. The Big O hilft uns dabei die
Performance eines Algorythmus zu beschreiben und zu bestimmen, ob er
skalierbar ist oder nicht.
Die Big O Notation wird von Entwicklern verwendet, um zu
kommunizieren, wie gut ihr Programm mit einer Zunahme der Eingaben
umgeht (wichtig bei großen Datenmengen). Sie kann ein Maß dafür
sein, wie schnell ein Programm läuft ("Runtime-Complexity") oder wie
viel Speicherplatz(Memory) es verbraucht ("Space-Complexity").
Kurz gesagt: Wenn ein Programm in der Lage ist, eine immer größere
Menge an Eingaben in der gleichen Zeit wie eine kleine Menge an
Eingaben zu verarbeiten, wird es gemäß der Big O Notation gut
abschneiden.
Mit der Big O Notation können wir die Komplexität unseres Codes
ausdrücken. Meist geht es um einen Kompromiss zwischen Speicher und
Zeit.
Die Komplexität steigt, wenn...
- Variablen zugewiesen werden
- neue Datenstrukturen kreiert werden
- Funktionen aufgerufen und zugewiesen werden
O(1) space
z.B.
public void greet (String[ ] names){
for (int i= 0; i< names.length; i++)
sout("hi"+ names[i]);
}
O (n) space
z.B.
public void greet (String[ ] names){
String[ ] copy = new String [names.length];
for (int i = 0; i< names.length; i++)
sout("hi"+ names[i]);
}
Je mehr Items im Array sind, desto mehr Space wird benötigt. Wir
betrachten nur den zusätzlichen Space, den wir zuweisen müssen,
relativ gesehen zur Inputgröße.