Frage

Ich brauche eine IntervalTree oder Bereichsbaum Implementierung in Java und Mühe habe die Suche nach einem mit Arbeits Streichung Unterstützung.

Es gibt eine eingebaute in einem unter sun.jvm.hotspot.utilities.IntervalTree , aber die deleteNode Methode in der RBTree geordnete Klasse heißt es:

/**
 * FIXME: this does not work properly yet for augmented red-black
 * trees since it doesn't update nodes. Need to figure out exactly
 * from which points we need to propagate updates upwards.
 */

Der Versuch, Knoten zu löschen von einem Baum, um die Ausnahme zu werfen endet:

  

Knoten des max Endpunkt wurde nicht aktualisiert   richtig

Wie schwierig wäre es richtig delete Funktionalität in einer Unterklasse der sun.jvm.hotspot.utilities.IntervalTree zu implementieren? Oder gibt es einen anderen Intervall-Baum Implementierung, die bereits diese korrekt implementiert?

Zur Zeit bin Abwischen ich den Baum gerade aus und wieder bevölkern es jedes Mal, wenn eine Löschung es gibt, die bei weitem nicht ideal ist (Anmerkung: Einstellung DEBUGGEN = false in der RBTree Dinge beschleunigt enorm)

.
War es hilfreich?

Lösung

beenden ich die sun.jvm.hotspot.utilities.IntervalTree Modifizierung auf einen Satz von gelöschten Knoten zu halten. Bei der Suche, schließe ich alle Elemente in diesem Satz. Nicht ideal, aber das war viel einfacher, als „echte“ Löschen Arbeits bekommen. Sobald der gelöschten Satz zu groß wird, ich den Baum wieder aufzubauen.

Andere Tipps

Dieses Projekt eine Implementierung hat Bereichsbaum, die Sie von mehr Nutzen sein könnte. Die Sonne Pakete könnte in Ordnung sein für eine schnelle und unsaubere Verwendung, aber ich würde bauen etwas auf ihnen nicht empfehlen wichtig zu verlassen. Sun kann sie nicht stabil halten.

Ich weiß nicht, Ihre genauen Anforderungen, sondern ein nicht-statisches Segment Baum könnte für Sie arbeitet. Wenn ja, haben Sie einen Blick auf Layout-Management SW , insbesondere die SegmentTree Paket . Es hat die Funktion Entfernen Sie benötigen.

Wenn Sie sich entscheiden, Ihre eigene Rolle, könnte ich vorschlagen Open Sourcing es? Ich bin überrascht, es gibt keine offenen und leicht-Intervall-Baum verfügbar bereits.

gibt es ac # -Implementierung basierend auf einem erweiterten AVL-Baum @ http://code.google.com/ p / intervaltree / . Übersetzung java sollte nicht allzu schwierig sein.

fand ich eine Open-Source-Implementierung mit einer Deletion, aber es neeeds einige Mühen es voll funktionsfähig zu machen.

Es ist ein Modul von größerem Open-Source-Projekt Gephi , aber hier ist die Quellen und javadoc . Wenn Sie ein Glas möchten, können Sie die Gephi installieren, und es ist in:

/gephi/modules/org-gephi-data-attributes-api.jar

Die Löschmethode gibt, werden alle Intervalle mit dem Eingangsintervall überlappen (statt nur den Eingang eins). Jedoch fand ich in der soruces, dass es Privat-Methoden, die einen bestimmten Knoten zu entfernen (was speichert ein Intervall). Auch die privaten Suchmethoden zurückkehren Knoten.

Also ich denke, mit etwas wenig Aufwand möglich, es ist den Code Refactoring und dies haben - ‚löschen bestimmtes Intervall‘ -Funktion. Der schnellste und schmutziger Weg wäre, nur die privaten Methoden / Node-Klasse öffentlich zu machen. Aber da es ein Open-Source-Projekt, vielleicht könnte es in Zukunft in eine gute Standard-Implementierung von Intervallbaum entwickeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top