Alle Größenordnungen beinhalten ein konstantes , von denen einige tatsächlich sind. Wenn die Anzahl der Elemente groß genug ist, ist diese Konstante irrelevant. Die Frage ist, ob die Anzahl der Elemente klein genug ist, um diese Konstante zu dominieren.C
Hier ist eine visuelle Möglichkeit, darüber nachzudenken.
Alle haben eine Startkonstante, die ihren Startpunkt auf der Y-Achse bestimmt. Jedes hat auch eine kritische Konstante die bestimmt, wie schnell es zunimmt.C
- Für , C bestimmt die Zeit.O ( 1 )C
- ist wirklich C × n , wobei C den Winkel bestimmt.O ( n )C× nC
- ist wirklich ( C × n ) 2 , wobei C die Schärfe der Kurve bestimmt.O ( n2)( C× n )2C
Um zu bestimmen, welchen Algorithmus Sie verwenden sollten, müssen Sie die Stelle abschätzen, an der sich die Laufzeiten schneiden. Beispielsweise verliert eine -Lösung mit einer hohen Startzeit oder einem hohen C an eine O ( n ) -Lösung mit einer niedrigen Startzeit und einem niedrigen C bei einer relativ großen Anzahl von Elementen.O ( 1 )CO ( n )C
Hier ist ein Beispiel aus der Praxis. Sie müssen einen Haufen Steine über einen Hof bewegen. Sie können sie einzeln mit Ihren Händen bewegen oder mit einem großen, langsamen Baggerlader auf einmal heben und überfahren. Was ist Ihre Antwort, wenn es drei Steine gibt? Was ist Ihre Antwort, wenn es dreitausend gibt?
Hier ist ein CS-Beispiel. Angenommen, Sie benötigen eine Liste, die immer sortiert ist. Sie könnten einen Baum verwenden, der sich in der Reihenfolge . Oder Sie können eine unsortierte Liste verwenden und nach jedem Einfügen oder Löschen bei O ( n log n ) neu sortieren . Da Baumoperationen kompliziert sind (sie haben eine hohe Konstante) und die Sortierung so einfach ist (niedrige Konstante), wird die Liste wahrscheinlich Hunderte oder Tausende von Elementen enthalten.O ( logn )O ( n logn )
Sie können so etwas beobachten, aber am Ende ist Benchmarking das, was es tun wird. Sie müssen auch die Anzahl der Artikel ermitteln, die Sie normalerweise haben, und das Risiko verringern, dass Sie mehr erhalten. Sie sollten auch Ihre Annahme dokumentieren, dass "die Leistung bei Elementen rapide abnimmt" oder "wir nehmen eine maximale festgelegte Größe von X an ".XX
Da sich diese Anforderungen ändern können, ist es wichtig, diese Art von Entscheidungen hinter eine Schnittstelle zu stellen. Machen Sie im obigen Baum- / Listenbeispiel den Baum oder die Liste nicht verfügbar. Auf diese Weise können Sie Ihre Meinung ändern, wenn sich Ihre Annahmen als falsch herausstellen oder Sie einen besseren Algorithmus finden. Sie können sogar einen hybriden und dynamischen Algorithmuswechsel durchführen, wenn die Anzahl der Elemente zunimmt.