Laufzeiten von Algorithmen?
Verstehe ich das richtig, wenn ich z. B. ein Array mit 8 Elementen habe, z. B.
11, 25, 33, 42, 54, 58, 67, 96, und jetzt wissen will, wie viele Vergleiche die Binäre Suche braucht, um das Element 11 zu finden, kann ich dann einfach die Komplexitätsklasse zu Hilfe nehmen? Also hier O(log n) und da es 8 Elemente sind, brauche ich hier 3 Vergleiche, da O(log2(8)) = 3 ist? In dem Fall haut es doch hin, da es bei der Suche der 11 nicht um den Best Case O(1) handelt, weil die 11 nicht in der Mitte steht.
Falls das richtig ist, klappt das immer? Also bei anderen Algorithmen auch, zumindest wenn ich den Fall (Best, Worst und Average) erkenne und dann die entsprechende Komplexität nutze?
1 Antwort
Nein, das klappt nicht immer. Komplexitätsklassen beschreiben das Laufzeitverhalten von Algorithmen nur grob für große Eingaben, sind also nicht akkurat, weil kleinere Faktoren entfallen.
Ein Algorithmus mit 3*n + log(n) + 5 Schritten wäre beispielsweise in der Komplexitätsklasse O(n), braucht aber offensichtlich mehr als n Schritte.
Nein, funktioniert nicht. Bubble Sort zum Beispiel ist im worst case O(n^2), braucht aber nur n^2 - n Schritte. Ich glaube nicht, dass du die konkrete Anzahl von Schritten angeben musst, und wenn doch, vermutlich in Verbindung mit einem kompletten Sortiervorgang des Algorithmus. Wenn du den auf dem Papier ausführst, solltest du die Anzahl der Schritte einfach ablesen können :)
vielleicht hab ich mit den sortieralgos zu weit gegriffen, bis jetzt gabs es immer eine aufgabe wo ich lineare und binäre suche vergleichen musst und angeben musste wie viele vergleiche bzw iterationen gebraucht werden im ein element zu finden. lineare suche ist klar ,bei binär bin ich gerade unsicher. Die anzahl der verleiche ergibt sich doch dadruch wie oft ich mein array teilen muss oder?
Ja, schon mehr oder weniger. Bestenfalls eben einmal, schlimmstenfalls log2(n) + 1 (aufgerundet) mal, aber alles was da nicht reinfällt muss man eben manuell nachrrechnen weil es von den konkreten Elementen abhängt. Die Komplexitätsklassen helfen dir bei sowas wirklich nicht.
kappt meine aussage zumindest bei Binäre,linare suche sowie den einfachen suchalgos(z.b bubble,selection)? Für die Klausur reicht mir das :D