• Aucun résultat trouvé

V´erification et mise `a jour des cartes partielles

3.4 Exploration en temps polynomial

3.4.2 V´erification et mise `a jour des cartes partielles

3.4.2 V´erification et mise `a jour des cartes partielles

Proc´edure V´erifie(M).

Nous d´ecrivons la proc´edure V´erifieM qui contrˆole si une carte partielle M est une vue depuis un sommet v dans G, et retourne soit 0 (´echec) soit 1 (succ`es). La proc´edure pr´esume que le robot d´etient le caillou. Elle consiste en deux parties : Init-V´erifie et

Effectif-V´erifie. La premi`ere partie est utilis´ee par le robot pour entrer dans un cycle, dans le but de ne pas perdre le caillou. La seconde partie est principalement un appel `a la proc´edure Contr^ole-Coh´erence, d´efini dans la section 3.3. Les d´eplacements additionnels sont effectu´es par le robot pour assurer que celui-ci termine la deuxi`eme partie `a l’endroit o`u il l’a commenc´ee, et en possession du caillou. En effet, ce n’est pas n´ecessairement le cas lorsque seule la proc´edure Contr^ole-Coh´erence est appel´ee.

– Init-V´erifie(M) consiste `a suivre ˆn fois la suite de num´eros de port ts(M). – Effectif-V´erifie(M) consiste d’abord `a d´eposer le caillou sur le sommet

cou-rant v, et `a parcourir une fois ts(M). Soit w le sommet courant apr`es ce parcours. Si le caillou n’est pas en w, alors le robot parcourt plusieurs fois ts(M) jusqu’`a ce qu’il retrouve le caillou. Le robot s’arrˆete et la proc´edure V´erifie retourne 0. Si le caillou est en w, cela signifie que w = v. Le robot ex´ecute alors la proc´edure

Contr^ole-Coh´erence(g(M), v(M)), en utilisant cp(M) comme chemin ferm´e C (cf. la description de la proc´edure Contr^ole-Coh´erence dans la sous-section 3.3.3). Si

Contr^ole-Coh´erence retourne succ`es, alors la proc´edure V´erifie renvoie 1. Si

Contr^ole-Coh´erence retourne ´echec, le robot peut avoir perdu le caillou. Dans ce cas, le robot parcourt une nouvelle foists(M) pour r´ecup´erer le caillou. La proc´edure

V´erifie renvoie alors 0.

Remarquons que la proc´edureV´erifie(M) ne fait rien et renvoie toujours 1 quand M

3.4. EXPLORATION EN TEMPS POLYNOMIAL 79

Lemme 3.5 SoitM une carte partielle. Soituun sommet quelconque du graphe. Soitv le sommet sur lequel le robot se trouve apr`es avoir termin´e l’ex´ecution deInit-V´erifie(M)

depuis le sommet u. On a :

1. La sous-proc´edure Init-V´erifie(M) n’a pas besoin du caillou.

2. La sous-proc´edure Effectif-V´erifie(M) visite uniquement des sommets et des arcs d´ej`a visit´es par la sous-proc´edure Init-V´erifie(M).

3. La sous-proc´edureEffectif-V´erifie(M)commence et termine env avec le caillou. 4. La proc´edure V´erifie(M) renvoie 1 si et seulement si M est une vue depuis v

dans G.

5. La proc´edure V´erifie(M) s’ex´ecute en temps O(ˆnn2d) et utilise O(log ˆn+nlogd)

bits de m´emoire.

Preuve.

1. Imm´ediat d’apr`es la description de Init-V´erifie.

