WSPD & Spanners INFO-F-420 Géométrie Algorithmique Gabriel CORVALAN CORNEJO and Yassin JDAOUDI INFO5S-M Mai 2012 Table des matières 1 2 3 4 5 6 Introduction . . . . . . . . . . . . . Split Tree . . . . . . . . . . . . . . 2.1 Un peu de théorie... . . . . 2.2 Un peu de pratique... . . . 2.3 Est-ce complexe ? . . . . . . Well Separated Pair Decomposition 3.1 Un peu de théorie... . . . . 3.2 Un peu de pratique... . . . 3.3 Est-ce complexe ? . . . . . . Spanners . . . . . . . . . . . . . . . 4.1 Un peu de théorie... . . . . 4.2 Un peu de pratique... . . . 4.3 Est-ce complexe ? . . . . . . 4.4 T-spanner & WSPD . . . . Θ-Graphe . . . . . . . . . . . . . . 5.1 Un peu de théorie . . . . . 5.2 Un peu de pratique . . . . . 5.3 Est-ce complexe ? . . . . . . Applications . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 4 4 5 5 7 8 8 8 10 10 11 11 11 13 13 14 1 Introduction Les graphes sont des constructions mathématiques composés de sommets et d’arêtes. De nombreux problèmes peuvent se réduire à un problème de graphe et donc, de géométrie algorithmique. Les problèmes abordés ici sont les t-spanners et la décomposition en paires bien séparées (ou ”Well Separated Pair Decomposition” ou W SP D). Le but de cette recherche est d’introduire ces concepts sur le plan théorique pour ensuite donner des solutions algorithmiques et enfin, fournir une analyse de la complexité de ces solutions. Celles-ci ont été implémentées, de façon à illustrer cette recherche, sous forme interactive. L’accent sera mis sur l’aspect didactique des concepts afin de permettre au lecteur de comprendre et visualiser les algorithmes. Une structure de donnée importante est d’abord abordée en section 2 : le Split Tree. Celle-ci permet de diviser l’espace de points de façon dichotomique afin d’en avoir une représentation succincte et structurée. Cette structure est ensuite utilisée en section 3 pour la décomposition en paires bien séparées. Cette décomposition permet de segmenter un ensemble de points en des sous-ensembles possédant des propriétés spatiales similaires. La section 4 introduit un second concept : les t-spanners. Ceux-ci sont des graphes permettant de borner la longueur du chemin maximum entre 2 points. Un aperçu du lien entre les t-spanners et les WSPD est fourni au lecteur. En section 5, les Θ-Graphes sont présentés. Ceux-ci permettent de calculer une sorte de t-spanner. Enfin, une liste des applications non-exhaustive est présentée en section 6. 2 Split Tree Soit S un ensemble de n points dans Rd et soit s > 0 un nombre réel. L’algorithme pour calculer le WSPD (”Well Separated Pair Decomposition”), en fonction de s, s’effectue en 2 phases : – Un arbre binaire, le SplitT ree, est construit. Cet arbre est indépendant de s. – Le SplitT ree est utilisé pour établir le W SP D. Cette section introduit le concept de SplitT ree et fournit une procédure afin de construire ceux-ci. 2.1 Un peu de théorie... Un hyper-rectangle de dimensions d est le produit cartésien de d intervalles fermés. Ainsi, un hyper-rectangle est défini par : R = [l1 , r1 ] × [l2 , r2 ] × ... × [ld , rd ] Où li et ri sont des nombres réels tel que li ≤ ri , 1 ≤ i ≤ d. La longueur de R le long d’une dimension est noté Li (R) := (ri − li ).Lmax (R) et Lmin (R) sont, respectivement, les longueurs maximum et minimum de R sur toutes les dimensions. Soit j l’indice tel que Lmax (R) = Lj (R). Le centre de l’intervalle le plus long de R est h(R) := (lj + rj )/2. 2 Rappelons que R(S) est la boı̂te englobante de l’ensemble S. Le SplitT ree est un arbre binaire contenant les points de S dans ses feuilles. Ainsi, Si S est formé d’un unique point alors le SplitT ree est formé d’un seul noeud contenant ce point. Supposons que |S| > 2, l’algorithme décompose R(S) en deux hyper-rectangles en coupant l’intervalle le plus long en deux parts égales (voir figure 1). Soit S1 et S2 deux sous-ensembles de S contenus dans ces deux nouveaux hyper-rectangles. Le SplitT ree de S est défini par une racine ayant deux sous-arbres qui sont à nouveau récursivement défini pour S1 et S2 . Figure 1 – L’algorithme SplitT ree pour un ensemble de points. Le boı̂te englobante R(u) a été coupé verticalement (en x1 = h(R(u)) en 2 boı̂tes égales car le coté le plus long est horizontal. Les 2 sous-rectangles R0 (v) et R0 (w) sont créés par cette coupure. Le SplitT ree contiendra ainsi une racine u possédant v et w comme sous-arbre gauche et droit respectivement.source : [5] 3 2.2 Un peu de pratique... Dans chaque noeud de l’arbre établi par l’algorithme SplitT ree(S, R), les informations suivantes sont disponibles : – La boı̂te englobante R(u) des points contenu dans le sous-arbre de u. – Un hyper-rectangle R0 (u) contenant R(u). – Si u est une feuille, alors u contient également un point de S. Algorithme SplitTree (S,R) . Cet algorithme prend en paramètre l’ensemble S de n points dans Rd et un hyper-rectangle R contenant la boı̂te englobante de R(S). La racine du SplitT ree pour S est renvoyée. if |S| = 1 then Créer un nouveau noeud u ; R(u) := R(S) ; R0 (u) := R ; Sauver dans u l’unique point de S, R(u), R0 (u) et assigner les 2 enfants de u à N U LL ; return Noeud u else Calculer les boı̂tes englobantes R(S) de S ; Soit H la droite d’équation xi = h(R(S)) ; En se basant sur H, couper R en 2 hyper-rectangles R1 et R2 ; S1 := S ∩ R1 ; S2 := S \ S1 ; v := SplitT ree(S1 , R1 ); w := SplitT ree(S2 , R2 ); Créer un nouveau noeud u ; R(u) := R(S) ; R0 (u) := R ; Sauver dans u, R(u), R0 (u) et assigner à u, v et w comme fils gauche et droit respectivement ; return Noeud u end if 2.3 Est-ce complexe ? En termes de complexité, chaque noeud interne du SplitT ree possède exactement deux fils. L’arbre possède, quant à lui, n feuilles et est donc composé de 2n − 1 noeuds. La hauteur du SplitT ree, qui va jouer un rôle crucial dans le coût de l’algorithme, est, 4 dans les mauvais cas, linéaire en n. L’algorithme SplitT ree a donc, une complexité au pire cas en Θ(n2 ). Notons que les hyper-rectangles R0 (u) ne sont pas utilisés dans cette implémentation, mais ils s’avèrent très utiles pour optimiser l’algorithme [5]. En effet, le SplitT ree peut être dégénéré et donc avoir une hauteur proportionnelle au nombre de noeuds. L’optimisation consiste, grossièrement, à re-balancer le SplitT ree afin de forcer l’arbre à avoir une hauteur standard en O(log n) et donc avoir un SplitT ree en O(n log n). 3 Well Separated Pair Decomposition Cette section introduit la décomposition en paires bien séparées qui est une structure de données très efficace pour résoudre un grand nombre de problèmes. Soit S un ensemble de n points dans Rd et s > 0 un nombre réel. Un algorithme utilisant les SplitT ree (voir section 2) est décrit afin de calculer le W SP D possédant un facteur de séparation s. 3.1 Un peu de théorie... Comme illustré en figure 2, deux ensembles de points A et B forment des paires bien séparées s’ils peuvent être contenus dans deux boules de rayon égales “assez” éloignés l’une de l’autre relativement à leurs rayons. L’idée est de créer des classes de points qui minimisent la variance intra-classes et qui maximisent (selon un certain facteur) la variance inter-classes en terme de distance. Une fois les paires bien séparées créées, la distance entre tout points de A et de B est considérée comme égale. Avant de définir formellement la notion de W SP D, rappelons que si X est un sousensemble borné de Rd , alors R(X) est la boı̂te englobante de X. La distance minimum entre deux boules C et C 0 dans Rd est définie comme le minimum des distances euclidiennes |xy|∀x ∈ C, y ∈ C 0 . Définition 1. (Paires Bien Séparées)(Well-Separated Pair). Soit s > 0 un nombre réel et soit A et B deux ensembles finis de points dans Rd . A et B sont dit bien séparés avec un facteur s s’il existe deux boules disjointes de dimension d tel que : – CA et CB ont un rayon identique, – CA contient la boı̂te englobante R(A) de A, – CB contient la boı̂te englobante R(B) de B, – la distance entre CA et CB est plus grande ou égale à s fois le rayon de CA . Définition 2. (Décomposition en paires bien séparées)(Well Separated Pair Decomposition). Soit S un ensemble de n points dans Rd , et soit s > 0 un nombre 5 Figure 2 – Deux ensembles de points A et B bien séparés. Les deux cercles ont un rayon de ρ et leurs distances est plus grande ou égales à sρ.source : [5] réel. Une décomposition en paires bien séparées (W SP D) de S, en respect de s, est une séquence : {A1 , B1 }, {A2 , B2 }, ..., {Am , Bm } de paires d’un sous-ensemble de S, pour un m entier défini (appelé la taille de la décomposition), tel que : – ∀i, 1 ≤ i ≤ m, Ai et Bi sont bien séparés en respect de s, – ∀p, q ∈ S, il y a exactement un i, 1 ≤ i ≤ m tel que : – p ∈ Ai et q ∈ Bi , ou – p ∈ Bi et q ∈ Ai . Notons qu’il possible de prouver l’existence de cette décomposition pour tout ensemble S mais cette démonstration est omise[5]. 6 3.2 Un peu de pratique... Pour chaque noeud interne de u du SplitT ree qui n’est pas une feuille, l’algorithme F indP airs(v, w) est exécuté, où v et w sont les enfants de u. Si Sv et Sw sont des paires bien séparées, un noeud contenant la paire {v, w} est créé. Sinon, l’algorithme teste si Lmax (R(v)) ≤ Lmax (R(w)) ou si Lmax (R(v)) > Lmax (R(w)). Dans le premier cas, F indP airs(v, w) génère deux appels récursifs sur wl et wr , respectivement fils gauche et droit de w. Dans le second cas, les deux appels récursifs sont fait sur vl et vr , respectivement fils gauche et droit de v. Algorithme ComputeWSPD(T,s) . Cet algorithme prend en paramètre le SP litT ree de l’ensemble de points S et un nombre réel s > 0. Un WSPD de S respectant le facteur de séparation s est retournée. for all noeud interne u de T do v := fils gauche de u ; w := fils gauche de u ; F indP airs(v, w); end for Algorithme FindPairs(v,w) . Cet algorithme prend en paramètre deux noeuds v et w du SplitT ree T de S dont les sous-arbres sont disjoints. Une collection de pairs bien séparées {A, B} où A est dans le sous-arbre de v et B dans w est retournée comme résultat. if Sv et Sw sont bien séparés en respectant s then return La paire de noeud {v, w} end if if Lmax (R(v)) ≤ Lmax (R(w)) then wl := fils gauche de w ; wr := fils droit de w ; F indP airs(v, wl ); F indP airs(v, wr ); else vl := fils gauche de v ; vr := fils droit de v ; F indP airs(vl , w); F indP airs(vr , w); end if 7 3.3 Est-ce complexe ? Soit m la taille de la décomposition (le nombre de paires) pour S qui est calculé par l’algorithme ComputeW SP D(T, s). Le temps d’exécution de l’algorithme est en O(m) (sans compter le temps de construction du SplitT ree). Soit S un ensemble de n points dans Rd et s > 0 un nombre réel : – Le SplitT ree de S peut se calculer en O(n log n) et ne dépend pas de la valeur de s, – Étant donné le SplitT ree, le W SP D peut se calculer en temps O(sd n). Notons que la valeur sd n est en fait le nombre de noeuds dans T (SplitT ree) qui sont des paires bien séparées provenant de l’algorithme ComputeW SP D(T, s). Ceci est cité sans preuve[5]. 4 Spanners Les Spanners (ou ”Spanning Tree”) sont une généralisation des arbres de recouvrement minimal (ou Minimum Spanning Tree). Les t-spanners sont utilisés pour résoudre des problèmes où l’ensemble de sommets S doit être connectés de façon à ce que le plus court chemin entre n’importe quelle paire de points est borné. Cette section va introduire les algorithmes nécessaires à la construction d’un t-spanner et va parcourir certains exemples d’applications où ces structures sont utiles. Par simplicité, les t-spanners sont, ici, uniquement abordés en 2D bien qu’ils puissent être aisément généralisés à plusieurs dimensions. 4.1 Un peu de théorie... Définition 3. (Spanner). Soit S un ensemble de n points dans Rd et soit t ≥ 1 un nombre réel. Un t-spanner est un graphe (non-)dirigé G composé de l’ensemble des sommets S, tel que pour toutes paires de points p et q de S, il existe un chemin dans G entre p et q dont la longueur est plus petit ou égale à t|pq|. Tout chemin satisfaisant cette condition est appelé un chemin t-spanner entre p et q. Si G est un t-spanner pour l’ensemble de points S, alors G est aussi un t0 -spanner pour tout nombre réel t0 tel que t0 > t. Ce qui conduit à la définition suivante : Définition 4. (Élasticité)(Stretch Factor). Soit S un ensemble de n points dans Rd et soit G un graphe composé des sommets de S. Le facteur d’élasticité de G est défini comme le plus petit nombre réel t tel que G est un t-spanner de S. 8 Figure 3 – Quatre t-spanners du réseau des 532 villes des Etats-Unis avec un facteur d’élasticité fixé à (a) 3, (b) 2, (c) 1.5, (d) 1.2. source : [5] 9 4.2 Un peu de pratique... Les t-spanners généralise la notion d’arbre de recouvrement qui requièrent avoir un chemin connectant toute paire de points. L’algorithme P athGreedy, qui généralise la procédure de Kruskal, débute avec un graphe G contenant l’ensemble de sommets S et E := ∅. Toutes les paires de points distinctes sont alors considérées dans l’ordre croissant de leurs distances euclidiennes. La paire courante {p, q} est ajoutée à E s’il existe un chemin dans G connectant p et q et dont la longueur est au plus t|pq|. En effet, en commençant avec les 2 sommets les plus proches l’un de l’autre et en les connectant, il est certain qu’il n’y aura pas de plus court chemin entre ces 2 mêmes points. Algorithme PathGreedy (S,t) . Cet algorithme prend en paramètre l’ensemble S de n points dans Rd et un nombre réel t > 1. Un t-spanner est renvoyé pour S. Trier les n2 paires de points de façon croissante en fonction de leurs distances et sauver le résultat dans la liste L ; E := ∅; G := (S, E); for all {p, q} ∈ L do δ := longueur du plus court chemin dans G entre entre p et q if δ > t|pq| then E := E ∪ {{p, q}} ; G := (S, E) ; end if end for return G L’algorithme P athGreedy(S, t), paramétré avec t = n − 1, produit un graphe identique à l’arbre de recouvrement minimal résultant de l’algorithme de Kruskal lorsque S contient tous les sommets du graphe. Ceci est cité sans preuve. L’algorithme a fait l’objet de beaucoup de recherche dans la littérature scientifique [5]. Il a été notamment prouvé que le t-spanner résultant de P athGreedy possède O(n) arêtes de degré maximum O(1) et dont le poids total est en O(wt(M ST (S))), où wt(M ST (S)) est le poids de l’arbre de recouvrement minimal de l’ensemble S de n points[1]. 4.3 Est-ce complexe ? Les étapes les plus coûteuses dans l’algorithme P athGreedy sont le tri de toutes les paires et les calculs du plus court chemin dans le graphe. 10 Le tri de toutes les paires de points se fait sur n2 combinaisons possibles. Trier n points peut se faire O(n log n). Ainsi, la complexité de cette étape est de O(n2 log n). Trouver le plus court chemin entre 2 sommets dans un graphe pondéré contenant n sommets (où tous les poids sont positifs ou nuls) peut se faire en O(n log n) grâce à l’algorithme de Dijkstra (en supposant que le nombre d’arêtes est en O(n)). Le plus court chemin est calculé pour chacune des paires et donc en O(n3 log n). La complexité totale de P athGreedy est de O(n2 log n + n3 log n). Il est néanmoins possible d’optimiser l’algorithme pour atteindre une complexité en O(n2 log n) [1]. Il existe d’autres algorithmes pour calculer des t-spanners comme les Θ-Graphes détaillés en section 5. 4.4 T-spanner & WSPD Les notions de t-spanner et de W SP D peuvent se compléter. En effet, en section 4.2, l’algorithme P athGreedy calcule Dijkstra pour chaque paire de points. Il est possible d’utiliser la décomposition en paires bien séparées pour avoir une estimation de la longueur du chemin, ce qui est plus rapide à déterminer. Soit S un ensemble de n points dans Rd et t > 1 un nombre réel. Un t-spanner pour n n S peut être construit en O(n log n + (t−1) d ) possédant O( (t−1)d ) arêtes. Ceci peut se faire facilement en choisissant (arbitrairement) une arête pour chaque paire du W SP D (s+4) possédant un s > 4. Le graphe résultant est alors un t-spanner avec t = (s−4) possédant m arêtes où m est la taille de la décomposition. Ceci est cité sans preuve[5]. 5 Θ-Graphe Dans cette section, le concept des Θ-Graphe est introduit. L’idée est que lorsque un chemin veut être créer entre deux points il suffit de continuellement s’orienter (même grossièrement) vers le point de destination. L’arrivée au second point sera certaine puisqu’a chaque itération, la distance vers le point de destination diminue. 5.1 Un peu de théorie Un cône est une région du plan comprise entre deux rayons émanant d’un même point, appelé l’apex du cône. Soit κ ≥ 2 et θ = 2π κ . En divisant l’espace autour du point en iθ angles, où 0 ≤ i < κ. Il est possible de tracer κ rayons. Chaque pair successive de rayons définit un cône. La collection de ces κ cônes est notée Cκ . Pour chaque cône C ∈ Cκ , soit lC un rayon fixe qui émane de l’apex et qui est contenu dans C. Le rayon lC peut être choisi arbitrairement, la bissectrice a été utilisée. 11 Soit C un cône de Cκ et p un point de S. Cp désigne le cône translaté tel que Cp := C + p := {x + p : x ∈ C}. p est alors l’apex de Cp . De la même façon, lC,p est le rayon émanant de p qui est contenu dans le cône Cp . Ce dernier est parallèle à lC . Définition 5. (Θ-Graphe). Soit κ > 2 un entier, θ = 2π κ et S un ensemble de points dans le plan. Le graphe Θ(S, κ) est défini comme suit : – Les sommets de Θ(S, κ) sont les points de S. – Pour chaque point p de S et pour chaque cône C de Cκ , tel que le cône translaté Cp contienne au moins un point de S \ {p}, le graphe Θ(S, κ) contient une arête {p, r}, où r est un point de Cp ∩ S \ {p} tel que sa projection orthogonale sur lC,p est la plus proche de p. Figure 4 – L’arête {p, r} est contenu dans Θ(S, κ) puisque r est le point dont la projection est la plus proche de p dans le cône ayant p pour apex. Théorème 1. Θ-Walk. Soit κ ≥ 9 un entier, θ = 2π κ et S un ensemble de points dans 1 le plan. Le graphe Θ(S, κ) est t-spanner de S pour t = cosθ−sinθ contenant au plus κn arêtes. La démonstration de ce théorème est omise [5]. 12 5.2 Un peu de pratique L’algorithme Θ-Graphe(S,κ) parcours pour tous les points, chaque cône pouvant être diviser autour de ces points. Pour le sous-ensemble de sommets appartenant au cône courant, l’algorithme trouve le sommet ayant une projection minimal avec l’apex et ajoute l’arête formé par l’apex et ce sommet minimal à l’ensemble des arêtes. Algorithme Θ-Graphe(S,κ) . Cet algorithme prend en paramètre l’ensemble S de n points dans R2 et un nombre entier κ ≥ 2. Un Θ-Graphe divisant l’espace de chaque sommets de S en κ cônes est renvoyé. E := ∅ ; G = (S, E) ; for all p ∈ S do for all Cp,i ∈ Cκ (division de l’espace autour de l’apex p en iθ angles) do D := ∅ for all q ∈ Cp,i \ {p} do D = D ∪ dist(lC,i,q , p)} ; end for r := sommet de min{D} . r est le sommet dont la projection orthogonale avec tous les points q sur lC,i est minimum (cf. figure 4). E := E ∪ {{p, r}} ; G = (S, E) ; end for end for return G 5.3 Est-ce complexe ? Lorsque κ > 2, le graphe créé est garanti être un spanner. Mais le théorème 1 précise que lorsque κ ≥ 9, il est certain que d’une itération à la suivante, le sommet de destination est approché. Ce théorème est un résultat important car il assure, pour κ ≥ 9, que le Θ-Graphe peut fournir une idée du plus court chemin. Il existe un algorithme Θ − W alk qui permet de fournir un tel chemin en O(n). Ce qui est même plus rapide que Dijkstra qui en O(n log n). Il peut également être montré que les sommets du Θ-Graphe possède au plus un degré κ. 13 L’algorithme décrit en section 5.2 n’est pas optimisé et procède en O(n3 ). Il est cependant possible d’améliorer la procédure en maintenant un arbre binaire de recherche balancé et d’atteindre une complexité en O(n log n)[5]. 6 Applications Les W SP D s’avèrent utiles pour résoudre plusieurs problèmes de proximité comme celui de la paire la plus proche. Un algorithme en O(n log n) est possible et renvoie la paire de distance minimale dans S. Un autre problème célèbre de voisinage est celui des voisins les plus proches. Des procédures sont exploitables afin de trouver pour chaque point p de S, le voisinage le plus proche dans S, c’est à dire, les points p ∈ S \ {p} pour lesquels |pq| est minimum. Les t-spanners peuvent également être utilisés pour approximer les M ST . 14 Bibliographie [1] Prosenjit Bose, P. Carmi, M. Farshi, A. Maheshwari, and M. Smid. Computing the greedy spanner in near-quadratic time. Algorithm Theory SWAT 2008, pages 390–401, 2008. [2] P.B. Callahan and S.R. Kosaraju. A decomposition of multidimensional point sets with applications to k-nearest-neighbors and n-body potential fields. Journal of the ACM (JACM), 42(1) :67–90, 1995. [3] M. De Berg, O. Cheong, and M. Van Kreveld. Computational geometry : algorithms and applications. Springer-Verlag New York Inc, third edit edition, 2008. [4] David Eppstein. Spanning trees and spanners. Handbook of Computational Geometry, 2000. [5] G Narasimhan and M. Smid. Geometric Spanner Networks. Cambridge, 2007. 15