Frage Wir haben zwei Sortieralgorithmen. Die Laufzeit von Algorithm Ist während Algorithmus Laufzeit hat . Nehmen Sie diesen Algorithmus an und Algorithmus nehmen zweitens zu sortieren Zahlen. Wie lange würde es dauern, bis jeder Algorithmus a) aussortiert? Zahlen b) Zahlen?
Kommentare Mir ist klar, dass dies eine einfache Frage sein mag, aber ich fange gerade erst mit diesem Material an. Für einen Hinweis oder eine vollständige Antwort wäre ich dankbar.
Wie es heißt, lautet die Antwort "wir wissen es nicht". Es folgt aus der Notation - grob gesagt, Sie haben nicht genug Informationen, um auf irgendetwas zu schließen. Sie kennen nur das asymptotische Verhalten und nicht einmal die Konstanten.
Algorithmus 1 könnte genauso schnell sein wie Algorithmus 2 solange ist kleiner als, sagen wir, , und bricht dann zusammen.
Schlimmer noch, die Big-Oh-Notation ist nur eine Obergrenze. Soweit wir wissen, könnten beide die gleiche Laufzeit haben , da wenn Algorithmus 1 Laufzeit hätte , es hätte trivialerweise auch Laufzeit .
Sie haben zwei Antworten gesehen, die veranschaulichen, dass Big-O-Timing-Schätzungen nicht viel über die tatsächlichen Laufzeiten aussagen, aber um zu veranschaulichen, wie groß der Unterschied zwischen den tatsächlichen Bestellungen ist, lassen Sie uns auf die Big-O-Schätzungen verzichten und annehmen, dass wir es tatsächlich wüssten dass Algorithmus 1 genau genommen hat Sekunden zu sortieren Zahlen und Algorithmus 2 nahm genau Sekunden zu sortieren Zahlen (ich habe log zur Basis zehn gewählt, um die Berechnungen zu vereinfachen; die Wahl einer anderen Basis würde nur die Konstante ändern ).
Wenn Algorithmus 2 zum Sortieren 1 Sekunde brauchte Zahlen, hätten wir
Nun wollen wir sehen, was passiert, wenn wir sortieren Zahlen. Algorithmus 1 übernimmt
Bei größeren Eingaben wird der Zeitunterschied sogar noch dramatischer. Mit Zahlen zu sortieren, können Sie ausrechnen, dass Algorithmus 1 ungefähr 31688 Jahre brauchen würde , während Algorithmus 2 ungefähr 34,7 Tage brauchen würde.
Beachten Sie, dass Algorithmus 1 einen viel kleineren konstanten Multiplikator als Algorithmus 2 hatte, aber auf lange Sicht war das nicht annähernd so wichtig wie die asymptotische Reihenfolge ihrer Laufzeiten. Einfach gesagt, ein Algorithmus wird schließlich ein schlagen Algorithmus, egal wie das konstante Vielfache ist.
Mathematisch, groß- Notation funktioniert so nicht. bezeichnet eine Äquivalenzklasse von Funktionen basierend auf ihrer Asmyptotik.
Also zum Beispiel definiert von gehört . Ebenso die Funktion definiert von .
Also zwei verschiedene Algorithmen, die Zeit brauchen kann für eine bestimmte Aufgabe immer noch eine sehr unterschiedliche Leistung haben. Der große- Notation soll die Skalierbarkeit dieser Algorithmen als erfassen .
Wenn Sie dies jedoch für eine praktische Anwendung verwenden, wird die multiplikative Konstante vorne wahrscheinlich nicht zu groß sein. Ignorieren der kann oft eine vernünftige Intuition geben, wie lange der Algorithmus dauern wird.
Wir könnten uns also annähern, dass die Der Algorithmus würde einige Zeit in Anspruch nehmen herstellen Gegenstände und die Der Algorithmus würde einige Zeit in Anspruch nehmen herstellen Artikel.
In den meisten realen Fällen wird der Vergleich nicht allzu schlecht sein, aber andererseits könnte er auch schrecklich sein.
AndreasH.