Welche Algorithmen verwenden wir täglich mit O (1) -, O (n log n) - und O (log n) -Komplexitäten?
Welche Algorithmen verwenden wir täglich mit O (1) -, O (n log n) - und O (log n) -Komplexitäten?
Antworten:
Wenn Sie Beispiele für Algorithmen / Gruppen von Anweisungen mit zeitlicher Komplexität wünschen, wie in der Frage angegeben, finden Sie hier eine kleine Liste -
O(1)
ZeitO(n)
ZeitKurz gesagt, alle Brute-Force-Algorithmen oder Noob-Algorithmen, die Linearität erfordern, basieren auf der Komplexität der O (n) -Zeit
O(log n)
ZeitO(n log n)
ZeitDer Faktor 'log n' wird eingeführt, indem Divide and Conquer berücksichtigt wird. Einige dieser Algorithmen sind die am besten optimierten und werden häufig verwendet.
O(n^2)
ZeitDiese sollen die weniger effizienten Algorithmen sein, wenn ihre O (nlogn) Gegenstücke vorhanden sind. Die allgemeine Anwendung kann hier Brute Force sein.
O(log n)
die O(n)
Liste so ändern, dass sie vor der Liste steht, damit die Liste vom Besten zum Schlechtesten geordnet ist. haha :)
Ein einfaches Beispiel dafür O(1)
könnte sein return 23;
: Unabhängig von der Eingabe wird dies in einer festen, endlichen Zeit zurückgegeben.
Ein typisches Beispiel O(N log N)
wäre das Sortieren eines Eingabearrays mit einem guten Algorithmus (z. B. Mergesort).
Ein typisches Beispiel, wenn O(log N)
wäre das Nachschlagen eines Werts in einem sortierten Eingabearray nach Halbierung.
O (1) - Die meisten Kochvorgänge sind O (1), das heißt, es dauert eine konstante Zeit, auch wenn mehr Personen zum Kochen da sind (bis zu einem gewissen Grad, weil Ihnen in Ihrem Topf / Ihren Pfannen möglicherweise der Platz ausgeht und müssen das Kochen aufteilen)
O (logn) - etwas in Ihrem Telefonbuch finden. Denken Sie an die binäre Suche.
O (n) - Lesen eines Buches, wobei n die Anzahl der Seiten ist. Es ist die Mindestzeit, die zum Lesen eines Buches benötigt wird.
O (nlogn) - Ich kann nicht sofort an etwas denken, das man jeden Tag tun könnte, das nlogn ist ... es sei denn, Sie sortieren Karten durch Zusammenführen oder schnelles Sortieren!
Ich kann Ihnen einige allgemeine Algorithmen anbieten ...
Dies wären die Bauchreaktionen, da dies nach einer Art Hausaufgaben- / Interviewfrage klingt. Wenn Sie nach etwas Konkreterem suchen, ist es etwas schwieriger, da die Öffentlichkeit im Allgemeinen keine Ahnung von der zugrunde liegenden Implementierung (natürlich Sparing Open Source) einer beliebten Anwendung hat und das Konzept im Allgemeinen auch nicht für eine "Anwendung" gilt.
O (1): Finden Sie den besten nächsten Zug im Schach (oder gehen Sie für diese Angelegenheit). Da die Anzahl der Spielzustände endlich ist, ist es nur O (1) :-)
O(1)
Nanosekunden leben werde , und Sie wissen sicherlich, welche O(1)
zuerst auftreten werden ...
Die Komplexität der Softwareanwendung wird nicht gemessen und nicht in Big-O-Notation geschrieben. Es ist nur nützlich, die Komplexität von Algorithmen zu messen und Algorithmen in derselben Domäne zu vergleichen. Wenn wir O (n) sagen, meinen wir höchstwahrscheinlich "O (n) Vergleiche " oder "O (n) arithmetische Operationen". Das heißt, Sie können kein Paar von Algorithmen oder Anwendungen vergleichen.
0 (logn) - Binäre Suche, Peak-Element in einem Array (es kann mehr als einen Peak geben) 0 (1) - In Python wird die Länge einer Liste oder eines Strings berechnet. Die len () -Funktion benötigt 0 (1) Zeit. Der Zugriff auf ein Element in einem Array dauert 0 (1) Mal. Der Push-Vorgang in einem Stapel dauert 0 (1). 0 (nlogn) - Sortierung zusammenführen. Das Sortieren in Python dauert nicht lange. Wenn Sie also listname.sort () verwenden, dauert es nicht lange.
Das Durchsuchen von Notizen in einer Hash-Tabelle dauert aufgrund von Kollisionen manchmal mehr als konstant.
O (2 N )
O (2 N ) bezeichnet einen Algorithmus, dessen Wachstum sich mit jeder Addition zum Eingabedatensatz verdoppelt. Die Wachstumskurve einer O (2 N ) -Funktion ist exponentiell - sie beginnt sehr flach und steigt dann meteorisch an. Ein Beispiel für eine O (2 N ) -Funktion ist die rekursive Berechnung von Fibonacci-Zahlen:
int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
Tower of Hanoi
wäre ein besseres Beispiel gewesen.