• Aucun résultat trouvé

REA : ´enum´eration r´ecursive des k meilleurs chemins entre s et t

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