2016-05-17 18 views
2

Gegeben ein AVL-Baum, der einen Satz G von n verschiedenen natürlichen Zahlen speichert. In jedem Knoten wurde die Anzahl der Knoten in dem Unterbaum gespeichert, der an diesem Knoten verwurzelt ist.Suche nach minimalen Elementen, die nicht in einem gegebenen AVL-Baum vorhanden sind

Wie können wir das minimale m finden, das nicht in G ist und größer als eine gegebene p-in-time-Komplexität von O (log n)?

Beispiel:

Wenn G={21,22,23,24,26,27,29,30} dann: p=20 => m=25p=22 => m=25p=25 => m=28p=29 => m=31

+0

Können wir jedem Knoten zusätzliche Informationen hinzufügen? – templatetypedef

+0

@templatetypedef Dies ist was gegeben. Was hattest du vor? –

+0

Ich würde mir vorstellen, dass dies einfacher wäre, wenn jeder Teilbaum auch seine Min- und Max-Werte speichern würde. – templatetypedef

Antwort

1

Stellen Sie sich vor, dass Sie auf einem Array, dieses Problem zu lösen sind eher als ein Baum AVL. Wie kannst du das machen? Beginnen Sie zunächst mit einer binären Suche über das Array, um die kleinste Zahl s größer als p zu finden. Wenn diese Zahl größer als p + 1 ist, gib einfach p + 1 zurück. Ansonsten sind wir mitten in einer Reihe von Elementen und müssen die kleinste Zahl finden, die über den Lauf hinausgeht. Um dies zu tun, können Sie darüber nachdenken, das folgende Problem zu lösen: Finden Sie das kleinste Element x, so dass x - s größer ist als der Index von x minus dem Index von s. Dies kann durch eine binäre Suche in der verbleibenden Hälfte des Arrays erfolgen: Wenn die Differenz zwischen dem aktuellen Element und s gleich dem Abstand zwischen dem aktuellen Element und s ist, gehe nach rechts, andernfalls nach links. Sobald Sie dieses Element x gefunden haben, gehen Sie zu dem Element davor, fügen Sie eins hinzu, und das ist Ihre Antwort.

Um dieses Problem in der AVL-Struktur zu lösen, passen Sie den obigen Algorithmus im Wesentlichen so an, dass Baumsuchen statt Binärsuchen verwendet werden. Die Tatsache, dass Sie über Unterstrukturinformationen verfügen, bedeutet, dass Sie den Index eines beliebigen Elements in der Struktur mithilfe der Standardstatistikmethode ermitteln können. Ich stelle mir vor, dass der endgültige Algorithmus ein wenig chaotisch sein wird, aber er wird den obigen Algorithmus in der Zeit O (log n) originalgetreu simulieren.

+0

das ist (log n)^2: \ ... –

+0

@XtremeJoe ist es nicht. Eine Suche nach dem ersten Wert> = p, dann eine weitere Suche nach dem fehlenden Element. –

+0

@XtremeJoe Können Sie das näher ausführen? Dies sollte in der Zeit O (log n) laufen. – templatetypedef