2. D’apr`es le fait 3.1 et comme ˆn ≥ n, nous savons que le robot entre dans un cycle compos´e d’un ou plusieurs ts(M) durant la sous-proc´edure Init-V´erifie. Par cons´equent, parcourir une ou plusieurs fois ts(M), comme c’est le cas dans la sous-proc´edureEffectif-V´erifie(M), maintient le robot dansC, c’est-`a-dire dans une partie de Gd´ej`a visit´ee pendant Init-V´erifie(M).

3. Au d´ebut deEffectif-V´erifie(M), le robot d´epose le caillou et parcourt une fois

ts(M). S’il ne trouve pas le caillou en w, alors parcourir de nouveau ts(M) finira par le ramener env et au caillou, comme nous l’avons not´e dans la preuve du point pr´ec´edent. Si le robot trouve le caillou en w = v, alors ts(M) d´ecrit un chemin ferm´e dans Gcommen¸cant et terminant env. Puisque le robot effectue uniquement des travers´ees compl`etes de ts(M) pendant et apr`es l’ex´ecution de la proc´edure

Contr^ole-Coh´erence, le robot s’arrˆete en v. De plus, il d´etient le caillou.

4. SiM est une vue depuisv, alors le robot trouve le caillou apr`es son premier parcours le long dets(M). Donc la proc´edureV´erifie(M) renvoie 1 si et seulement si M est une vue depuisv dans Gcar la proc´edure Contr^ole-Coh´erence retourne succ`es si et seulement si (g(M), v(M)) est coh´erent avec (G, v).

5. La sous-proc´edureEffectif-V´erifie(M) parcourtts(M) au plus O(n) fois (cf. la description de la proc´edure Contr^ole-Coh´erence dans la sous-section 3.3.3). Donc la proc´edure V´erifie parcourt ts(M) au plus ˆn+O(n) fois. D’apr`es le lemme 3.4, la longueur de ts(M) est born´ee par O(n2d). Donc la proc´edure V´erifie s’ex´ecute en temps O(ˆnn2d).

D’apr`es le point 3 du lemme 3.4, suivre ts(M) requiert au plus O(nlogd) bits. La sous-proc´edure Init-V´erifie utilise un compteur jusqu’`a ˆn et la quantit´e de m´emoire n´ecessaire pour suivre cp(M), donc au plus O(log ˆn +nlogd) bits. La proc´edureContr^ole-Coh´erence, et donc la sous-proc´edureEffectif-V´erifie, uti-lise O(logn) bits pour se souvenir du sommet consid´er´e, plus O(nlogd) bits pour suivre cp(M). En r´esum´e, la proc´edure V´erifie utiliseO(log ˆn+nlogd) bits.

80 CHAPITRE 3. EXPLORATION DES GRAPHES ORIENT ´ES

La proc´edure V´erifie permet au robot de contrˆoler si une carte partielle est une vue depuis un sommet. Nous pr´esentons maintenant une proc´edure, appel´ee M`aJ-Carte, permettant de mettre `a jour une carte partielle, avec l’aide d’un caillou. En effet, cette proc´edure suppose que le robot d´etient le caillou quand elle est appel´ee.

Proc´edure M`aJ-Carte(M, P).

Soit M = (N, L) une carte partielle. Soit P un chemin ferm´e partant d’un certain sommet u, et compatible avec M. Supposons que le robot est capable de visiter P et de d´etecter la fin de P sans l’aide d’un caillou. Notons que cela ne signifie pas que le robot d´etecte syst´ematiquement quand il est en u, mais seulement qu’il est capable de d´etecter quand le chemin P est compl`etement explor´e. De plus, le robot ne sait pas a priori o`u la partie de P r´ef´erenc´ee dans M s’arrˆete dans P. Partant de u avec le caillou, le robot ex´ecute M`aJ-Carte(M, P) pour cr´eer une carte partielle M telle que , intuitivement, M

est la carte du sous-graphe de Ginduit par P.

