Einen Heap in O (n) Zeit in eine BST konvertieren?

7

Ich denke, dass ich die Antwort kenne und die minimale Komplexität ist O (nlogn) .

Aber gibt es eine Möglichkeit, einen binären Suchbaum aus einem Haufen in O (n) Komplexität zu machen?

    
user1940350 31.12.2012, 23:37
quelle

1 Antwort

19

Es gibt keinen Algorithmus zum Erstellen einer BST von einem Heap in O (n) -Zeit. Der Grund dafür ist, dass Sie in o (n) -Zeit aus n Elementen einen Haufen bilden können. Wenn Sie eine BST für eine Reihe von Werten haben, können Sie sie in O (n) -Zeit sortieren, indem Sie eine Inorder-Traversierung durchführen. Wenn Sie in O (n) Zeit eine BST von einem Heap erstellen könnten, könnten Sie dann einen O (n) Sortieralgorithmus von

haben
  1. Den Heap in O (n) Zeit erstellen,
  2. Konvertieren des Heap in eine BST in O (n) Zeit und
  3. Gehen Sie die BST in O (n) Zeit, um eine sortierte Sequenz zu erhalten.

Daher ist es nicht möglich, einen Heap in O (n) -Zeit (oder in o (n log n) -Zeit) in eine BST zu konvertieren, wobei o little-o Notation ).

Es ist jedoch möglich, einen BST von einem Heap in O (n log n) -Zeit zu erstellen, indem der Maximalwert aus dem BST wiederholt entfernt und als der am weitesten rechts liegende Knoten in den Baum eingefügt wird. (Sie müssen dort einen Zeiger für den schnellen Zugriff speichern; nur das wiederholte Einfügen an der Wurzel würde O (n 2 ) Zeit benötigen.)

Hoffe, das hilft!

    
templatetypedef 01.01.2013, 01:55
quelle