web-dev-qa-db-fra.com

Quelles sont les différences entre les arbres de segment, les arbres d'intervalle, les arbres indexés binaires et les arbres de plage?

Quelles sont les différences entre les arbres de segment, les arbres d’intervalle, les arbres indexés binaires et les arbres de distance en termes de:

  • Idée clé/définition
  • Applications
  • Performance/ordre dans les dimensions supérieures/consommation d'espace

S'il vous plaît, ne vous contentez pas de donner des définitions.

177
Aditya

Toutes ces structures de données sont utilisées pour résoudre différents problèmes:

  • L'arbre de segment stocke les intervalles et est optimisé pour les requêtes " lequel de ces intervalles contient un point donné".
  • L'arbre d'intervalle stocke également des intervalles, mais optimisé pour les requêtes " lequel de ces intervalles chevauche un intervalle donné". Il peut également être utilisé pour les requêtes ponctuelles, similaires à l'arborescence de segments.
  • L'arbre de plage stocke des points et est optimisé pour les requêtes " qui tombent dans un intervalle donné".
  • Arbre indexé binaire stocke le nombre d'éléments par index et optimisé pour " combien d'éléments y at-il entre l'index m et n = "requêtes.

Performance/consommation d'espace pour une dimension:

  • Arbre de segment - Temps de prétraitement O (n logn), temps de requête O (k + logn), espace O (n logn)
  • Arbre d'intervalle - Temps de prétraitement O (n logn), temps d'interrogation O (k + logn), O(n) espace
  • Arbre de plage - Temps de prétraitement O (n logn), temps de requête O (k + logn), O(n) espace
  • Arbre indexé binaire - Temps de prétraitement O (n logn), O(logn) temps d'interrogation, O(n) espace

(k est le nombre de résultats rapportés).

Toutes les structures de données peuvent être dynamiques, en ce sens que le scénario d'utilisation inclut à la fois des modifications de données et des requêtes:

  • Arbre de segment - un intervalle peut être ajouté/supprimé dans O(logn) time (voir ici )
  • Arbre d'intervalle - un intervalle peut être ajouté/supprimé dans O(logn) time
  • Arbre de plage - de nouveaux points peuvent être ajoutés/supprimés dans O(logn) time (voir ici )
  • Arbre indexé binaire - le nombre d'éléments par index peut être augmenté en O(logn) time

Dimensions supérieures (d> 1):

  • Arbre de segment - O (n (logn) ^ d) durée du prétraitement, O (k + (logn) ^ d) durée de la requête, O (n (logn ) ^ (d-1)) espace
  • Arbre d'intervalle - Temps de prétraitement O (n logn), O (k + (logn) ^ d) temps d'interrogation, espace O (n logn)
  • Arbre de plage - O (n (logn) ^ d) durée du prétraitement, O (k + (logn) ^ d) durée de la requête, O (n (logn ) ^ (d-1))) espace
  • Arbre indexé binaire - O (n (logn) ^ d) durée du prétraitement, O ((logn) ^ d) durée de la requête, O (n (logn ) ^ d) espace
285
Lior Kogan

Non pas que je puisse ajouter quoi que ce soit à réponse de Lior , mais il semble que cela pourrait être fait avec un bon tableau.

Une dimension

k est le nombre de résultats rapportés

|              | 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 |

Dimensions supérieures

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 |

Ces tables sont créées dans Github Formatatted Markdown - voir Gist si vous voulez les images.

21
icc97