Was sind die Unterschiede zwischen Segmentbäumen, Intervallbäumen, binär indizierten Bäumen und Bereichsbäumen?


200

Was sind Unterschiede zwischen Segmentbäumen, Intervallbäumen, binär indizierten Bäumen und Bereichsbäumen in Bezug auf:

  • Schlüsselidee / Definition
  • Anwendungen
  • Leistung / Auftrag in höheren Dimensionen / Platzverbrauch

Bitte geben Sie nicht nur Definitionen an.


12
Es ist kein Duplikat. Diese Frage ist, ob Fenwick-Bäume eine Verallgemeinerung der Intervallsträhne sind, und meine Frage ist spezifischer und anders.
— Aditya

7
Es wurde nicht unter stackoverflow.com/questions/2795989/… beantwortet , die Antwort dort gibt nur eine Definition.
— Aditya

12
Wie ist es zu breit? "Was sind einige Unterschiede zwischen x und y?" ist so klar und konzentriert wie es nur geht. Das ist eine sehr gute Frage.
— IVlad

16
Und dafür gibt es nirgendwo eine gute Antwort. Eine gute Antwort wird großartig für die Community sein
— Aditya

22
Die meisten dieser Datenstrukturen (mit Ausnahme von Fenwick-Bäumen) werden in diesem PDF überprüft: "Intervall-, Segment-, Bereichs- und Prioritätssuchbäume" (von DT Lee). Oder Sie können es als Kapitel aus diesem Buch lesen: "Handbuch für Datenstrukturen und Anwendungen" .
— Evgeny Kluev

Antworten:


318

Alle diese Datenstrukturen werden zur Lösung verschiedener Probleme verwendet:

  • Der Segmentbaum speichert Intervalle und ist für Abfragen optimiert, bei denen " welches dieser Intervalle einen bestimmten Punkt enthält ".
  • Der Intervallbaum speichert auch Intervalle, ist jedoch für Abfragen optimiert, " welche dieser Intervalle sich mit einem bestimmten Intervall überschneiden ". Es kann auch für Punktabfragen verwendet werden - ähnlich wie beim Segmentbaum.
  • Der Bereichsbaum speichert Punkte und optimiert für Abfragen, " welche Punkte in ein bestimmtes Intervall fallen ".
  • Der binär indizierte Baum speichert die Anzahl der Elemente pro Index und ist für die Abfrage " Wie viele Elemente befinden sich zwischen Index m und n " optimiert .

Leistung / Platzverbrauch für eine Dimension:

  • Segmentbaum - O (n logn) Vorverarbeitungszeit, O (k + logn) Abfragezeit, O (n logn) Raum
  • Intervallbaum - O (n logn) Vorverarbeitungszeit, O (k + logn) Abfragezeit, O (n) Raum
  • Bereichsbaum - O (n logn) Vorverarbeitungszeit, O (k + logn) Abfragezeit, O (n) Raum
  • Binär indizierter Baum - O (n logn) Vorverarbeitungszeit, O (logn) Abfragezeit, O (n) Raum

(k ist die Anzahl der gemeldeten Ergebnisse).

Alle Datenstrukturen können dynamisch sein, da das Nutzungsszenario sowohl Datenänderungen als auch Abfragen umfasst:

  • Segmentbaum - Intervall kann in O (logn) Zeit hinzugefügt / gelöscht werden (siehe hier )
  • Intervallbaum - Intervall kann in O (logn) Zeit hinzugefügt / gelöscht werden
  • Bereichsbaum - Neue Punkte können in O (logn) Zeit hinzugefügt / gelöscht werden (siehe hier )
  • Binär indizierter Baum - Die Anzahl der Elemente pro Index kann in O (logn) -Zeit erhöht werden

Höhere Abmessungen (d> 1):

  • Segmentbaum - O (n (logn) ^ d) Vorverarbeitungszeit, O (k + (logn) ^ d) Abfragezeit, O (n (logn) ^ (d-1)) Raum
  • Intervallbaum - O (n logn) Vorverarbeitungszeit, O (k + (logn) ^ d) Abfragezeit, O (n logn) Raum
  • Bereichsbaum - O (n (logn) ^ d) Vorverarbeitungszeit, O (k + (logn) ^ d) Abfragezeit, O (n (logn) ^ (d-1))) Raum
  • Binär indizierter Baum - O (n (logn) ^ d) Vorverarbeitungszeit, O ((logn) ^ d) Abfragezeit, O (n (logn) ^ d) Raum

12
Ich habe wirklich den Eindruck, dass Segmentbäume <Intervallbäume davon sind. Gibt es einen Grund, einen Segmentbaum zu bevorzugen? ZB einfache Implementierung?
— j_random_hacker

7
@j_random_hacker: Auf Segmentbäumen basierende Algorithmen haben Vorteile in bestimmten komplexeren hochdimensionalen Varianten der Intervallabfrage. Finden Sie beispielsweise heraus, welche nicht achsparallelen Liniensegmente sich mit einem 2D-Fenster schneiden.
— Lior Kogan

5
Vielen Dank, ich würde mich für jede Ausarbeitung interessieren, die Sie dazu geben könnten.
— j_random_hacker

3
@j_random_hacker, Segmentbäume haben eine weitere interessante Verwendung: RMQs (Bereichsminimumabfragen) in O-Zeit (log N), wobei N die Gesamtintervallgröße ist.
— Ars-Longa-Vita-Brevis

1
Warum sind Segmentbäume O (n log n) Raum? Sie speichern N Blätter + N / 2 + N / 4 + ... + N / 2 ^ (log N), und diese Summe ist O (N), wenn ich mich nicht irre. Auch @ icc97 Antwort meldet auch O (N) Leerzeichen.
— Ameise

24

Nicht, dass ich Lior's Antwort etwas hinzufügen könnte könnte, aber es scheint, als könnte es einen guten Tisch vertragen.

Eine Dimension

k ist die Anzahl der gemeldeten Ergebnisse

|              | Segment       | Interval   | Range          | Indexed   |
|--------------|--------------:|-----------:|---------------:|----------:|
|Preprocessing |        n logn |     n logn |         n logn |    n logn |
|Query         |        k+logn |     k+logn |         k+logn |      logn |
|Space         |        n logn |          n |              n |         n |
|              |               |            |                |           |
|Insert/Delete |          logn |       logn |           logn |      logn |

Höhere Abmessungen

d > 1

|              | Segment       | Interval   | Range          | Indexed   |
|--------------|--------------:|-----------:|---------------:|----------:|
|Preprocessing |     n(logn)^d |     n logn |      n(logn)^d | n(logn)^d |
|Query         |    k+(logn)^d | k+(logn)^d |     k+(logn)^d |  (logn)^d |
|Space         | n(logn)^(d-1) |     n logn | n(logn)^(d-1)) | n(logn)^d |

Diese Tabellen werden in Github-formatiertem Markdown erstellt. Sehen Sie sich diese Liste an, wenn Sie möchten, dass die Tabellen gut formatiert werden.


2
Was meinen Sie mit gemeldeten Ergebnissen?
— Pratik Singhal

@ ps06756 Suchalgorithmen haben häufig eine Laufzeit von log (n), wobei n die Eingabegröße ist, können jedoch lineare Ergebnisse in n liefern, die nicht in logarithmischer Zeit ausgeführt werden können (die Ausgabe von n Zahlen in log (n) ist nicht möglich). .
— Oerpli

1
Sollte Segment Tree nicht O(n logn) spacein der ersten Tabelle enthalten sein?
— Danny_ds
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.