Ist O (log n) immer ein Baum?

stimmen
6

Wir sehen immer Operationen auf einem (binäre Suche) Baum hat O (log n) im schlechtesten Fall Laufzeit wegen der Baumhöhe logn ist. Ich frage mich, ob man uns sagt, dass ein Algorithmus als Funktion von log n, zB m + nlogn hat ausgeführt wird, können wir schließen, es muss eine (augmented) Baum einbeziehen?

EDIT: Dank Ihrer Kommentare, merke ich jetzt teilen Herrsche und Binärbaum sind so ähnlich, visuell / konzeptionell. Ich hatte noch nie eine Verbindung zwischen den beiden hergestellt. Aber ich denke, von einem Fall, in dem O (log n) kein divide Herrsche algo, die einen Baum handelt, die keine Eigenschaft eines BST / AVL / rot-schwarz-Baum.

Das ist die disjunkte Satz Datenstruktur mit Suchen / Union Operationen, deren Laufzeit ist O (N + MlogN), wobei N die Anzahl der Elemente und M die Anzahl der Operationen Suche zu sein.

Bitte lassen Sie mich wissen, wenn ich etw fehlt bin, aber ich kann nicht sehen, wie divide Herrsche ins Spiel kommt hier. Ich sehe gerade, in diesem (disjoint Satz) Fall, dass es einen Baum ohne BST Eigenschaft hat und eine Laufzeit eine Funktion von log N ist. Also meine Frage ist, warum / warum nicht ich eine Verallgemeinerung von diesem Fall machen kann.

Veröffentlicht am 22/02/2010 um 05:25
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
7

Nein, Sie können auch binäre ein sortiertes Array suchen (zum Beispiel). Aber nehmen Sie nicht mein Wort für sie http://en.wikipedia.org/wiki/Binary_search_algorithm

Beantwortet am 22/02/2010 um 05:26
quelle vom benutzer

stimmen
3

Als Gegenbeispiel:

given array 'a' with length 'n'
y = 0
for x = 0 to log(length(a))
    y = y + 1
return y

Die Laufzeit ist O (log (n)), aber kein Baum hier!

Beantwortet am 22/02/2010 um 05:28
quelle vom benutzer

stimmen
0

Algorithmen logarithmische Zeit nehmen , werden häufig bei Operationen auf binären Bäumen gefunden.

Beispiele für O (logn):

  • Finding ein Element in einem sortierten Array mit einer binären Suche oder einem ausgewogenen Suchbaum.

  • Zeigte einen Wert in einem sortierten Array von Eingang bisection up.

Beantwortet am 22/02/2010 um 05:40
quelle vom benutzer

stimmen
7

Was Sie haben , ist genau nach hinten. O(lg N)bedeutet in der Regel eine Art von Teile und Herrsche - Algorithmus und einen gemeinsamen Weg teilen der Implementierung und Conquer ist ein binärer Baum. Während Binärbäumen ein wesentlicher Teil aller Teile-und-Herrsche - Algorithmen sind, sind die ohnehin eine Teilmenge.

In einigen Fällen können Sie andere divide verwandeln und Algorithmen ziemlich direkt in binäre Bäume (zB Kommentare auf eine andere Antwort haben bereits einen Versuch gemacht , eine binäre Suche ähnlich zu behaupten ist) erobern. Nur für ein anderes naheliegendes Beispiel ist jedoch ein Mehrweg - Baum (zB ein B-Baum, B + Baum oder B * -Baum), während eindeutig ein Baum ist ebenso eindeutig nicht ein binärer Baum.

Noch einmal, wenn Sie schlecht genug wollen, können Sie den Punkt strecken, dass ein Mehrweg-Baum kann als eine Art einer verzerrten Version eines binären Baum dargestellt werden. Wenn Sie möchten, können Sie wahrscheinlich alle Ausnahmen auf den Punkt strecken sagen, dass alle von ihnen sind (zumindest so etwas wie) Binärbäumen. jedoch zumindest für mich, alles, was tut, ist „Binärbaum“ gleichbedeutend mit „Teile und Herrsche“ machen. Mit anderen Worten, alles, was Sie erreichen, ist Warping das Vokabular und die im Wesentlichen einen Begriff Verwischen, die sowohl unterschiedliche und nützlich ist.

Beantwortet am 22/02/2010 um 06:45
quelle vom benutzer

stimmen
2

Antwort ist nein. Binäre Suche nach einem sortierten Array ist O(log(n)).

Beantwortet am 22/02/2010 um 06:48
quelle vom benutzer

stimmen
0

Als O (log (n)) ist nur eine obere gebundene auch alle O (1) Algorithmen wie function (a, b) return a+b;die Bedingung erfüllen.

Aber ich habe alle Theta (log (n)) einigen Algorithmen irgendwie aussehen wie Baum Algorithmen oder zumindest an einen Baum abstrahiert werden.

Beantwortet am 22/02/2010 um 07:26
quelle vom benutzer

stimmen
0

Kurze Antwort:

Nur weil ein Algorithmus log (n) als Teil seiner Analyse hat, bedeutet nicht, dass ein Baum beteiligt ist. Zum Beispiel ist das folgende ein sehr einfacher Algorithmus, der istO(log(n)

for(int i = 1; i < n; i = i * 2)
  print "hello";

Wie Sie sehen können, wurde kein Baum beteiligt. John stellt auch ein gutes Beispiel dafür, wie binäre Suche kann auf einem sortierten Array durchgeführt werden. Diese beiden nehmen O (log (n)) Zeit, und es gibt andere Code-Beispiele, die erstellt werden können oder verwiesen wird. Also keine Annahmen getroffen werden, basierend auf der asymptotischen Zeitkomplexität, Blick auf den Code, um sicher zu wissen.

Mehr über Bäume:

Nur weil ein Algorithmus „Bäume“ beinhaltet , bedeutet nicht , O(logn)entweder. Sie müssen den Baumtyp kennen und wie die Operation wirkt sich auf den Baum.

Einige Beispiele:

  • Beispiel 1)

Einfügen oder der folgende unausgeglichene Baum suchen wäre O(n).

Geben Sie hier image description

  • Beispiel 2)

Einfügen oder suchen Sie die folgenden ausgeglichenen Bäume sowohl würden O(log(n)).

Balanced Binary Tree:

Geben Sie hier image description

Balanced Tree of Grad 3:

Geben Sie hier image description

zusätzliche Kommentare

Wenn die Bäume verwenden Sie keine Möglichkeit, „Balance“ haben , als es eine gute Chance, dass Ihr Betrieb wird O(n)Zeit nicht O(logn). Wenn Sie Bäume verwenden , die selbstausgleich sind, dann fügt der Regel mehr Zeit in Anspruch nehmen, da der Ausgleich der Bäume normalerweise während der Einsatzphase auftreten.

Beantwortet am 27/04/2016 um 00:55
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more