B.8 Traces radar fusionn´ees `a Orly
III.2 REA : ´enum´eration r´ecursive des k meilleurs chemins entre s et t
La figure III.2 en d´ecrit une version l´eg`erement adapt´ee : les trois phases sont r´eunies en une seule dans la fonction Chemin Suivant, ce qui permet de n’initialiser que les nœuds impliqu´es
dans les k meilleurs chemins de s `a t et de ne d´evelopper qu’une seule fois chaque portion de che-
min : on consid`ere alors que seuls les coˆuts minimaux (¯csn)n∈N ont ´et´e calcul´es pr´ec´edemment. Cette adaptation pr´esente ´egalement l’avantage de pouvoir ˆetre appliqu´ee `a des graphes pour lesquels l’´enum´eration exhaustive de tous les nœuds n’est pas envisageable.
Cette version utilise des structures de donn´ees, appel´ees tables : certains cas d’application de l’algorithme pourraient n´ecessiter l’utilisation de tables associatives ou de hachage, mais dans les cas plus simples (comme celui du graphe des voies de circulation de l’a´eroport), ces tables peuvent ˆetre impl´ement´ees par des tableaux :
– Q associe `a chaque nœud du graphe la description de son ensemble de chemins candidats,
chacun d’eux ´etant d´ecrit par un triplet, compos´e d’un coˆut, d’un nœud p`ere et de l’indicei
du chemin pour ce p`ere. Cet ensemble est manipul´e comme une file `a priorit´e : l’op´eration
6.4. RECHERCHE DESK MEILLEURS CHEMINS 67 – K donne le nombre de chemins connus pour chaque nœud. Lorsqu’un nœud n n’a jamais ´et´e parcouru,K(n) est consid´er´e non d´efini (ce qui pourra ˆetre impl´ement´e par K(n) = 0 avec des tableaux).
– C, Γ et I d´ecrivent le i`eme chemin de chaque nœud n, pour i ∈ {1, ..., K(n)}) : C(n, i) en
donne le coˆut,Γ(n, i) la suite de nœuds etI(n, i) l’indice de ce chemin pour son nœud source.
Complexit´e
La complexit´e de l’algorithme peut alors ˆetre ´evalu´ee de la fac¸on suivante :
– Chemin Suivant(t) est appliqu´ee au plus k fois et elle ne peut se rappeler r´ecursivement
qu’une fois par appel. Dans le pire des cas, elle se rappelle r´ecursivement jusqu’`a arriver au nœud s, donc autant de fois qu’il y a de nœuds dans le chemin cherch´e, ce qui repr´esente kl
it´erations.
– Les op´erations les plus p´enalisantes, `a chaque appel deChemin Suivant sont l’insertion et
l’extraction d’un candidat. Elles peuvent ˆetre r´ealis´ees enlog d op´erations pour un ensemble
de d ´el´ements, s’il est impl´ement´e par un arbre binaire par exemple. Or, le nombre maximal
de candidats par nœuds est le nombre de ses p`eres, qui peut donc ˆetre major´e pardM, le degr´e maximal deG.
REA s’effectue enO(kl log dM) op´erations. O`u :
k d´esigne le nombre de chemins cherch´es, l le nombre maximal de nœuds par chemin, dM le degr´e maximal des nœuds deG.
Il faut remarquer que le nombre d’appels r´ecursifs deChemin Suivant est g´en´eralement bien
inf´erieur `al, puisque la plupart des chemins sont compos´es de portions de plus courts chemins : pour
ces raisons, l’´enum´eration r´ecursive est souvent beaucoup plus rapide que d’autres m´ethodes, qui pourraient avoir le mˆeme ordre de complexit´e.
En contrepartie, l’algorithme n’est pas directement adaptable `a la recherche des chemins sans boucle, et encore moins `a la contrainte de validit´e formul´ee au 3.3.4 : dans le cas o`u un chemin candidat ne serait pas valide pour le nœud consid´er´e, il faudrait chercher le candidat suivant venant du mˆeme nœud, ce qui supprimerait la condition d’arrˆet de la r´ecursivit´e.
Cependant, l’efficacit´e de l’algorithme laisse pleinement envisager la s´election des chemins va- lides en post-traitement, bien que cela devienne dans ce cas l’op´eration la plus p´enalisante, puisqu’elle n´ecessiteO(kl2) op´erations. Quelques exemples d’application au graphe des voies de circulation sont
fournis et comment´es dans la partie 6.4.5.
6.4.4 Recherche de chemins sans boucle
L’algorithmeMPS
Le probl`eme de l’´enum´eration des k meilleurs chemins sans boucle dans un graphe orient´e est
´egalement un probl`eme classique et fortement document´e [Clarke 63, Perko 86, Ringeisen 87]. Dans [Pascoal 98], les auteurs pr´esentent l’algorithmeMPS (dont le nom est tir´e de leurs initiales), qui s’ins-
pire largement d’une ´enum´eration parA* classique : il utilise un unique ensemble de chemins candi-
dats et chaque it´eration consiste :
– `a s´electionner un meilleur chemin parmi tous les candidats, – puis `a rajouter les nouveaux candidats d´eriv´es de ce chemin.
68 CHAPITRE 6. AFFECTATION DE CHEMINS La seule particularit´e de l’algorithmeMPS est d’´eliminer en mˆeme temps les chemins contenant des
boucles. Pour cela, les coˆuts minimaux(¯c) depuis s sont suppos´es connus, ainsi qu’un arbreP = (pn) de plus court chemins depuiss : chaque nœud n6= s tel que ¯csn6= ∞ est associ´e `a un nœud p`ere pn tel que¯cspn+ cpnn= ¯csn.
Chaque cheminγst = (s· ... · t) sera alors d´ecompos´e en deux parties : un plus court chemin
γsn = (s· ... · n) d´ecrit dans l’arbre P et un chemin γpt = (p· ... · t) non d´ecrit par P. Le nœud particuliern est appel´e le nœud de d´eviation du chemin : c’est le dernier nœud n du chemin tel que (s· ... · n) soit un plus court chemin d´ecrit par P. Dans l’algorithme, ce nœud de d´eviation est en fait
celui qui a permis de g´en´erer le nouveau chemin :
1. Initialement, l’ensemble des chemins candidats ne contient qu’un seul ´el´ement : le plus court chemin entres et t d´ecrit parP. Le nœud de d´eviation de ce chemin est trivialement t.
2. A chaque it´eration, un chemin γst, de coˆut minimal et de nœud de d´eviationn est extrait de l’ensemble des chemins candidats :
– Le nœud de d´eviation scinde le chemin en deux partiesγsnetγpt. Si ces deux parties n’ont aucun nœud en commun, alors le chemin est sans boucle et il est le chemin suivant recherch´e. Dans la n´egative, aucun nouveau chemin ne sera trouv´e lors de cette it´eration.
– Dans tous les cas, de nouveaux chemins candidats sont ajout´es : ils sont form´es `a partir des nœuds p`eres des nœuds deγsn, tant qu’ils ne font pas partie de γst : chacun de ces nœuds
m est associ´e au chemin form´e par le plus court chemin entre s et m (d´ecrit dansP) et par
la portion correspondante deγst. Le nœudm est alors le nœud de d´eviation de ce nouveau candidat.
3. L’algorithme s’arrˆete lorsque le nombre de chemins trouv´es est k, ou lorsqu’il n’y a plus de
chemin candidat.
– Dans cette version, seuls les coˆuts minimaux(¯c) depuis s sont suppos´es connus (l’arbre des
plus courts chemins(pn) n’´etant pas r´eellement n´ecessaire).
MPS(G, (¯c), s, t, k) :
soitQ : {(¯cst, t, ())} (Chemins `a explorer, class´es par coˆuts) soitC : () (Chemins trouv´es)
tant que|C| < k et Q 6= {}
soit (c, n, γt) : Extraire Min(
Q) tant quen6= s et n ∩ γt= {} γt ← (n · γt)
soitpn: un ´el´ement deP `eres(n) tel que ¯csm+ cmn= ¯csn
pour chaquem∈ P `eres(n) tel que m 6= pnetc¯sm6= ∞
¥ Q ← Q ∪ {(c + ¯csm+ cmn− ¯csn,m, γt)} n← pn sin = s et s∩ γt= {} alors Ajouter (s · γt) `a C retournerC