Datenstrukturen (Heap, B-Baum, AVL-Baum, F-Baum, CBinTree, Inorder, CountLeaves)



  • Hallo.

    Ich hab da ma wieder ne Hausaufgabe, kann mir da jemand zu einzelnen Aufgaben Tipps geben, wo man die Lösungen nachlesen kann?

    Teil 1

    1. Gibt es Bäume, die gleichzeitig Heap und binärer Suchbaum sind? Begründen Sie Ihre Antwort!

    2. Ihnen sei eine beliebige Permutation (a0, a1, . . . , an−1) : ai Element N gegeben. Beschreiben Sie eine Möglichkeit, mit der Sie daraus in weniger als O(n2) Vergleichen einen ausgeglichenen Suchbaum erzeugen können!

    3. Unter welchen Umständen muss in einem AVL-Baum eine Doppelrotation ausgeführt werden?

    4. Geben Sie die minimale Tiefe eines Blattknotens im n-ten Fibonacci-Baum an! Beweisen Sie Ihre Aussage!

    Teil 2

    1. Aus der Vorlesung kennen Sie die Klasse CBinTree. Schreiben Sie in C++ oder Pseudocode eine Funktion, die eine iterative Inorder-Traversierung auf einem beliebigen Binärbaum realisiert! Erläutern Sie genau, welche Modikationen oder Ergänzungen Sie ggf. an der Datenstruktur vornehmen!

    2. Schreiben Sie eine Funktion CBinTree::CountLeaves(), die die Anzahl der Blätter in einem beliebigen Binärbaum zählt und diese zurückgibt.

    Danke ma wieder!!! 🙂



  • 1.2 Wenn ich die Aufgabe verstanden habe, gehts einfacherweise doch auch indem alle Elemente der Reihe nach in einen AVL-Baum einfügt, dann liegt man mit den Vergleichen in O(n*log(n)).

    2.1 Rekursiv geht das sehr sehr sehr einfach (wie so vieles bei Bäumen)



  • Hey, cool, Hausaufgaben!

    Poste mal deine Ansätze, dann kriegen wir das bestimmt hin...



  • Also

    1.1: Heap == bin. Baum? Vielleicht wenn die Eigenschaften vom bin. Baum, Sortierung, gleich dem Heap ist? Spezialfall?

    1.2: keine Ahnung

    1.3: Doppelrotation ist nötig, wenn Höhenunterschied an inneren Teilbäumen auftritt (nach Rebalancierung). Steht bei wikipedia, keine Ahnung, ob das richtig ist.

    1.4: Meinen die da das Blatt das als erstes kommt und der Abstand zur "obersten" Wurzel der kleinste ist? Also im F-Baum "irgendwie" rekursiv runtergehen und dann bei der ersten minimalsten Höhe, wenn Blatt aufhören, wie soll ich das beweisen?

    2.1: Inorder-Traversierung: linker Unterbaum, Wurzel, rechter Unterbaum, wees noch ne ma wie man das rekursiv implementiert. 😞 (Traversierung durch einen Suchbaum erhält man eine aufsteigend sortierte Folge)

    2.2: muss man da jetzt da in dem baum alles durchgehen und gucken, wenn rechter und linke "sohn" nicht vorhanden ist, dann countern?



  • Hans im Pech schrieb:

    1.2 Wenn ich die Aufgabe verstanden habe, gehts einfacherweise doch auch indem alle Elemente der Reihe nach in einen AVL-Baum einfügt, dann liegt man mit den Vergleichen in O(n*log(n)).

    2.1 Rekursiv geht das sehr sehr sehr einfach (wie so vieles bei Bäumen)

    Bei einem binären Suchbaum im Allgemeinen ist das kleinste/größte Element, aber nicht in der Wurzel. Du hast bei einem Heap ja keine Sortierung vorgegeben, sondern nur, dass das Parent größer/kleiner als seine Kinder ist.
    Bei einem Suchbaum ist das im Allgemeinen aber nicht der Fall dort sind die Elemente im linken Kind kleiner/größer und die Elemente im rechten Kind größer/kleiner als das Element im Elternknoten.

    Wenn man also keine Einschränkungen auf die Eingabemenge machen darf, dann sehe ich nicht wie man einen Suchbaum erzeugen kann der die Heap-Eigenschaft erfüllt.


Anmelden zum Antworten