[AD] Blatt 5 Aufgabe 3.1
2006-12-12 18:15
Hackbert
Sind die sicher, dass es in O(n log(n)) stattfinden soll? Ich kriege das in O(n) hin…
da man für jedes Element im Baum noch nach der richtigen Position suchen muss :)
Naja, so ganz entartet darf er nicht sein. In der E -Mail, die wir über Stine bekommen haben, stand, dass er möglichst ballanciert sein soll. Dadurch wird der Algoritmus aber nur bissel komplizierter.Ich habe keine E-Mail bekommen… Gar keine…
jedes Element im Array muss mindestens ein mal angefasst werden. Für jedes Element muss im Baum die Stelle durch vergleiche gefunden werden, an die es gepackt wird - das sind pro Element im schlimmsten fall lg(n) vergleiche, wenn der Baum balanciert ist- also n ln(n) isgesamt.
Sind die sicher, dass es in O(n log(n)) stattfinden soll? Ich kriege das in O(n) hin…Wo stand denn was von O(n log(n))? Bei mir steht O(n) im Aufgabentext.
Für neugierige – könntet ihr die Aufgabe bzw. nen Link darauf posten? ;-)Die Aufgabe steht nur in STiNE und zumindest bei den Folienkopien steht extra dabei, dass wir sie keinesfalls irgendwie weiterverbreiten sollen, erst recht nicht online. Ich kann sie aber mal etwas umformulieren:
Im Worst Case kostet das Einfügen von n Elementen in einen BST (Binary Search Tree) O(n^2) Zeit. Wenn die einzufügenden Elemente in sortierter Form vorliegen, lässt sich ein BST in O(n) aufbauen. Geben Sie den Algorithmus dafür in Pseudocode an und erklären Sie ihn.Ich denke, die von Hackbert gemeinte Lösung ist ziemlich offensichtlich.
Toll! Habe jetzt das ganze Zeug fertig geschrieben und voll viel Zeit in die Tonne gekloppt.Dito. Hatte aber schon damit gerechnet, dass sie wahrscheinlich eigentlich einen balancierten Suchbaum haben wollten, denn inzwischen hab ich etwas Übung im Hellsehen (zu irgendwas muss AD ja nutze sein). Darum hab ich schon vorm sauberen Abtippen in STiNE geguckt.
jedes Element im Array muss mindestens ein mal angefasst werden. Für jedes Element muss im Baum die Stelle durch vergleiche gefunden werden, an die es gepackt wird - das sind pro Element im schlimmsten fall lg(n) vergleiche, wenn der Baum balanciert ist- also n ln(n) isgesamt.Es geht aber auch in O(n).
Aha. Darf ich auch fragen wie?
Aha. Darf ich auch fragen wie?Divide & Conquer ist das Stichwort. Die reine Rekursion! Bisschen wie, mal sagen, binäre Suche.
Divide & Conquer ist das Stichwort. Die reine Rekursion! Bisschen wie, mal sagen, binäre Suche.
Habe auch mit devide and concer gemacht. Aber zum Einfügen braucht man immer noch lg(n) zeit.
$ man Ingo[img]http://www.fb18.de/gfx/7.gif[/img][img]http://www.fb18.de/gfx/7.gif[/img][img]http://www.fb18.de/gfx/7.gif[/img]
No manual entry for Ingo
gegeben: Array A, mit aufsteigend sortierten Zahlen.
parent <- nil
for i <- 1 to length(A) do
p(A(i)) <- parent
right(A(i) <- A(i+1)
p(A(i+1)) <- A(i)
Anarch: Wie bekommt man Werte aus einem sortiertem Array in O(n) in einen anfangs leeren BST einsortiert?
Da dort aber nicht steht, dass das ganze balanciert sein muss, hätte es die wohl ziemlich triviale Lösunggegeben: Array A, mit aufsteigend sortierten Zahlen. parent <- nil for i <- 1 to length(A) do p(A(i)) <- parent right(A(i) <- A(i+1) p(A(i+1)) <- A(i)
wohl auch getan (hier ist es allerdings echt hässlich aufgeschrieben).
Du hast aber die Anmerkungen in Stine gesehen? Es soll ein möglichst balancierter Baum sein…