Recherche de cycles dans les graphes
par Adrien Panhaleux
20 mai 2007
Introduction
La d´
etection de cycles dans les graphes peut ˆ
etre int´
eressante pour plu-
sieurs probl`
emes, que ce soit pour d´
etecter des graphes caract´
eris´
es par sous-
structure interdite, pour des ´
etudes de complexit´
e (certains probl`
emes ´
etant
dans P tandis que d’autre sont NP-complet), pour am´
eliorer des algorithmes
dans les r´
eseaux,...
”Chercher un cycle dans un graphe” est en fait un probl`
eme vague. Le
graphe est-il orient´
e ou non ? le cycle est-il ´
el´
ementaire ? Cherche-t-on un cycle
`
a taille k fix´
e ?
En pr´
ecisant diff´
erents param`
etres, on arrive `
a une multitude de probl`
emes
aux complexit´
es connues bien diff´
erentes. Un tableau r´
ecapitulatif se trouve
en annexe `
a la page 10, construit `
a partir des diff´
erents articles pr´
esents dans
la bibliographie. Ainsi, selon que le graphe soit orient´
e ou non, les probl`
emes
suivants ont ´
et´
e relativement souvent ´
etudi´
es :
Existence d’un cycle
Taille maximum
Taille minimum
Cycles de taille k(Ck), k´
etant fix´
e
Cycles de taille impaire
Cycles de taille paire
La suite est constitu´
ee d’abord de la pr´
esentation de r´
esultats bien connus
en partie 1, suivi de la pr´
esentation relativement d´
etaill´
ee de la recherche du
cycle minimum (partie 2) et des cycles sans cordes (partie 3), suivi d’une pr´
esentation
succinte de la recherche de cycles pairs ou impairs (partie 4).
1 Trivialit´es
Dans la recherche de cycles, certains r´
esultats sont connus, avec une com-
plexit´
e certaine. Dans le tableau situ´
e en page 10, ce sont les r´
esultats ne faisant
pas appel `
a des r´
ef´
erences d’articles cit´
es en bibliographie.
Ces probl`
emes sont la recherche de l’existence d’un cycle quelconque et la
recherche du cycle de taille maximale. Par contre, l’existence d’un cycle ne ga-
1
ranti pas l’existence d’un cycle sans corde, contrairement `
a ce que l’on pourrait
croire, `
a cause de la d´
efinition de cycle sans corde (voir partie 3).
1.1 Existence d’un cycle
Que ce soit dans le cas orient´
e ou non-orient´
e, il est relativement ais´
e de
chercher un cycle simple ou ´
el´
ementaire. Il est en effet bien connu qu’un par-
cours du graphe, que ce soit en largeur ou en profondeur, permet si l’on a
colori´
e le graphe au passage de d´
etecter la pr´
esence d’un cycle.
Cet algorithme est optimal et `
a la base de plusieurs autres algorithmes : Re-
cherche d’un arbre couvrant, garbage collector dans les langages de program-
mation tels Java ou Ocaml,...
Le parcours en profondeur comme en largeur explore une fois et une seule
chaque sommet et chaque arˆ
ete. Ainsi, sa complexit´
e est en O(n+m).
Dans le cas d’un graphe orient´
e, le parcours du graphe peut ne pas d´
etecter
les cycles. Il existe alors un autre algorithme en O(n+m)rappel´
e ici (algo-
rithme pr´
esent´
e en [2]) :
Algorithme 1.Reconnaissance de graphes orient´es sans circuits
Pour tout xX,d(x) = 0 ;
Pour tout xX, faire
Pour tout ysuccesseur de x,d(y)++;
Fin pour tout
`a traiter =;
nb sommets = 0 ;
Pour tout xX, faire
Si d(x) = 0 alors
`a traiter ={x}S`a traiter ;
nb sommets + + ;
Fin pour tout
Tant que `a traiter 6=, faire
x=premier(`a traiter);
`a traiter = `a traiter − {x};
Pour tout ysuccessur de x, faire
d(y) ;
Si d(y) = 0 alors
`a traiter = `a traiter S{y};
nb sommets + + ;
Fin pour tout
Fin tant que
Si nb sommets =nalors Gn’a pas de circuit, sinon Ga un circuit.
1.2 Longueur maximum, NP-compl´etude
Un autre probl`
eme grandement connu est la recherche d’un cycle de lon-
gueur maximum. Ce probl`
eme est en fait NP-complet, sauf peut ˆ
etre dans le
cas de recherche de cycles sans cordes.
2
En effet, la recherche d’un cycle ´
el´
ementaire de taille maximum se r´
eduit au
probl`
eme du cycle hamiltonien, que nous rappelons ici :
Cycle Hamiltonien : ´
Etant donn´
e un graphe G= (V, E), existe-t-il un cycle
passant une fois et une seule par chaque sommet de V?
Ainsi, si l’on a un algorithme permettant de trouve un cycle ´
el´
ementaire de
taille maximum, on peut d´
ecider selon que la taille soit |V|ou non si le graphe
a un cycle hamiltonien. D’o `
u la recherche de cycle ´
el´
ementaire maximum est
NP-complet, dans le cas orient´
e ou non orient´
e.
2 Cycles de longueur minimum
Un article de 1977 ´
ecrit par Alon Itai et Michael Rodeh [1] pr´
esente diff´
erents
algorithmes pour chercher un cycle de longueur minimum, dans les cas orient´
es
et non orient´
es.
Il est `
a remarquer que les cycles de taille minimum sont tous ´
el´
ementaires,
car si l’on a un cycle simple non-´
el´
ementaire, pr´
esentant donc au moins deux
boucles, on peut obtenir un cycle plus court en enlevant une boucle surnum´
eraire.
Encore une fois, la complexit´
e n’est a priori pas la mˆ
eme pour un cycle sans
corde `
a cause de la d´
efinition de celui-ci (voir partie 3).
2.1 Id´ee g´en´erale
L’id´
ee de l’algorithme est que si l’on fait un parcours en largeur sur un
des sommets du cycle de taille minimum, on obtient soit un cycle de taille
minimum, soit un cycle plus grand d’un seul arc. De tels cycles sont appel´
es
cycles presque minimaux (”almost minimum circuit” en anglais).
En particulier, si la taille du cycle minimum est impaire, il est possible que
l’on trouve un circuit plus grand d’une arˆ
ete, ce qui n’arrivera pas si le circuit
minimum est de taille paire, comme le montre la figure 1 ci-dessous extrait
de l’article. Ceci permet de comprendre vaguement pour les complexit´
es sont
diff´
erentes dans les cas pairs et impairs, ce qui est la base de la partie 4.
FIG. 1 – Diff´
erents cas lors de l’exploration en largeur
3
2.2 Algorithme - cas non-orient´e
L’algorithme pr´
esent´
e se d´
ecompose en deux ´
etapes :
1. Recherche d’un cycle presque minimal en O(n2)
2. Si le cycle trouv´
e est de taille paire, chercher une arˆ
ete dont les deux som-
mets sont du mˆ
eme niveau qu’un des sommets qui a arrˆ
et´
e l’algorithme
pr´
ec´
edent. (cf figure 1, dessin (c))
La premi`
ere ´
etape se fait par une exploration en largeur, v´
etant le sommet
de d´
epart.
Algorithme 2.FRONT(v)
Pour tout uV,level(u) =nil ;
level(v) = 0 ;enqueue(v);
Tant que la queue n’est pas vide, faire
u=dequeue ;
Pour tout wA(u), faire
Si level(w) ==nil,
level(w) = level(u)+1;
enqueue(w);
Sinon, si level(u)level(w),
//On a trouv´
e un cycle de longueur 2level(u)+1
return(level(u)) ;
Fin pour tout
Fin tant que
//Il n’y a pas de circuits dans cette composante connexe
return();
Cet algorithme ´
etant une exploration en largeur, sa complexit´
e est de O(n+
m). Appliqu´
e sur tous les sommets, on trouve la longueur d’un cycle presque
minimal en temps O(n(n+m)). Une deuxi`
eme proc´
edure va permettre de pou-
voir passer au circuit de taille minimale. Cette proc´
edure prend en entr´
ee l’en-
semble F(v)d´
efinit comme suit `
a la fin de FRONT sur le sommet v, se termi-
nant `
alevel(u):
F(v) = {u}[{xV|xqueue, level(x) = level(u)}.
De plus, F(v)est tri´
ee pour permettre une recherche rapide et pour permettre
de dans les premiers et les derniers sommets. EDGE travaille sur une copie
du graphe pour faire des recherches destructives (ou colorie le graphe, selon
l’envie).
4
Algorithme 3.EDGE(S)
Pour ide 1`
a|S| − n1/3, faire
u=S(i);
Tant qu’il y a des voisins wde u, faire
Si wSreturn (u, w);
Supprimer wdu graphe (ou le colorier) ;
Fin tant que
Fin pour i
Pour ide max(1,|S| − n1/3+ 1) `
a|S|, faire
u=S(i);
Pour jde i+ 1 `
a|S|, faire
w=S(j);
Si (u, w)Ealors return(u, w)
Fin pour j
Fin pour i
return(nil);
Ceci permet alors de faire la proc´
edure permettant de trouver un circuit de
taille minimum dans un graphe non-orient´
e :
Algorithme 4.MIN CIRCUIT
Pour tout vV, faire kmin = min(kmin,FRONT(v)) ;
Si kmin =, alors return();
Pour tout vVavec k(v) = kmin,faire
a=EDGE(F(v)) ;
Si a6=nil, alors return(2kmin + 1) ;
Fin pour tout
return(2kmin + 2) ;
La proc´
edure FRONT ´
etant en O(n+m)et la proc´
edure EDGE en O(n), la
proc´
edure MIN CIRCUIT est en O(n(n+m)).
2.3 Algorithme - cas orient´e
L’article de Alon Itai et Michael Rodeh [1] pr´
esente deux algorithmes pour
chercher un circuit dans un graphe orient´
e. Le premier, bien d´
etaill´
e, a une
complexit´
e en moyenne de O(n2log(n)) mais peut avoir en principe une com-
plexit´
e de O(nm). Nous allons ici plutˆ
ot pr´
esenter l’algorithme en temps nωlog(n)
se basant sur la multiplication de matrices1. Dans la suite, Djrepr´
esente une
matrice telle que (Dj)u,v = 1 si et seulement si il y a un chemin de taille jde
u`
av:
1nωrepr´
esente la complexit´
e de la multiplication de matrices de taille n.
5
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !