Wann sollte Binomial-Heap verwendet werden?

8

Binomial Heap hat ein ganz besonderes Design. Persönlich glaube ich nicht, dass dieses Design intuitiv ist.

Obwohl Beiträge wie Was ist der Unterschied zwischen Binäre Haufen und Binomialhaufen? spricht über diff und seine Spezialität, ich frage mich immer noch, wann ich es verwenden sollte.

In Ссылка heißt es

  

Wegen seiner einzigartigen Struktur kann ein Binomialbaum der Ordnung k sein   konstruiert aus zwei Bäumen der Ordnung k-1 trivial durch Anfügen eines von   sie als das am weitesten links liegende Kind der Wurzel des anderen. Diese Funktion ist   von zentraler Bedeutung für die Zusammenführung eines Binomialspeichers, der sein Hauptteil ist   Vorteil gegenüber anderen konventionellen Haufen.

Ich nehme an, dass ein Vorteil von Binomial Heap seine Zusammenführung ist. % Co_de% hat jedoch auch O (logN) merge und viel einfacher, warum verwenden wir immer noch Binomial Heap? Wann sollte ich Binomial Heap verwenden?

Bearbeiten

Eine der eigentlichen Fragen, die ich hier stellen möchte, ist Was ist genau der Vorteil von Binomial Heap ?

    
Jackson Tale 20.11.2013, 12:32
quelle

4 Antworten

5

Der Artikel für den linken Baum lautet:

  

Beim Einfügen eines neuen Knotens in einen Baum wird ein neuer Baum mit einem Knoten erstellt und in den vorhandenen Baum eingefügt. Um ein minimales Element zu löschen, entfernen wir das Root und die linken und rechten Subbäume werden dann zusammengeführt. Beide Operationen benötigen O (log n) -Zeit. Für Insertionen ist dies langsamer als binominale Heaps, die die Insertion in der amortisierten konstanten Zeit O (1) und O (log n) Worst-Case unterstützen.

So scheint es, dass der Vorteil des Binomial-Heaps darin besteht, dass die Einfügungen schneller sind.

Zumindest sagt uns das eine Analyse der Asymptotik. Die Laufzeit der realen Welt ist etwas ganz anderes und hängt, wie Gene in seiner Antwort sagte, von konstanten Faktoren ab. Die einzige Möglichkeit, zu bestimmen, welche für Ihre Anwendung besser ist, besteht darin, sie zu testen.

    
Jim Mischel 20.11.2013, 16:11
quelle
5

Es gibt keine allgemeine Antwort auf Ihre Frage.

Der konstante Faktor in der Laufzeitbeziehung zur Datengröße für solche Algorithmen auf Bibliotheksebene bestimmt oft, welche Auswahl getroffen werden soll. Wenn zum Beispiel eine O (1) -Operation einen Faktor 20 mal langsamer ist als ein O (log n), wenn n = 1 ist, ist es besser, den O (log n) -Algorithmus für n & lt; 1.000.000.

Die Schlussfolgerung ist, dass asymptotische Zeitgrenzen nur ein Anhaltspunkt sind. Sie würden eher Binomial als Linkshaufen verwenden, wenn

  1. Der Unterschied ist in der Anwendung wichtig. (Wenn es nicht die billigste zuverlässige Implementierung verwendet, unabhängig vom Algorithmus.)
  2. BH ist in der jeweiligen Anwendung, die Sie erstellen, besser als LH.

Hinzugefügt Als Reaktion auf die Bemerkung des OP, dass er nach Motivation sucht: Ich kann nicht für den Autor dieses Algorithmus sprechen. Aber im Allgemeinen finden Algorithmenentwickler neue, schöne Ansätze und veröffentlichen sie, selbst wenn der Vorteil, den sie bieten, marginal oder rein theoretisch ist.

Das ist gut. So geht die Informatik voran. Der Ansatz kann sich in anderen Einstellungen auch dann auszahlen, wenn das Problem nicht groß ist.

Ein (altes) Beispiel hierfür sind Sprunglisten, die 1989 entwickelt wurden, um das gleiche Problem mit fast der gleichen Effizienz zu lösen wie ausgewogene binäre Suchbäume, die 1962 oder früher bekannt waren. Warum die Mühe? Weil wir können.

    
Gene 20.11.2013 14:38
quelle
3

Binomial-Heaps unterstützen die Zusammenführungsoperation (zwei Heaps destruktiv zusammenführen) in logarithmischer Zeit, während sie bei einem binären Heap lineare Zeit benötigt.

    
heap 20.11.2013 21:53
quelle
0

Binärhaufen & lt; Binomialhaufen & lt; Fibonacci Heap

Dies bezieht sich nur auf die Leistung. Aus dem Wiki,

%Vor%     
JK_S 12.03.2015 07:17
quelle

Tags und Links