Version pdf

publicité
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
Téléchargement