Jede Antwort, die derzeit auf diese Frage antwortet, besagt, dass dies O(1)
eine konstante Zeit bedeutet (was auch immer mit der Messung geschieht; Laufzeit, Anzahl der Vorgänge usw.). Dies ist nicht korrekt.
Zu sagen, dass Laufzeit O(1)
bedeutet, dass es eine Konstante gibt c
, bei der die Laufzeit c
unabhängig von der Eingabe oben begrenzt ist . Die Rückgabe des ersten Elements eines Arrays von n
Ganzzahlen lautet beispielsweise O(1)
:
int firstElement(int *a, int n) {
return a[0];
}
Aber diese Funktion ist O(1)
auch:
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
Die Laufzeit ist hier oben auf 1 Jahr begrenzt, aber die meiste Zeit liegt die Laufzeit in der Größenordnung von Nanosekunden.
Zu sagen, dass Laufzeit O(n)
bedeutet, dass es eine Konstante gibt c
, bei der die Laufzeit oben durch begrenzt ist c * n
, wobei n
die Größe der Eingabe gemessen wird. Das Ermitteln der Anzahl der Vorkommen einer bestimmten Ganzzahl in einem unsortierten Array von n
Ganzzahlen mithilfe des folgenden Algorithmus lautet beispielsweise O(n)
:
int count(int *a, int n, int item) {
int c = 0;
for(int i = 0; i < n; i++) {
if(a[i] == item) c++;
}
return c;
}
Dies liegt daran, dass wir das Array durchlaufen müssen, um jedes Element einzeln zu untersuchen.