it-swarm.com.de

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

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

  • Schlüsselidee/Definition
  • Anwendungen
  • Leistung/Bestellung in höheren Dimensionen/Platzbedarf

Bitte geben Sie nicht nur Definitionen an.

177
Aditya

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

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

Leistung/Platzbedarf 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) = Leerzeichen
  • Bereichsbaum - O (n logn) Vorverarbeitungszeit, O (k + logn) Abfragezeit, O(n) = Leerzeichen
  • Binär indizierter Baum - O (n logn) Vorverarbeitungszeit, O(logn) Abfragezeit, O(n) Leerzeichen

(k ist die Anzahl der gemeldeten Ergebnisse).

Alle Datenstrukturen können dynamisch sein, in dem Sinne, dass 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
  • Binary Indexed Tree - O (n (logn) ^ d) Vorverarbeitungszeit, O ((logn) ^ d) Abfragezeit, O (n (logn ) ^ d) Raum
285
Lior Kogan

Nicht, dass ich zu Lior's Antwort irgendetwas hinzufügen könnte, aber es scheint, als könnte es mit einem guten Tisch zusammenhängen.

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 - siehe Gist , wenn Sie die Bilder möchten.

21
icc97