AccueilđŸ‡«đŸ‡·Chercher

Arbre de portée

En informatique, un arbre de portĂ©e, en anglais range tree, est un arbre enracinĂ© qui sert de structure de donnĂ©es pour stocker une liste de points. Il permet de trouver efficacement tous les points Ă  une certaine distance d'un autre point, et typiquement utilisĂ© pour deux dimensions ou plus. Les arbres de portĂ©e ont Ă©tĂ© introduits par Jon Louis Bentley en 1979[1]. Des structures de donnĂ©es similaires ont Ă©tĂ© indĂ©pendamment dĂ©couvertes par Lueker[2], Lee and Wong[3], et Willard[4]. L'arbre de portĂ©e est une alternative Ă  l'arbre kd. Par rapport aux arbres kd, l'arbre de portĂ©e offre des requĂȘtes plus rapides en mais un stockage pire en , oĂč n est le nombre de points stockĂ©s dans l'arbre, d la dimension de chaque point et k le nombre de points signalĂ© par une certaine requĂȘte.

Bernard Chazelle a amĂ©liorĂ© ce temps de requĂȘte en et la complexitĂ© spatiale en [5] - [6].

Description

Exemple d'un arbre de portée à 1 dimension.
Exemple d'un arbre de portée à 1 dimension.

Un arbre de portĂ©e avec un ensemble de points Ă  1 dimension est un arbre binaire de recherche Ă©quilibrĂ© en ces points. Les points stockĂ©s dans l'arbre sont stockĂ©s dans les feuilles de l'arbre ; chaque nƓud interne stocke la plus grande valeur contenue dans son sous-arbre gauche. Un arbre de portĂ©e sur un ensemble de points en d dimensions est un arbre binaire de recherche Ă  plusieurs niveaux rĂ©cursivement dĂ©fini. Chaque niveau de la structure de donnĂ©es est un arbre binaire de recherche sur l'une des d dimensions. Le premier niveau est un arbre binaire de recherche sur la premiĂšre des d coordonnĂ©es. Chaque sommet v de cet arbre contient une structure associĂ©e qui est un arbre de portĂ©e (d-1) dimensionnel sur la derniĂšre (d-1) coordonnĂ©e des points stockĂ©s dans le sous-arbre de v.

Opérations

Construction

Un arbre de portĂ©e Ă  1 dimension d'un ensemble de n points est un arbre binaire de recherche, qui peut ĂȘtre construit en une complexitĂ© en temps de O(n log n)). Les arbres de portĂ©e de dimensions plus grande sont construites rĂ©cursivement en construisant un arbre binaire de recherche Ă©quilibrĂ© sur la premiĂšre coordonnĂ© des points, et ensuite, pour chaque sommet v dans cet arbre, en construisant un arbre de portĂ©e Ă  (d-1) dimensions sur les points contenus dans le sous-arbre de v. Construire un arbre de portĂ©e de cette façon requiert un temps en O(nlogdn)).

Cela peut ĂȘtre amĂ©liorĂ© en remarquant qu'un arbre de portĂ©e sur un ensemble de points Ă  2 dimensions peut ĂȘtre construit en temps O(n log n)[7]. Soit S l'ensemble de n points Ă  2 dimensions. Si S contient seulement un point, retourner une feuille contenant ce point. Sinon, construire la structure associĂ©e de S, un arbre de portĂ©e de 1 dimensions sur la coordonnĂ©e y' des points dans S. Soit xm la mĂ©diane des la coordonnĂ©e x des points. Soit 'SL l'ensemble des points avec la coordonnĂ©e x infĂ©rieure ou Ă©gale Ă  xm et soit SR l'ensemble des points avec la coordonnĂ©e x supĂ©rieure Ă  xm. Construire rĂ©cursivement vL, un arbre de portĂ©e Ă  2 dimensions sur SL, et vR, un arbre de portĂ©e Ă  2 dimensions sur SR. CrĂ©er un sommet v avec pour enfant Ă  gauche vL et Ă  droite vR. Si on trie les points par leurs coordonnĂ©es y au dĂ©but de l'algorithme, et en maintenant cet ordre quand on coupe les points par leurs coordonnĂ©es x, on peut construire la structure associĂ©e Ă  chaque sous-arbre en temps linĂ©aire. Cela rĂ©duit le temps pour construire un arbre de portĂ©e Ă  2 dimensions Ă  O(n log n), ce qui rĂ©duit aussi le temps pour construire un arbre de portĂ©e Ă  d dimensions Ă  O(n logd−1n).

RequĂȘte de distance

Une requĂȘte de distance Ă  1 dimension.
Une requĂȘte de distance Ă  1 dimension [x1, x2]. Les points stockĂ©s dans les sous-arbres gris seront signalĂ©s. Trouver (x1) et trouver (x2) sera signalĂ© s'ils sont Ă  l'intĂ©rieur des bornes de la requĂȘte.

