9. Chapitre 1
Introduction, exemples
1.1 Historique
La th´orie des graphes a pris naissance en 1736 : le math´maticien allemand L. Euler
e e
apporta une r´ponse au probl`me que se posaient les habitants de la ville de Koenigsberg ; `
e e a
savoir :comment traverser les sept ponts de cette ville sans jamais passer deux fois par le mˆme.
e
Jusqu’en 1946, la th´orie des graphes reste du domaine des math´matiques; les math´maticiens
e e e
ayant associ´ leurs noms aux travaux les plus marquants sont, entre autres :
e
– au 19`me si`cle : Kirchoff, Hamilton, Sylvester, Kempe, Lucas, Petersen, Tarry
e e
e e e ¨
– au 20`me si`cle (1`re moiti´) : Poincare, Sainte-Lague, Kuratowski, Hall, Polya,
e
¨
Konig, Whitney, Tutte.
Des recherches militaires li´es au conflit mondial de 1939-45 naˆ la Recherche Op´rationnelle
e ıt e
provoquant un d´veloppement de la th´orie des graphes comme mod`les de probl`mes concrets ;
e e e e
cet aspect est encore renforc´, dans les ann´es qui suivent, par le d´veloppement des Sciences
e e e
´
Economiques et de Gestion. Les grands sp´cialistes de cette nouvelle orientation des graphes
e
¨
seront des auteurs tels que Kuhn, Dantzig, Ford, Fulkerson, Ghouila-Houry, Harary,
Saaty, Bellmann, Roy, Berge, Faure, Kaufmann, etc... Une troisi`me ´poque a ´t´ ou-
e e ee
verte dans les ann´es 1960, avec le d´veloppement des sciences de l’information et de la commu-
e e
nication. Des informaticiens tels que Dijkstra, Knuth, Wirth, Sakharovitch, Gondran
et beaucoup d’autres, participent au d´veloppement de l’algorithmique des graphes autant qu’`
e a
la mod´lisation de probl`mes n´s de ces nouvelles sciences en terme de graphes. Une approche
e e e
historique se trouve dans l’introduction de [GM79], qui renvoie d’ailleurs ` un ouvrage historique
a
complet sur la premi`re ´poque de la th´orie des graphes (1746-1936) [BLW76].
e e e
1.2 Relations graphes et informatique
Les relations entre graphes et informatique sont ` double sens :
a
1. l’informatique, outil de r´solution de probl`mes de graphes
e e
2. les graphes, outil de mod´lisation de probl`mes informatiques.
e e
On aboutit donc, dans certaines situations, ` l’informatique comme outil de r´solution de ses
a e
propres probl`mes (via la mod´lisation en termes de graphes). Ce cours s’int´resse essentiellement
e e e
c IFSIC 2004
10. 10 Introduction, exemples
` la partie 1. Outre la n´cessit´ qu’il y a, pour un informaticien, de connaˆ
a e e ıtre les algorithmes
adapt´s aux principaux types de probl`mes de graphe et la mani`re de les programmer, il faut
e e e
mettre l’accent sur un aspect essentiel : l’´tude des techniques de programmation d’algorithmes
e
de graphe. Cette ´tude est enrichissante par elle- mˆme car elle donne l’occasion d’aborder sur
e e
des exemples non triviaux des notions d’algorithmique aussi fondamentales que les structures de
donn´es et l’ad´quation de la repr´sentation au probl`me trait´, les niveaux de programmation
e e e e e
(types abstraits et mise en oeuvre), la complexit´, etc..
e
Cependant la mod´lisation de probl`mes en terme de graphes ne doit pas ˆtre n´glig´e. Nous
e e e e e
donnons dans la section suivante trois exemples de situations– d’origine informatique ou non –
qui se prˆtent ` une telle mod´lisation.
e a e
1.3 Exemples
1.3.1 Le probl`me du chou, de la ch`vre et du loup
e e
L’´nonc´
e e
Un passeur, disposant d’une barque, doit faire traverser une rivi`re ` un chou, une ch`vre
e a e
et un loup. Outre le passeur, la barque peut contenir au plus une des trois unit´s qui doivent
e
traverser. D’autre part, pour des raisons de s´curit´, le passeur ne doit jamais laisser seuls la
e e
ch`vre et le chou, ou le loup et la ch`vre. (Par contre, le loup ne mangera pas le chou... et
e e
r´ciproquement). Comment le passeur doit-il s’y prendre?
e
Mod´lisation
e
Il s’agit d’une situation tr`s classique d’un syst`me ` ´tats poss´dant un ´tat initial, un ´tat
e e ae e e e
final, et des transitions autoris´es. Chaque ´tat se traduit par un sommet, ou point. Chaque
e e
transition autoris´e d’un ´tat ` un autre se traduit par un arc, allant du premier ´tat vers le
e e a e
second. Dans cet exemple, un ´tat est une configuration possible sur la rive de d´part. D´signons
e e e
par P le passeur, L le loup, X la ch`vre, C le chou. Une configuration sera alors d´sign´e par
e e e
l’ensemble des pr´sents sur la rive de d´part. L’´tat initial est PLXC et l’´tat final ∅. Chaque
e e e e
arc, repr´sentant une transition possible, sera libell´ –pour la clart´ de la mod´lisation– par la
e e e e
description de l’action entreprise (A signifie : aller , R signifie retour. On obtient alors le graphe
suivant :
Probl`mee
Chaque solution correspond ` un chemin dans le graphe, de PLXC ` ∅ et alternant les ´tiquettes
a a e
A et R. Un chemin correspond ` une s´quence d’actions enchaˆ
a e ınables les unes aux autres (l’´tat
e
initial d’une action est ´gal ` l’´tat final de la pr´c´dente).
e a e e e
R´solution
e
Pour l’instant, ”` la main” (ou ”au pif”, comme on veut !), on trouve deux solutions :
a
soit 7 travers´es simples, quelle que soit la solution. Laissons au lecteur le soin de fournir au
e
passeur, en langage naturel, les explications n´cessaires ` l’accomplissement de sa mission.
e a
c IFSIC 2004
11. 1.3. Exemples 11
PLX A(PX) L
R(PX)
A(PX)
R(PL) R(PC)
PX
A(PC)
R(P)
A(PL)
PXLC A(PX) PLC X ∅
R(PL)
A(PL) A(PC)
LC R(P)
R(PC)
A(PX)
PXC C
R(PX)
Fig. 1.1 – graphe des transitions
L PLX
PLXC LC PLC X PX ∅
C PXC
Fig. 1.2 – Solution du probl`me des travers´es
e e
1.3.2 Blocage mutuel dans un partage de ressources
3 philosophes chinois A, B, C poss`dent, ` eux trois, trois baguettes R, S, T. Pour manger,
e a
chacun a besoin de 2 baguettes. Lorsqu’un des philosophes d´sire manger, il requiert deux
e
baguettes et ne les lib`re que lorsqu’il a fini son repas 1 . Par contre, tant qu’il n’a pas obtenu
e
les deux baguettes, il ne peut rien faire qu’attendre : mˆme s’il a eu la chance d’obtenir une
e
baguette, il ne la rend pas tant qu’il n’a pas pu aller au bout de son repas.
Consid´rons alors la situation suivante : les 3 philosophes ont envie de manger exactement
e
au mˆme moment, et chacun se pr´cipite sur les baguettes... mais chacun n’en obtient qu’une.
e e
Pour fixer les id´es :
e
A poss`de R et requiert S
e
1. apr`s les avoir soigneusement lav´es!
e e
c IFSIC 2004
12. 12 Introduction, exemples
B poss`de S et requiert T
e
C poss`de T et requiert R
e
Bigre ! Il va bien falloir faire preuve de patience... et de philosophie. Ils ne peuvent pas sortir
de ce blocage mutuel, et vont donc mourir de faim, sauf si quelqu’un (c’est-`-dire l’un d’eux,
a
ou un personnage ext´rieur) se rend compte de la situation et intervient autoritairement, par
e
exemple en lib´rant de force une des baguettes pour l’attribuer ` un des deux autres.
e a
Cette situation est un exemple de ce qui peut se passer dans les syst`mes informatiques
e
complexes, o` plusieurs entit´s (processeurs, p´riph´riques,etc.) se partagent des ressources.
u e e e
Les entit´s en question ´tant a priori moins intelligentes que les philosophes chinois, il faut
e e
pallier cette lacune en ´tant capable de d´tecter automatiquement les situations d’interblocage.
e e
Quel que soit le nombre d’entit´s et de ressources, les configurations de possession/requˆte des
e e
ressources par les entit´s peuvent ˆtre mod´lis´es par un graphe de la mani`re suivante :
e e e e e
. chaque entit´ est repr´sent´ par un sommet
e e e
. un arc existe, depuis le sommet X vers le sommet Y si X requiert une ressource que poss`de Y.e
Ainsi, dans l’exemple des philosophes et des baguettes, on obtient le graphe dessin´ figure 1.3 :
e
B
(S)
Le libell´ sur l’arc d´signe
e e
A (T) la ressource demand´e (par
e
l’origine) et poss´d´e (par
e e
l’extr´mit´)
e e
(R)
C
Fig. 1.3 – graphe des attentes
Un tel graphe est dynamique dans la mesure o` les ressources sont lib´r´es et r´-allou´es au
u ee e e
cours du temps. Mais ` chaque instant, il y a un graphe et un seul et de plus, si une situation
a
d’interblocage apparaˆ le graphe n’´volue plus. Maintenant, il est clair que l’interblocage entre
ıt, e
plusieurs entit´s se produit si et seulement si les sommets correspondants sont situ´s sur un
e e
circuit, c’est ` dire un chemin dont l’extr´mit´ co¨
a e e ıncide avec l’origine. C’est donc un algorithme
de d´tection de circuit qui permettra, ici, de r´soudre le probl`me de d´tection de l’interblocage.
e e e e
Le probl`me pr´sent´ (interblocage) est un exemple d’un type de situation tr`s courant
e e e e
mettant en jeu des objets (les entit´s) et des relations entre ces objets (la requˆte d’une ressource
e e
poss´d´e par un autre).
e e
1.3.3 Fiabilit´ dans les r´seaux
e e
Un r´seau est un syst`me de communication dans lequel des sites communiquent entre eux
e e
soit directement, soit par l’interm´diaire d’autres sites, en envoyant des messages qui circulent
e
le long de lignes de communication. La repr´sentation de tels r´seaux par des graphes est ici
e e
´vidente, les sites et les lignes correspondant trivialement aux sommets et aux arcs. Mais selon
e
c IFSIC 2004
13. 1.3. Exemples 13
le genre d’´tudes que l’on souhaite effectuer, le graphe mod´lisant le r´seau devra ˆtre pr´cis´;
e e e e e e
par exemple :
– les communications sont-elles uni- ou bidirectionnelles?
– Un message ´mis parvient-il sˆrement ou de mani`re al´atoire ` destination?
e u e e a
– Les lignes de communication peuvent-elles acheminer une quantit´ illimit´e ou non d’in-
e e
formations par unit´ de temps? (d´bit d’une ligne)
e e
etc...
Autant de probl`mes, autant de solutions que l’on cherche ` exprimer en termes d’algorithmes
e a
de graphe. A titre d’exemple, nous montrons deux probl`mes li´s ` des ´tudes de fiabilit´.
e e a e e
C
A B
D
Fig. 1.4 – r´seau 1
e
C F
A D B
E G
Fig. 1.5 – r´seau 2
e
Exemple 1. R´sistance aux pannes Dans un r´seau, il peut se produire qu’une ligne de
e e
communication soit coup´e, ne transmettant plus aucun message. Il en est de mˆme pour un site
e e
dont la panne peut ˆtre assimil´e ` la coupure de toutes les lignes qui y aboutissent ou qui en
e e a
partent. Supposons que, dans un r´seau, on achemine des informations d’un sommet A vers un
e
sommet B, ´ventuellement via des sites interm´diaires servant de relais. De telles informations
e e
doivent emprunter des chemins allant de A ` B. Ainsi, une information issue de A parviendra ` B si
a a
et seulement si au moins un chemin est valide (c’est ` dire la s´quence d’arcs qui le constitue ne
a e
comporte que des arcs non d´t´rior´s). Le probl`me pos´ est alors le suivant : quel est le nombre
ee e e e
maximum de pannes auquel cet acheminement peut r´sister? Autrement dit, quel est le nombre
e
maximum de chemins ind´pendants existant entre A et B? (deux chemins sont ind´pendants si
e e
et seulement si ils sont disjoints au sens des arcs et des sommets interm´diaires).
e
c IFSIC 2004
14. 14 Introduction, exemples
Dans le r´seau 1, ce nombre est ´gal ` 2 car, s’il n’y a qu’une panne, quelle que soit sa loca-
e e a
lisation (site ou ligne) il reste toujours un chemin valide. Par contre il existe des configurations
a
` 2 pannes (lignes AC et DB par exemple) auxquelles l’acheminement ne r´siste pas.
e
Dans le r´seau 2, ce nombre est ´gal ` 3 (sites D, F, G).
e e a
Exemple 2. Routage de fiabilit´ maximale Dans ce mod`le, chaque ligne (arc) est munie
e e
d’une valeur, ´gale ` la probabilit´ qu’un message ´mis ` l’origine parvienne sans alt´ration `
e a e e a e a
l’extr´mit´. Un ´metteur A ´met vers un r´cepteur B, plusieurs parcours d’acheminement ´tant
e e e e e e
possibles. Si on suppose que les alt´rations des messages sont des ´v`nements ind´pendants, la
e e e e
probabilit´ de non alt´ration le long d’un chemin est donc ´gale au produit des probabilit´s de
e e e e
chaque arc le constituant. On cherche donc ` d´terminer un routage de fiabilit´ maximale de A `
a e e a
B (c’est ` dire un chemin de A ` B de probabilit´ maximale), repr´sent´ de la mani`re suivante :
a a e e e e
a
` chaque sommet de ce chemin, on associe le sommet suivant.
c IFSIC 2004
15. Chapitre 2
Graphes : un mod`le math´matique
e e
2.1 D´finitions math´matiques et notations
e e
2.1.1 L’objet math´matique
e
2.1.1.1 Vision ensembliste
D´finition 2.1 Un graphe est un doublet G = (X,Γ), o`
e u
X = ensemble –en g´n´ral fini– appel´ ensemble des sommets
e e e
Γ=ensemble de couples (x,y) ∈ X 2 , appel´ ensemble des arcs.
e
Ainsi, Γ ⊆ X 2 . Par d´finition d’un ensemble, entre deux sommets donn´s il existe au plus un
e e
arc; on peut toutefois, dans certains cas, consid´rer des multi-graphes dans lesquels plusieurs
e
arcs distincts existent entre deux sommets, mais il faut alors adopter une d´finition diff´rente
e e
pour Γ.
Exemple : graphe G1
X = {1,2,3,4,5,6,7,8,9}
Γ = {(1,2),(1,3),(2,5),(3,3),(3,4),(3,6),(4,2),(4,5),(5,6),(5,7),(5,8),(6,3),(8,7)}
2.1.1.2 Vision fonctionnelle
D´finition 2.2 Un graphe est un doublet G = (X,Γ), o`
e u
X = ensemble des sommets
Γ= fonction de X dans l’ensemble 2X des parties de X.
Ainsi, ` tout sommet x est associ´ l’ensemble Γ(x) ⊆ X. La notation 2X pour d´signer l’ensemble
a e e
des parties de X vient du fait que, si X est de cardinal fini |X|, le nombre de sous-ensembles
c IFSIC 2004
16. 16 Graphes : un mod`le math´matique
e e
(parties) de X est ´gal ` 2|X| . En effet, si X = {x1 ,x2 , . . . ,xn } la construction d’un sous-ensemble
e a
de X revient ` d´cider, pour chaque xi , si cet ´l´ment fait partie ou non du sous-ensemble. Il y a
a e ee
donc n d´cisions binaires ind´pendantes, soit 2 × 2 × . . . × 2 = 2n = 2|X| constructions possibles.
e e
Exemple : graphe G1
X = {1,2,3,4,5,6,7,8,9}
Γ(1) = {2,3} ; Γ(2) = {5} ; Γ(3) = {3,4,6} ;
Γ(4) = {2,5} ; Γ(5) = {6,7,8} ; Γ(6) = {3} ;
Γ(7) = ∅ ; Γ(8) = {7} ; Γ(9) = ∅
2.1.1.3 Vision relationnelle
A tout graphe G = (X,Γ) est associ´e une relation binaire R sur X, et r´ciproquement, par
e e
l’´quivalence suivante :
e
xRy ⇐⇒ (x,y) ∈ Γ
Nous verrons ult´rieurement qu’` chaque propri´t´ des relations binaires correspond une
e a ee
propri´t´ du graphe.
ee
´
Equivalences et ordres Parmi les relations binaires, celles qui v´rifient les propri´t´s de
e ee
r´flexivit´ et transitivit´ sont particuli`rement importantes. On les appelle des pr´-ordres, car
e e e e e
elles elles expriment en particulier les relations de classement avec ex-aequo.
Exemple de pr´-ordre Soit E un ensemble d’´l´ments. Chaque ´l´ment x est muni d’une
e ee ee
estampille enti`re n(x). Il est facile de voir que la relation x ∼ y ⇔ n(x) ≤ n(y) est un pr´-
e e
ordre. Deux ´l´ments distincts x et y sont ex-aequo si n(x) = n(y). La figure 2.1.a montre le
ee
graphe d’une telle relation.
Un pr´-ordre est sp´cialis´ en ´quivalence ou en ordre selon qu’il est sym´trique ou anti-
e e e e e
sym´trique. Ainsi, la relation d’ex-aequo est une ´quivalence car elle est sym´trique (la figure
e e e
2.1.b en montre le graphe) tandis que la relation x y ⇔ x = y ∨ n(x) < n(y) est un ordre
car elle est antisym´trique (figure 2.1.c). Rappellons qun ordre est dit total si pour tout couple
e
d’´l´ments x et y, on a toujours xRy ou yRx. Un ordre non complet est dit partiel. C’est le cas
ee
notamment de l’exemple de la figure 2.1.c), car certains ´l´ments ne sont pas comparables.
ee
2.1.2 Vocabulaire
Pour un arc (x,y) ∈ Γ, x est l’origine et y est l’extr´mit´ de l’arc
e e
On dit aussi que y est successeur de x, ou que x est pr´d´cesseur de y.
e e
On note :
Γ(x) = {y ∈ X | (x,y) ∈ Γ} l’ensemble des successeurs de x
Γ−1 (x) = {z ∈ X | (z,x) ∈ Γ} l’ensemble des pr´d´cesseurs de x
e e
c IFSIC 2004
17. 2.1. D´finitions math´matiques et notations
e e 17
´e
El´ment a b c d e f g h i j k
Estampille 10 5 4 5 7 7 3 4 5 2 10
j g c b e a a) preordre
(sans les consequences transitives
ni les boucles de reflexivite)
h d f k
i
j g c b e a b) equivalence
(sans les boucles de reflexivite)
h d f k
i
j g c b e a c) ordre
(sans les consequences transitives
ni les boucles de reflexivite)
h d f k
i
Fig. 2.1 – Pr´-ordre, ´quivalence et ordre
e e
c IFSIC 2004
18. 18 Graphes : un mod`le math´matique
e e
Si A ⊂ X :
Γ(A) = Γ(x)
x∈A
Γ−1 (A) = Γ−1 (x)
x∈A
1
d+ (x) = card(Γ(x)) est le degr´ ext´rieur de x
e e
2
1
d− (x) = card(Γ−1 (x)) est le degr´ int´rieur de x
e e
2
d(x) = d+ (x) + d− (x) est le degr´ de x
e
2.1.3 Propri´t´s de graphes
e e
On montre, pour quelques propri´t´ des relations binaires, une propri´t´ caract´ristique du
ee ee e
graphe correspondant. La caract´risation de la transitivit´ ne sera abord´e qu’au chapitre 5
e e e
(fermeture transitive).
Dans ce qui suit, on pose ∆ = {(x,x)|x ∈ X} (ensemble des “boucles”).
R´flexivit´
e e ∀x ∈ X : (x,x) ∈ Γ.
Boucle sur chaque sommet .
∆⊂Γ
Anti-r´flexivit´
e e ∀x ∈ X : (x,x) ∈ Γ.
Graphe sans boucle .
∆∩Γ=∅
Sym´trie
e ∀x ∈ X,∀y ∈ X : (x,y) ∈ Γ =⇒ (y,x) ∈ Γ.
L’existence d’un arc implique l’existence de l’arc oppos´.
e
Γ=Γ −1
Anti-sym´trie
e ∀x ∈ X,∀y ∈ X : (x,y) ∈ Γ ∧ (y,x) ∈ Γ =⇒ x = y .
L’existence d’un arc interdit l’existence de l’arc oppos´, sauf
e
dans le cas d’une boucle.
Γ ∩ Γ−1 ⊂ ∆
c IFSIC 2004
19. 2.2. Notion de chemin 19
2.2 Notion de chemin
D´finition 2.3 Un chemin de G est une suite de sommets
e
[xi1 ,xi2 , . . . ,xik ]
telle que :
(xi1 ,xi2 ) ∈ Γ, (xi2 ,xi3 ) ∈ Γ, . . . , (xik−1 ,xik ) ∈ Γ
xi1 en est l’origine, xik l’extr´mit´ et les xij (2 ≤ j ≤ k − 1), s’ils
e e
existent, les sommets interm´diaires.
e
Un chemin allant de x ` y, dont on ne pr´cise pas les sommets interm´diaires, sera not´ :
a e e e
u = [x ∗ y]
Si l’on souhaite d´signer des sommets interm´diaires, on utilisera la notation telle que :
e e
u = [x1 ∗ xp ∗ xq ∗ xk ]
y est alors un descendant de x et x un ascendant de y.
La longueur du chemin u , ou |u|, est le nombre d’arcs qui le composent.
u · v d´signe la concat´nation de deux chemins tels que
e e
extr´mit´ de u = origine de v ; on a alors |u · v| = |u| + |v|.
e e
Un circuit est un chemin dont l’extr´mit´ co¨
e e ıncide avec l’origine.
Un chemin (resp. circuit) ´l´mentaire est d´fini par une suite de sommets sans r´p´tition (sauf
ee e e e
l’origine et l’extr´mit´ pour un circuit)
e e
2.3 Repr´sentations de l’objet math´matique
e e
On s’int´resse aux repr´sentations visuelles, destin´es au traitement ”` la main”. On peut
e e e a
utiliser :
a)- le graphique (diagramme sagittal) Exemple : graphe G1
2 4 9
1 3 5 7 8
6
Fig. 2.2 – Diagramme Sagittal
c IFSIC 2004
20. 20 Graphes : un mod`le math´matique
e e
Cette repr´sentation pose des probl`mes de topologie (croisements d’arcs) et de lisibilit´
e e e
lorsqu’il y a beaucoup de sommets et/ou d’arcs. Leurs attributs sont port´s sur le graphique,
e
ce qui peut aussi ˆtre source d’ambigu¨ e. Elle n’est adapt´e en g´n´ral que pour les ”petits”
e ıt´ e e e
graphes (card(X) ≤ 10).
b)- un tableau d’attribution des arcs. S’il s’agit de repr´senter l’existence des arcs, ce ta-
e
bleau sera une matrice bool´enne.
e
extr´mit´s →
e e
1 2 3 4 5 6 7 8 9
origines ↓
1 1 1
2 1
3 1 1 1
4 1 1
5 1 1 1
6 1
7
8 1
9
c)- dictionnaire des successeurs resp. des pr´d´cesseurs
e e
1 2, 3 1 /
2 5 2 1, 4
3 3, 4, 6 3 1, 3, 6
4 2, 5 4 3
5 6, 7, 8 5 2, 4
6 3 6 3, 5
7 / 7 5, 8
8 7 8 5
9 / 9 /
Un seul de ces deux tableaux suffit ` sp´cifier compl`tement le graphe.
a e e
c IFSIC 2004
21. Chapitre 3
Aspect algorithmique : un type de
donn´es abstrait
e
Dans ce chapitre on donne d’abord trois exemples de repr´sentation algorithmique. Puis
e
on fait abstraction des repr´sentations particuli`res en d´finissant le type de donn´es abstrait
e e e e
GRAPHE. Le probl`me est de repr´senter, ` l’aide de structures de donn´es algorithmiques, le
e e a e
doublet math´matique (X,Γ) avec Γ ⊆ X 2 .
e
3.1 Les sommets et les arcs
La d´finition des types Sommet et Arc est utilis´e dans toutes les repr´sentations de graphes.
e e e
Elle est pr´sent´e ci-dessous.
e e
3.1.1 Le type Sommet
Tout sommet est identifi´ par un num´ro (entier), qui sera d´sign´ par num. En g´n´ral, on
e e e e e e
suppose que num≥ 1. La notation algorithmique est la suivante :
ENT SOMMET::num ;
signifiant que les objets de type SOMMET ont un attribut de nom num et de type entier. L’expression
x.num d´signe alors le num´ro du sommet x.
e e
3.1.2 Le type Arc
Tout arc poss`de deux sommets (son origine et son extr´mit´).
e e e
SOMMET ARC::ori ;
SOMMET ARC::ext ;
Si γ est un objet de type arc, l’expression γ .ori (resp. γ .ext) d´signe le sommet origine
e
(resp. extr´mit´) de l’arc γ, et γ .ori.num (resp. γ .ext.num) le num´ro du sommet origine (resp.
e e e
extr´mit´) de γ.
e e
c IFSIC 2004
22. 22 Aspect algorithmique : un type de donn´es abstrait
e
i j
Dans une repr´sentation graphique on utilisera souvent le sch´ma ci-dessous pour indiquer
e e
que l’arc dessin´ relie le sommet de num´ro i au sommet de num´ro j.
e e e
Par commodit´ de notation, on d´signera souvent par (x,y) l’arc γ tel que γ .ori=x et γ .ext=y,
e e
ou par (i,j) l’arc γ tel que γ .ori.num=i et γ .ext.num=j.
3.2 Trois exemples de repr´sentation concr`te
e e
Ces exemples utilisent les structures de donn´es suppos´es connues TABLEAU[G], TABLEAU2[G],
e e
LISTE[G]. La premi`re d´crit les tableaux ` une dimension, la deuxi`me les tableaux ` deux
e e a e a
dimensions et la troisi`me les listes chaˆ ees. L’identificateur G d´signe le type des ´l´ments
e ın´ e ee
contenus dans ces structures (type g´n´rique formel).
e e
3.2.1 Repr´sentation par tableaux
e
ENT GRAPHE::nmax ;
-- num´ro maximum de sommet. On repr´sente les graphes dont les sommets peuvent ˆtre num´
e e e
TABLEAU[BOOL] GRAPHE::vs ;
-- G.vs[i] indique l’existence du sommet de num´ro i, 1 ≤ i ≤ G.nmax
e
TABLEAU2[BOOL] GRAPHE::m ;
-- G.m[i,j] indique l’existence de l’arc (i,j), 1 ≤ i, j ≤ G.nmax
On a toujours l’implication ∀i ∀j : G.m[i,j] ⇒ G.vs[i] ∧ G.vs[j] (un arc ne peut relier que des
sommets existants).
Dans cette repr´sentation de G = (X,Γ), les ensembles X et Γ sont repr´sent´s de la mani`re
e e e e
suivante :
x ∈ X ⇔ G.vs[x.num]
(x,y) ∈ Γ ⇔ G.m[x.num,y.num]
Exemple : Graphe G1 nmax = 10 ;
1 2 3 4 5 6 7 8 9 10
vs
v v v v v v v v v f
c IFSIC 2004
23. 3.2. Trois exemples de repr´sentation concr`te
e e 23
1 2 3 4 5 6 7 8 9 10
1 v v
2 v
3 v v v
4 v v
m 5 v v v les cases vides ont
6 v des valeurs faux
7
8 v
9
10
3.2.2 Repr´sentation par tableaux et listes
e
Les attributs nmax et vs sont d´finis comme pr´c´demment.
e e e
TABLEAU[LISTE[SOMMET]] GRAPHE::ts ;
-- G.ts[i] d´signe la liste des successeurs du sommet
e
de num´ro i, 1 ≤ i ≤ G.nmax.
e
On a toujours : si G.vs[i] est faux, alors G.ts[i] est n´cessairement vide (en fait, cette liste
e
n’est mˆme pas d´finie). Dans cette repr´sentation de G = (X,Γ), les ensembles X et Γ sont
e e e
repr´sent´s de la mani`re suivante :
e e e
x ∈ X ⇔ G.vs[x.num]
(x,y) ∈ Γ ⇔ G.ts[x.num].contient(y)
Exemple : Graphe G1 nmax = 10 ;
1 2 3 4 5 6 7 8 9 10
vs
v v v v v v v v v f
3.2.3 Repr´sentation d´centralis´e par listes
e e e
Le type SOMMET est enrichi : chaque sommet a maintenant comme attribut la liste de ses
successeurs. Le graphe se r´duit alors ` la liste de ses sommets.
e a
ENT SOMMET::num ; -- comme pr´c´demment
e e
LISTE[SOMMET] SOMMET::ls ;
-- x.ls est la liste des sommets successeurs de x.
LISTE[SOMMET] GRAPHE::lsom ;
-- G.lsom est la liste des sommets du graphe G.
Dans cette repr´sentation du graphe G = (X,Γ), les ensembles X et Γ sont repr´sent´s de la
e e e
mani`re suivante :
e
x ∈ X ⇔ G.lsom.contient(x)
c IFSIC 2004
24. 24 Aspect algorithmique : un type de donn´es abstrait
e
ts 1 [ 2; 3 ]
2 [5]
3 [ 3; 4; 6 ]
4 [ 2; 5 ]
5 [ 6; 7; 8 ]
6 [3]
7 []
8 [7 ]
9 [9]
10
(x,y) ∈ Γ ⇔ G.lsom.contient(x) et G.lsom.contient(y) et x.ls.contient(y)
lsom
1 2 3 4 5 6 7 8 9
G1
x.ls [ 2; 3 ] [5] [ 3; 4; 6 ] [ 2; 5 ] [ 6; 7; 8 ] 3 ]
[ [] [7 ] [9]
Exemple : Graphe G1
3.3 Le type abstrait Graphe : les m´thodes
e
La plupart des algorithmes de r´solution de probl`mes mod´lis´s par des graphes peuvent ˆtre
e e e e e
d´crits ` l’aide de traitements plus ou moins ´l´mentaires sur le graphe mod´lisant le probl`me.
e a ee e e
Cette description –enchaˆ ınement contrˆl´ des actions– est ´videmment, ` un certain niveau,
oe e a
intrins`que, c’est ` dire ind´pendante de la repr´sentation choisie pour le graphe.
e a e e
Par exemple, l’algorithme de saisie ci-apr`s construit un graphe ` partir de donn´es lues dans
e a e
un fichier. Le format de pr´sentation des donn´es est le suivant :
e e
– S´quence des arcs, chaque arc ´tant donn´ comme un couple d’entiers (num´ro d’origine,
e e e e
num´ro d’extr´mit´), termin´e par (0,0);
e e e e
– s´quence des num´ros des sommets isol´s, termin´e par 0.
e e e e
Exprim´ en faisant abstraction d’une repr´sentation concr`te particuli`re, on obtient le texte:
e e e e
GRAPHE construction c’est
local ENT i, j ;
c IFSIC 2004
25. 3.3. Le type abstrait Graphe : les m´thodes
e 25
GRAPHE G ;
d´but
e
-- initialisation au graphe vide
G. creer ;
-- lecture de la liste des arcs
depuis i ← lire ; j ← lire
jusqu a i=0 et j=0
faire
G. ajoutarc(i, j) ;
i ← lire ; j ← lire
fait ;
-- lecture de la liste des sommets isol´s
e
depuis i ← lire
jusqua i=0
faire
G. ajout sommet(i) ;
i ← lire
fait ;
Result ← G
-- Result est une variable exprimant le r´sultat d’une fonction
e
fin
L’algorithme, pr´sent´ sous cette forme, peut s’appliquer ` n’importe quelle repr´sentation
e e a e
interne du graphe : il suffit, dans chaque cas, de ”traduire” convenablement les op´rations in-
e
diqu´s en italique.
e
Dans ce texte, le type GRAPHE n’est pas d´fini concr`tement : on l’appelle type abstrait.
e e
Cela signifie, qu’` ce niveau d’expression, on n’a pas besoin d’en savoir plus sur les structures
a
de donn´es qui seront effectivement utilis´es pour repr´senter concr`tement l’objet G.
e e e e
Les traitements ´l´mentaires en italique ont ´t´ d´nomm´s. On les appelle des m´thodes du
ee ee e e e
type abstrait GRAPHE, et tout ce que l’on a besoin de connaˆıtre est leur s´mantique. Ainsi, on
e
aura d´fini une fois pour toutes que :
e
creer : proc´dure qui initialise le graphe courant au graphe vide (∅,∅).
e
ajoutarc(ENT i; ENT j) : ajout au graphe courant de l’arc (i, j) (et au besoin des
sommets de num´ro i et j)
e
ajout sommet(ENT i) : ajout au graphe courant du sommet de num´ro i
e
La liste compl`te des acc`s, avec leur s´mantique, est donn´e en Annexe.
e e e e
On peut poursuivre cette d´marche. En effet, les structures de donn´es utilis´s dans les
e e e
repr´sentations ”concr`tes” des graphes peuvent ˆtre elles aussi consid´r´es comme des types de
e e e ee
donn´es abstraits (c’est le cas par exemple du type g´n´rique LISTE[T]). Ces types de donn´es
e e e e
abstraits peuvent ` leur tour ˆtre manipul´s ` travers leurs m´thodes, et mis en oeuvre selon
a e e a e
diverses repr´sentations concr`tes, etc. Dans le cas du type LISTE[T], par exemple, la m´thode
e e e
c IFSIC 2004
26. 26 Aspect algorithmique : un type de donn´es abstrait
e
BOOL contient(T x) est telle que .contient(x) renvoie vrai si et seulement si la liste contient
un ´l´ment de type T, de valeur x.
ee
Nous ne d´taillerons pas ici ces repr´sentations, qui sont ´tudi´es dans les cours de tech-
e e e e
niques de programmation ou structures de donn´es. Il faut n´anmoins mettre l’accent sur le
e e
fait essentiel que la d´marche est absolument identique dans le cas des graphes, des listes, etc... :
e
s´parer la partie intrins`que d’un algorithme des d´tails de mise en oeuvre, ou d’impl´mentation.
e e e e
On peut toujours d´finir de nouveaux niveaux d’abstraction, ` condition de bien pr´ciser les
e a e
types abstraits manipul´s et leurs m´thodes. Remarquons enfin que les types pr´d´finis, mˆme
e e e e e
´l´mentaires (r´el, entier, caract`re, bool´en) utilis´s dans les langages de haut niveau sont
ee e e e e
eux aussi des types abstraits par rapport ` la machine, leur impl´mentation concr`te en m´moire
a e e e
d´pendant du mat´riel utilis´ ; les m´thodes sont alors, dans un langage donn´, les op´rations
e e e e e e
pr´d´finies du langage telles que : lecture/´criture, op´rations arithm´tiques ou logiques, com-
e e e e e
paraisons, etc...
Cette d´marche de programmation par abstractions successives est r´alis´e, notamment,
e e e
dans les langages dits de “programmation par objets”, appel´s encore, improprement, “langages
e
orient´s objets”. Citons, parmi les plus connus, Eiffel, Java, C++, dans une moindre mesure
e
Turbo-Pascal (` partir de la version 6) ou encore, plus anciens, Simula et Smalltalk. Dans
a
ces langages, les types sont d´crits dans des classes, contenant tout ` la fois les valeurs des objets
e a
du type (appel´s attributs) et les m´thodes permettant de manipuler ces valeurs (en lecture ou
e e
en ´criture). Nous renvoyons, pour plus de d´tail, aux cours de programmation s’appuyant sur
e e
la d´marche par objets. Dans la suite de ce polycopi´, les notations utilis´es dans la description
e e e
des algorithmes seront proches de celles utilis´es dans de tels langages, sans pour autant ˆtre li´e
e e e
a
` l’un d’entre eux en particulier. Le . est l’op´rateur d’application de m´thode ou d’attribut `
e e a
l’objet d´sign´. Par exemple, G.ajout arc(i,j) est une instruction, signifiant que l’on applique
e e
l’op´ration ajout arc, avec les deux param`tres effectifs i et j ` l’objet de type GRAPHE d´sign´ par
e e a e e
G. De mˆme, G.valid arc(i,j) est une expression dont l’´valuation renvoie une valeur bool´enne,
e e e
valant vrai si et seulement si l’objet de type GRAPHE d´sign´ par G poss`de l’arc (i, j).
e e e
3.4 Notations
L’approche objet interdit en g´n´ral d’acc´der directement aux attributs d’un objet distant,
e e e
que ce soit en ´criture (c’est-`-dire pour affecter directement sa valeur) ou mˆme en lecture
e a e
(pour obtenir sa valeur). Dans ce cas, des ´critures telles que
e
x.att := valeur (affectation ”` distance”, c’est-`-dire via x, de l’attribut att), ou mˆme
a a e
v:=x.att (lecture ”` distance”, c’est-`-dire via x de l’attribut att)
a a
sont souvent interdites; de telles op´rations ne peuvent en effet ˆtre r´alis´es que par des
e e e e
m´thodes (proc´dures ou fonctions) ´quipant le type de l’objet d´sign´ par x.
e e e e e
Par exemple, avec la d´claration
e
REEL SOMMET::lambda ;
la mise ` jour de l’attribut lambda d’un objet de type SOMMET d´sign´ par x ne pourra se faire
a e e
que si le type SOMMET poss`de une m´thode
e e
c IFSIC 2004
27. 3.4. Notations 27
affecter lambda(REEL v)
post lambda=v
qui effectue, de mani`re interne, l’affectation lambda:=v. L’instruction externe r´alisant une telle
e e
mise ` jour s’´crira alors :
a e
x.affecter lambda(4.18)
Toutefois, afin d’all´ger l’´criture des algorithmes et d’en faciliter la lecture, nous utiliserons
e e
le symbole ← ayant la signification suivante:
x.lambda ←4.18 suppose que le type SOMMET est ´quip´ d’une m´thode r´alisant cette affecta-
e e e e
tion. L’´criture
e ci-dessus est alors ´quivalente
e `
a l’instruction d’appel
x.affecter lambda(4.18). Dans un mˆme souci de simplification, une expression telle x.lambda
e
d´livre la valeur de l’attribut lambda de l’objet d´sign´ par x, en supposant que le type de x est
e e e
´quip´ d’une m´thode permettant cette lecture (certains langages, comme Eiffel, permettent de
e e e
telles lectures directes, ` condition que l’attribut soit ”exportable”).
a
Enfin, toujours pour all´ger le formalisme, si a et b d´signent deux objets de mˆme type,
e e e
l’´criture a ←b d´note l’instruction de copie de l’objet d´sign´ par b dans l’objet d´sign´ par a
e e e e e e
(affectation de valeurs).
Finalement, dans les parties “math´matiques” (propri´t´s, d´monstrations, etc.) nous utilise-
e ee e
rons des notations fonctionnelles plus classiques telles que λ(x) ou pred(x) (au lieu des notations
“algorithmiques” x.lambda ou x.pred). D’une mani`re g´n´rale, x d´signant un objet d’un type
e e e e
C, et att un attribut de ce type, les deux notations att(x) et x.att seront consid´r´es comme
ee
ayant la mˆme signification.
e
c IFSIC 2004
28. 28 Aspect algorithmique : un type de donn´es abstrait
e
c IFSIC 2004
29. Chapitre 4
Relations et op´rateurs entre
e
graphes
Dans ce qui suit, nous d´signerons par G(X) l’ensemble des graphes ayant X comme ensemble
e
de sommets.
Sur G(X), nous pouvons consid´rer un certain nombre de relations ou op´rations; dans ce
e e
chapitre, nous en ´tudions quelques unes. On note :
e
G1 = (X,Γ1 ),G2 = (X,Γ2 )
deux ´l´ments de G(X).
ee
4.1 Relation d’ordre
La relation
G1 G2 ⇐⇒ Γ1 ⊂ Γ2 qui se lit : “G1 est un graphe partiel de G2 ”
est une relation d’ordre partiel sur G(X). Pour cette relation,
G(X) a un minimum : (X,∅)
maximum : (X,X 2 )
Toute partie de G(X) poss`de d’ailleurs au moins un minorant et un majorant, comme c’est
e
le cas de toute partie finie d’un ensemble ordonn´.
e
4.2 Union
G1 ∪ G2 = (X,Γ1 ∪ Γ2 )
Cet op´rateur poss`de toutes les propri´t´s de l’union ensembliste.
e e ee
c IFSIC 2004
30. 30 Relations et op´rateurs entre graphes
e
4.3 Composition
4.3.1 D´finition
e
G3 = G1 ◦ G2 = (X,Γ3 )
est d´fini par :
e
Γ3 = {(x,y) | ∃z ∈ X : (x,z) ∈ Γ1 ∧ (z,y) ∈ Γ2 }
L’op´rateur ◦ n’est pas commutatif. Toutefois, il est associatif et poss`de un ´l´ment neutre,
e e ee
a
` savoir le graphe ”diagonal” :
D = (X,∆) o` ∆ = {(x,x) | x ∈ X}
u
En effet, ∀G ∈ G(X) : G ◦ D = D ◦ G = G.
Par abus de notation, on ´crira parfois
e
Γ3 = Γ1 ◦ Γ2 lorsque G3 = G1 ◦ G2
Proposition 4.1 ◦ est distributif par rapport ` ∪
a
Autrement dit :
∀G1 ,G2 ,G3 ∈ G(X) :
(G1 ∪ G2 ) ◦ G3 = (G1 ◦ G3 ) ∪ (G2 ◦ G3 )
G1 ◦ (G2 ∪ G3 ) = (G1 ◦ G2 ) ∪ (G1 ◦ G3 )
(D´monstration laiss´e au lecteur).
e e
Par contre, ∪ n’est pas distributif par rapport ` ◦ :
a
(G1 ◦ G2 ) ∪ G3 = (G1 ∪ G3 ) ◦ (G2 ∪ G3 )
contre-exemple
G1 = G2 2
2
G3 = D
1 1
G1 ◦ G2 = (X,∅)
(G1 ◦ G2 ) ∪ G3 = D
3 3
D’autre part : G1=G2 D
(G1 ∪ D) ◦ (G2 ∪ D) = G1 ∪ D
Proposition 4.2 L’op´rateur ◦ est compatible ` gauche et ` droite avec
e a a
la relation d’ordre d´finie en 3.1
e
c IFSIC 2004
31. 4.3. Composition 31
D´monstration : Cet ´nonc´ signifie que
e e e
∀G1 ,G2 ,G3 ∈ G(X) : G1 G2 ⇒ (G1 ◦ G3 G2 ◦ G3 )
∧ (G3 ◦ G1 G3 ◦ G2 )
Si Gi = (X,Γi ) (i = 1,2,3), on a :
(x,y) ∈ Γ1 ◦ Γ3 ⇒ ∃z ∈ X : (x,z) ∈ Γ1 ∧ (z,y) ∈ Γ3
⇒ ∃z ∈ X : (x,z) ∈ Γ2 ∧ (z,y) ∈ Γ3
⇒ (x,y) ∈ Γ2 ◦ Γ3
ce qui montre que G1 ◦ G3 G2 ◦ G3 .
La deuxi`me in´galit´ se montre de mani`re analogue.P
e e e e
4.3.2 Algorithme
Nous donnons ci-dessous un algorithme de construction de G3 = G1 ◦ G2 , en supposant pour
simplifier que X = [1..n]
4.3.2.1 Analyse
Pour tout couple (x,y) ∈ X 2 , il faut d´terminer si (x,y) est ou non un arc de G3 . Par
e
d´finition,
e
(x,y) ∈ Γ3 ⇐⇒ ∃z (1 ≤ z ≤ n) ∧ ((x,z) ∈ Γ1 ) ∧ ((z,y) ∈ Γ2 )
Notons P(z) la proposition : ((x,z) ∈ Γ1 ) ∧ ((z,y) ∈ Γ2 ). Il s’agit d’´valuer le pr´dicat :
e e
∃t 1 ≤ t ≤ n : P (t). Cette ´valuation est mise en œuvre par un calcul it´ratif. La figure
e e
ci-dessous en d´termine l’invariant :
e
zone deja examinee zone non encore examinee
1 z z+ 1 n
c’est-`-dire, plus formellement :
a
I ≡ (0 ≤ z ≤ n) ∧ (b = ∃t 1 ≤ t ≤ z : P (t))
Le calcul sera termin´ lorsque :
e
(z = n) ∨ b
et, lorsque ceci se produit :
– si b alors (∃t 1 ≤ t ≤ z : P (t)) ∧ (z ≤ n), c’est-`-dire (∃t 1 ≤ t ≤ n : P (t)) (*succes*)
a
– si ¬b alors (z = n) ∧ ¬(∃t 1 ≤ t ≤ n : P (t)) (* ´chec *)
e
Le r´sultat est donc ´gal ` b
e e a
Si le calcul n’est pas termin´, on progresse en mettant ` jour les variables z et b de la mani`re
e a e
suivante :
z←z + 1 ; b←P (z)
c IFSIC 2004
32. 32 Relations et op´rateurs entre graphes
e
Les valeurs initiales doivent satisfaire l’invariant ; par exemple, on peut prendre :
z←0 ; b←f alse
De cette analyse d´coule le texte de l’algorithme.
e
4.3.2.2 Texte de l’algorithme
Il est donn´ page 32.
e
ALGORITHME DE CONSTRUCTION DE G1◦G2
GRAPHE composer(GRAPHE G1, G2) c’est
-- pr´ : G1 et G2 ont le mˆme ensemble de sommets :
e e
-- G1.ens som=G2.ens som={1,...,n}
local SOMMET x,y,z; BOOL b;
d´but
e
Result.creer;
-- Result est une variable implicite de type GRAPHE, exprimant
le r´sultat de la fonction
e
pour tout x de G1.ens som
pour tout y de G1.ens som
depuis z ← 0 ; b ← false
jusqua z ≥ n ou b
faire
z ← z+1;
b ← G1.validarc(x,z) et G2.validarc(z,y)
fait;
si b alors Result.ajoutarc(x,y) fsi
fpour
fpour
fin
4.3.3 Complexit´
e
La boucle interne depuis ... jqa comporte au plus n pas , et elle est ex´cut´e exactement n2
e e
fois. La complexit´ maximum est donc :
e
2n3 acc`s validarc
e
n3 op´rations et
e
n2 acc`s ajoutarc
e
c IFSIC 2004
33. 4.4. Puissances d’un graphe 33
On dit que c’est un algorithme en O(n3 ), en termes d’acc`s validarc.
e
Remarques
1) La complexit´ de mise en œuvre de chacun des acc`s d´pend ´videmment de la repr´sentation
e e e e e
choisie pour chacun des 3 graphes G1, G2, Result.
2) Si les graphes sont tous les trois repr´sent´s par leur matrice bool´enne, alors il est facile
e e e
de voir que
M3 = M1 · M2 o` le · d´signe le produit matriciel bool´en de deux matrices :
u e e
n
∀1 ≤ i,j ≤ n : m3ij = (m1ik ∧ m2kj )
k=1
4.4 Puissances d’un graphe
On d´finit par r´currence sur p ∈ N le graphe G[p] = (X,Γ[p] ) de la mani`re suivante :
e e e
D´finition 4.3
e
G[0] = D
∀p ≥ 1 : G[p] = G[p−1] ◦ G = G ◦ G[p−1]
propri´t´s : G[k] ◦ G[l] = G[k+l]
e e
(G[k] )[l] = G[kl]
(identiques aux puissances des nombres r´els)
e
Nous allons interpr´ter les puissances d’un graphe.
e
Proposition 4.4 Soit G[p] = (X,Γ[p] ) la puissance peme d’un graphe
`
G = (X,Γ). Alors, (x,y) ∈ Γ[p] si et seulement si il existe, dans G, un
chemin de longueur p, allant de x ` y (ce chemin est un circuit si x =
a
y).
D´monstration Par r´currence sur p :
e e
– Pour p= 1, le r´sultat est ´vident : G[1] = (X,Γ) et les arcs sont les chemins de longueur 1.
e e
– Supposons d´montr´ jusqu’` p-1.
e e a
(x,y) ∈ Γ[p] = Γ[p−1] ◦ Γ
⇐⇒ ∃z ∈ X : (x,z) ∈ Γ[p−1] ∧ (z,y) ∈ Γ
c IFSIC 2004