Big Oh (n log n)
Ich studiere zurzeit grundlegende algorithmen für die Big-Oh. Ich Frage mich, wenn jemand kann mir zeigen, wie der code für (n log n) in Java mit Big Oh wäre wie oder mich direkt auf jeder Seite SO, wo einer vorhanden ist.
Da bin ich nur ein Anfänger, ich kann mir nur vorstellen, den code, bevor ich es schreiben. Also, theoretisch (mindestens), es sollte eine for-Schleife, wo wir etwas n-mal. Dann für das Protokoll n, können wir die while-Schleife. So dann wird die Schleife n-mal ausgeführt und die while-Schleife wird ausgeführt, log base 2-mal. Mindestens das ist, wie ich vorstellen, es in meinem Kopf zu sehen, aber der code würde sich aufklären.
- Ich bin mir nicht sicher, ob ich Sie richtig verstanden habe. Fragen Sie ein Beispiel für einen Algorithmus eine Zeitkomplexität in O(n log n)?
- Versuchen Sie, um zu studieren jede gut Sortier-Algorithmus wie merge-sort. Folgende link kann Ihnen helfen, stackoverflow.com/questions/1592649/...
- Ja. Ich will einfach nur, um zu sehen, wie der code Aussehen würde in einem Java-Programm.
- Es gibt viele solcher algorithmen, und Sie müssen nicht unbedingt Aussehen/die gleiche Arbeit. Hier sind einige Beispiele finden Sie: Quick-Sort und Merge-Sort.
- Wir werden ich verstehe den Algorithmus theoretisch (mehr oder weniger), aber ich will einfach nur, um zu sehen, wie der Algorithmus geschrieben werden, die in einem Java-Programm.
- Wenn Sie wollen einfach nur ein Beispiel-code, versuchen Sie, google es aus. Ich bin sicher, du wirst es finden.
- Ich habe. Ich fand Beispiel von vielen anderen Großen Oh-algorithmen wie O(n^2) aber nicht O(n log n).
- code2learn.com/2011/07/merge-sort-using-java.html
- Sie werden wahrscheinlich brauchen, um zu lernen, über Rekursion, bevor Sie zu schätzen wissen die meisten O(n log n) - algorithmen. Sie nicht bestehen in der Regel aus zwei verschachtelten explizite Schleifen.
- Es klingt wie Sie möglicherweise ein wenig verwirrt. O-notation ist kein Algorithmus, es ist eine Metrik, die beschreibt algorithmen. So, Sie nicht implementieren O(n log n) -- implementieren Sie einen Algorithmus, der möglicherweise eine garantierte performance von O(n log ). Verwenden Sie ein Gehäuse Analogie, die Sie nicht bauen 20 Fuß, Sie ein Haus bauen und dann Messen, wie viele Meter groß Sie ist.
- +1 für das Studium "grundlegende algorithmen für die Big-Oh"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erklärung:
Die äußere for-Schleife sollte klar sein; es ist ausgeführt
n
Zeiten. Nun zu den inneren Schleife. In der inneren Schleife, nehmen Sien
und immer teilen es durch2
. Also, Fragen Sie sich: Wie oft kann ich teilenn
durch2
?Es stellt sich heraus, dass dies
O (log n)
. In der Tat, die Basis derlog
ist2
, aber in der Big-O-notation, ziehen wir die base, da es fügt nur Faktoren, die unserelog
dass wir nicht interessiert sind.So, Sie sind der Ausführung einer Schleife
n
Zeiten, und in dieser Schleife, Sie sind der Ausführung einer anderen Schleifelog(n)
Zeiten. Also, Sie habenO(n) * O(log n) = O(n log n)
.Einem sehr beliebten O(n log n) Algorithmus merge-sort. http://en.wikipedia.org/wiki/Merge_sort zum Beispiel der Algorithmus und pseudocode. Die log-n-Teil des Algorithmus wird erreicht durch den Abbau des Problems in kleinere Teilprobleme, in denen die Höhe des rekursions-Baum ist log n.
Eine Menge für die Sortierung algortihms hat die Laufzeit O(n log n). Finden Sie http://en.wikipedia.org/wiki/Sorting_algorithm weitere Beispiele.
Algorithmen mit einer
O(.)
Zeit Komplexität mitlog n
's in der Regel um eine form von Teile und herrsche.Beispielsweise in MergeSort die Liste halbiert, jedes Teil wird einzeln merge sortiert und dann die beiden Hälften werden wieder zusammengefügt. Jede Liste ist halbiert.
Wann immer Sie arbeiten, halbiert oder reduziert in der Größe durch einen festen Faktor, Sie werden in der Regel am Ende mit einem
log n
Komponente derO(.)
.In Bezug auf code, werfen Sie einen Blick auf den Algorithmus MergeSort. Das wichtigste Merkmal, typische Implementierungen ist, dass Sie rekursiv ist (beachten Sie, dass
TopDownSplitMerge
ruft sich selbst zweimal in den code auf Wikipedia).Alle guten standard-algorithmen zur Sortierung haben
O(n log n)
Zeit, die Komplexität und es ist nicht besser, im schlimmsten Fall, siehe Vergleich Art.Um zu sehen, was das sieht aus wie in Java-code, nur Suche! Hier ein Beispiel:.
http://en.wikipedia.org/wiki/Heapsort
Einfaches Beispiel ist genau wie Sie beschrieben - ausführen mal n paar Vorgang, bei dem log(n) Zeit.
Ausgeglichene binäre Bäume log(n) Höhe, also einige Baum-algorithmen haben eine solche Komplexität.