La proc´edureM`aJ-Carteutilise la mˆeme technique que la proc´edureContr^ole-Coh´ e-rence. Pr´ecis´ement, la proc´edure M`aJ-Carte(M, P) proc`ede comme suit. Le robot par-courtP et simule ses d´eplacements surg(M). Si le robot atteint la fin deP sans visiter un arc qui n’est pas dans g(M), alors la proc´edure retourne M =M. Sinon, soit e = (v, v) le premier arc de P qui n’est pas r´ef´erenc´e dans M. Soit ℓ le num´ero de port de l’arc e. Le sommet v deG correspond au sommet pde g(M). Le robot d´epose le caillou en v et revient en u en finissant l’exploration deP. Le robot parcourt ensuite de nouveau P tout en suivant ses d´eplacements sur la carte g(M). Si le robot voit le caillou quand il visite un sommet q de g(M), il met `a jour M en ajoutant ((p, N + 1), ℓ) `a la fin de L. Si le robot voit le caillou pour la premi`ere fois en un sommet n’ayant pas de correspondance dans g(M), il met `a jourM en ajoutant ((p, N+ 1), ℓ) `a la fin de L, et incr´emente N de 1. Dans les deux cas, le robot reprend le caillou et termine l’exploration de P. Le robot continue de cette fa¸con avec les arcs non identifi´es successifs jusqu’`a ce qu’aucun arc de P

ne reste non identifi´e. La proc´edure M`aJ-Carte(M, P) retourne la carte partielle obtenue

M.

Lemme 3.6 Soit M une carte partielle et soitP un chemin ferm´e partant d’un sommet

u, et compatible avec M. Supposons que le robot, en possession du caillou, ex´ecute la proc´edure M`aJ-Carte(M, P) depuis u. Soit M le r´esultat obtenu. On a :

1. Le robot termine la proc´edure en u avec le caillou.

2. M est une carte partielle bien d´efinie.M est un pr´efixe deM. SoitH le sous-graphe de G induit parP. On a (g(M), v(M))= (H, u).

3. La proc´edure M`aJ-Carte(M, P)s’ex´ecute en temps O(|P|nd)et utilise O(nd(logn+ logd)) bits de m´emoire plus la m´emoire n´ecessaire pour suivre P.

Preuve.

1. Puisque P est un chemin ferm´e commen¸cant et terminant en u et puisque le ro-bot effectue uniquement des travers´ees compl`etes de P, alors le robot termine la

3.4. EXPLORATION EN TEMPS POLYNOMIAL 81 proc´edure en u. De plus, d’apr`es la description de la proc´edure, le robot est en possession du caillou.

2. Imm´ediat, par construction de M.

3. En deux travers´ees de P, la proc´edure M`aJ-Carte identifie un nouvel arc de G. Puisque G a au plus nd arcs, la proc´edure traverse P au plus 2nd fois. Elle utilise uniquement la m´emoire n´ecessaire pour suivreP et la m´emoire pour stocker la carte partielle M.

Dans la proc´edureM`aJ-Carte, le cheminP est explor´e un nombre constant de fois pour chaque arc. Dans [BFR+02], la proc´edure correspondante, appel´ee Compress, explore le chemin un nombre constant de fois pour chaque nouveau sommet, donc moins souvent. Le probl`eme est que la technique plus rapide de [BFR+02] n´ecessite de maintenir en m´emoire un tableau dont la taille est la longueur du chemin. Comme nous le verrons plus tard, le chemin utilis´e dans la proc´edure M`aJ-Carte est tr`es long (environ ˆnn5d2). Nous avons donc dˆu proc´eder diff´eremment.

Dans le but d’obtenir une carte partielleM strictement plus pr´ecise queM, au moins un arc non r´ef´erenc´e dansM doit ˆetre pr´esent dansP. Ceci est assur´e grˆace `a la proc´edure suivante.

Proc´edure Nouvelle-Ar^ete(M).

Etant donn´e une carte partielleM qui ne repr´esente pas le graphe en entier, le but de la proc´edure Nouvelle-Ar^ete(M) est de visiter tous les sommets et tous les arcs r´ef´erenc´es dans M, et de trouver un arc non r´ef´erenc´e dansM (mais partant d’un sommet de M). Plus pr´ecis´ement, le robot commence au sommet v avec une carte partielleM qui est une vue depuis v. Le robot parcourtcp(M) une fois compl`etement, et ensuite encore une fois jusqu’`a trouver un sommet ayant un degr´e sortant diff´erent dans G et dans M (un tel sommet existe car M n’est pas une carte exhaustive de G). Le robot prend finalement l’un des arcs sortants non explor´es du sommet courant.