Toutes ces structures de données sont utilisées pour résoudre différents problèmes :
-
Arbre des segments les intervalles de stockage, et optimisé pour les " lequel de ces intervalles contient un point donné Requêtes ".
-
Arbre d'intervalles enregistre également les intervalles, mais il est optimisé pour les " lesquels de ces intervalles chevauchent un intervalle donné ". Il peut également être utilisé pour des requêtes ponctuelles - comme l'arbre de segment.
-
Arbre de gamme points de stockage, et optimisé pour les " quels points sont compris dans un intervalle donné Requêtes ".
-
Arbre indexé binaire stocke le nombre d'éléments par index, et est optimisé pour " combien y a-t-il d'éléments entre les indices m et n ? Requêtes ".
Performance / Consommation d'espace pour une dimension :
-
Arbre des segments - Temps de prétraitement O(n logn), temps de requête O(k+logn), espace O(n logn)
-
Arbre d'intervalles - Temps de prétraitement O(n logn), temps de requête O(k+logn), espace O(n)
-
Arbre de gamme - Temps de prétraitement O(n logn), temps de requête O(k+logn), espace O(n)
-
Arbre indexé binaire - Temps de prétraitement O(n logn), temps de requête O(logn), espace O(n)
(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 comprend à la fois des modifications de données et des requêtes :
-
Arbre des segments - L'intervalle peut être ajouté/supprimé en O(logn) temps (voir ici )
-
Arbre d'intervalles - l'intervalle peut être ajouté/supprimé en O(logn) temps
-
Arbre de gamme - de nouveaux points peuvent être ajoutés/supprimés en O(logn) temps (voir ici )
-
Arbre indexé binaire - le nombre d'éléments par index peut être augmenté en temps O(logn)
Dimensions supérieures (d>1) :
-
Arbre des segments - O(n(logn)^d) temps de prétraitement, O(k+(logn)^d) temps de requête, O(n(logn)^(d-1)) espace
-
Arbre d'intervalles - Temps de prétraitement O(n logn), temps de requête O(k+(logn)^d), espace O(n logn)
-
Arbre de gamme - O(n(logn)^d) temps de prétraitement, O(k+(logn)^d) temps de requête, O(n(logn)^(d-1)) espace
-
Arbre indexé binaire - Temps de prétraitement O(n(logn)^d), temps de requête O((logn)^d), espace O(n(logn)^d)
13 votes
Ce n'est pas un doublon, cette question est de savoir si les arbres de Fenwick sont une généralisation des arbres d'intervalle, et ma question est plus spécifique et différente.
7 votes
Il n'a pas été répondu à stackoverflow.com/questions/2795989/ La réponse à cette question donne une définition.
12 votes
En quoi est-ce trop large ? "Quelles sont les différences entre x et y ?" est aussi clair et ciblé que possible. C'est une très bonne question.
17 votes
Et il n'y a aucune bonne réponse à cette question disponible nulle part. Une bonne réponse serait formidable pour la communauté
23 votes
La plupart de ces structures de données (à l'exception des arbres de Fenwick) sont passées en revue dans ce pdf : "Arbres de recherche d'intervalles, de segments, de plages et de priorités". (par D. T. Lee). Ou vous pouvez le lire comme un chapitre de ce livre : "Handbook of Data Structures and Applications" (Manuel des structures de données et des applications) .
0 votes
Ce n'est pas la meilleure réponse, mais elle vaut la peine d'être lue quora.com/Data-Structures/
2 votes
Je l'ai déjà lu avant de poser la question, ce n'est pas très bon.
1 votes
Si je ne connaissais pas TopCoder et autres, cette liste serait plutôt aléatoire. Seuls les arbres de segments et les arbres d'intervalles ont les mêmes applications, et il manque plusieurs structures de données de type diviser pour régner.
1 votes
Le document "Interval, Segment, Range, and Priority Search Trees" (par D. T. Lee) a été très utile.