Les arbres de portĂ©e peuvent ĂȘtre utilisĂ©s pour trouver un ensemble de points qui se situent Ă  un intervalle donnĂ©. Pour signaler les points dans l'intervalle [x1, x2], on commence par chercher x1 et x2. À certains sommets dans l'arbre, le chemin de recherche pour x1 et x2 va diverger. Soit vsplit le dernier sommet que ces deux chemins de recherche ont en commun. On continue Ă  chercher pour x1 dans l'arbre de portĂ©e. Pour chaque sommet v dans le chemin de recherche depuis vsplit Ă  x1, si la valeur stockĂ©e Ă  v est plus grande que x1, on signale chaque point dans le sous-arbre droit de v. Si v est une feuille, on signale la valeur stockĂ©e sur v si c'est Ă  l'intĂ©rieur de l'intervalle de la requĂȘte. Similairement, on signale tous les points stockĂ©s dans le sous-arbre gauches avec les sommets qui ont une valeur infĂ©rieure Ă  x2 tout au long du chemin de recherche de vsplit Ă  x2, et on signale la feuille de ce chemin si elle est Ă  l'intĂ©rieur de l'intervalle de la requĂȘte.

Étant donnĂ© que l'arbre de portĂ©e est un arbre binaire Ă©quilibrĂ©, le chemin de recherche de x1 et x2 a une longueur de O(log n). Signaler tous les points stockĂ©s dans le sous-arbre d'un sommet peut ĂȘtre effectuĂ© en temps linĂ©aire en utilisant un algorithme de parcours d'arbre. Ainsi le temps pour effectuer une requĂȘte de distance est O(log n + k), oĂč k est le nombre de points dans l'intervalle de la requĂȘte.

Les requĂȘtes de distance sont similaires dans d dimensions. Au lieu de signaler tous les points stockĂ©s dans les sous-arbres des chemins de recherche, on effectue une requĂȘte de distance Ă  (d-1) dimensions sur la structure associĂ©e Ă  chaque sous-arbre. Finalement, une requĂȘte de distance Ă  1 dimension va ĂȘtre effectuĂ©e et les points corrects vont ĂȘtre signalĂ©s.

De mĂȘme, les requĂȘtes de distance Ă  2 dimensions peuvent ĂȘtre effectuĂ©es. Un arbre binaire dans la coordonnĂ©e est nĂ©cessaire, oĂč chaque nƓud est augmentĂ© avec un sous-arbre dans la coordonnĂ©e y qui contient tous les points descendants. Trivialement, cette structure de donnĂ©es peut ĂȘtre calculĂ©e en un temps de O(nlog2n) qui peut ĂȘtre optimisĂ© en O(nlogn). Étant donnĂ© qu'on augmente chaque nƓud avec un sous-arbre, la complexitĂ© de l'espace requis de cette structure de donnĂ©es est O(nlogn). La complexitĂ© en temps de chaque requĂȘte sera O(log2n).

Étant donnĂ© qu'une requĂȘte Ă  d dimensions consiste en des requĂȘtes de distance Ă  O(log n) (d−1)dimensions , il survient que le temps pour effectuer une requĂȘte de distance Ă  d dimensions est O(logdn + k), oĂč k est le nombre de points dans l'intervalle de la requĂȘte. Cela peut ĂȘtre rĂ©duit Ă  O(logd−1n + k) en utilisant la technique de cascade fractionnĂ©e[2] - [4] - [7].

Voir aussi

Références

  1. (en) J. L. Bentley, « Decomposable searching problems », Information Processing Letters, vol. 8, no 5,‎ , p. 244–251 (DOI 10.1016/0020-0190(79)90117-0)
  2. (en) G. S. Lueker, 19th Annual Symposium on Foundations of Computer Science (sfcs 1978), , 28–21 p. (DOI 10.1109/SFCS.1978.1), « A data structure for orthogonal range queries »
  3. (en) D. T. Lee et C. K. Wong, « Quintary trees: A file structure for multidimensional database systems », ACM Transactions on Database Systems, vol. 5, no 3,‎ , p. 339 (DOI 10.1145/320613.320618)
  4. Dan E. Willard, « The super-b-tree algorithm », Tech report TR-03-79, Cambridge, MA, Aiken Computer Lab, Harvard University,‎
  5. (en) Bernard Chazelle, « Lower Bounds for Orthogonal Range Searching: I. The Reporting Case », ACM, vol. 37,‎ , p. 200-212 (lire en ligne)
  6. (en) Bernard Chazelle, « Lower Bounds for Orthogonal Range Searching: II. The Arithmetic Model », ACM, vol. 37,‎ , p. 439-463 (lire en ligne)
  7. (en) Mark de Berg, Otfried Cheong, Marc van Kreveld et Mark Overmars, Computational Geometry : algorithms and applications, Berlin, Springer, , 386 p. (ISBN 978-3-540-77973-5, BNF 41264669, DOI 10.1007/978-3-540-77974-2)

Liens extérieurs

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.