Cours : ``Parallélisme'' Travaux dirigés E. Goubault & M. Martel
TD 3
21 janvier 2002
1 Composantes connexes d'un graphe
Soit G=(V,E) un graphe non-orienté: V est un ensemble de noeuds
et E Í V × V est l'ensemble
d'arêtes du graphe G (en tant que relation, on supposera E symmétrique).
On rappelle qu'un noeud x est voisin immédiat de y dans G
si et seulement si xEy.
Deux noeuds x et y sont reliés si et seulement si il existe une
suite finie (x0,···,xn) de noeuds de G, avec x0=x, xn=y
et (xi,xi+1) immédiatement voisins (pour i=0,···,n-1).
La relation ``être relié à'' est une relation d'équivalence sur les
noeuds de G. On appelle ensemble de composantes connexes de G
l'ensemble des classes d'équivalence de noeuds de G pour cette relation
d'équivalence. On dira qu'un noeud v de G appartient à la composante
n de G si sa classe d'équivalence est la nième parmi les composantes
connexes de G.
.2cm
.2cm
Question 1
Soit u le nombre de noeuds d'un graphe G et v son nombre d'arêtes. Quelle
est la complexité asymptotique, au pire, de l'algorithme séquentiel décrit
précédemment (on ne cherchera pas à prouver ce résultat)?
.2cm
On appelle pseudo-forêt tout graphe orienté (c'est-à-dire que les arêtes
ont maintenant une direction: la relation de voisinage n'est plus forcément
symétrique) tel que tout noeud ait au plus un voisin immédiat. Dit de façon
plus formelle, pour tout noeud n de la pseudo-forêt G=(V,E),
le cardinal de {n' | (n,n') Î E} est inférieur ou égal à un:
le nombre d'arcs sortant de tout noeud est au plus un. A la figure 1
est donné un exemple de pseudo-forêt, à la figure 2 on trouvera
un graphe qui n'est pas une pseudo-forêt.
On appelle arbre tout graphe orienté avec une seule racine (c'est-à-dire un seul point qui n'a pas de voisin immédiat), et un unique chemin entre tout noeud
du graphe et cette racine. Remarquez bien que l'on définit les arbres avec une
convention d'orientation des arcs exactement à l'envers de ce que l'on a fait
par exemple en tronc-commun.
On dit qu'un arbre est étoilé si chacun de ses noeuds est
directement relié à la racine.
Un pseudo-arbre est un arbre auquel on
a rajouté un arc allant de la racine à un autre noeud (par exemple
à la figure 1). Un pseudo-arbre
étoilé est un arbre étoilé auquel on a rajouté une boucle de la racine
vers elle-même (on appelera encore ce noeud, la racine du pseudo-arbre
étoilé).
On appelle graphe fonctionnel G tout graphe fabriqué à partir d'une fonction
f: V ® V, où V est un ensemble fini, de la façon suivante:
G=(V,E) (le même V) où E={(v,f(v)) | v Î V}.
.2cm
file=fig1.eps,width=3cm,clip=
Figure 1:
file=fig2.eps,width=3cm,clip=
Figure 2:
Question 2
Est-ce que tous les graphes sont des graphes fonctionnels1
? Montrer que les graphes
fonctionnels sont des pseudo-forêts, que les pseudo-forêts sont des
unions disjointes d'arbres et de pseudo-arbres et que les pseudo-forêts qui sont
des graphes fonctionnels sont des unions de pseudo-arbres.
.2cm
On va maintenant pouvoir définir un algorithme parallèle de recherche de
composantes connexes sur une machine PRAM, dont on ne spécifie pas
pour le moment le type (EREW, CREW ou CRCW). On suppose disposer au début
de l'algorithme, d'une représentation d'un graphe G=(V,E) par une matrice
d'adjacence A, c'est-à-dire si on suppose V={1,···,n}, A est
une matrice n × n telle que Ai,j=1 si (i,j) Î E (et 0 sinon).
On définit maintenant la fonction C: V ® V avec
C(v)=
ì í î
v
si v est un noeud isolé
min{u |
Au,v=1}
sinon
.2cm
Question 3
Indiquer, selon le type de la PRAM utilisée, à quelle complexité on peut
arriver pour le procédé qui, étant donné A, calcule le
tableau qui à l'entrée v associe C(v).
.2cm
Question 4
Soit GC le graphe fonctionnel de C. On sait par la question 2 que
GC est une union de pseudo-arbres Gi=(Vi,Ei) (i=1,···,s). Montrer
que tous les noeuds de chaque Vi sont dans la même composante connexe du
graphe G de départ.
.2cm
On peut prouver de plus (mais on ne demande pas de le faire) que tout cycle
de GC est soit une boucle triviale (de la forme (v,v) pour un noeud v)
soit contient exactement deux arcs. On sait aussi par la question 2 que
chaque cycle des pseudo-arbres Gi contient la racine de Gi.
.2cm
Question 5
On cherche à transformer les pseudo-arbres Gi de la pseudo-forêt GC
de la question 4 en pseudo-arbres étoilés Ti ou en points isolés.
Programmer
un algorithme PRAM (on le simulera par un programme JAVA multi-threadé)
en O(é log(n) ù) (où n est le nombre
de noeuds du pseudo-arbre considéré) effectuant cette transformation.
.2cm
Remarquez que les Ti forment
une pseudo-forêt qui est le graphe fonctionnel d'une fonction D: V ® V.
Soient ri les racines des pseudo-arbres étoilés Ti (i=1,···,s).
Grâce à la question 4, on sait que les ri définissent un sur-ensemble
des composantes connexes du graphe G de départ. Mais en fait, certains
des ri sont reliés par un chemin dans le graphe G à d'autres rj.
On acceptera sans démonstration le fait
que ri est relié par un chemin à rj dans G si et seulement si
il existe v Î Vi, w Î Vj tels que (v,w) Î E.
.2cm
Question 6
En utilisant la fonction D définissant les pseudo-arbres étoilés
Ti, programmer une machine PRAM CRCW (en mode consistant)
qui calcule efficacement
le graphe des ``super-noeuds'' ri par une matrice d'adjacence
A', dans la mémoire partagée, tel que ri est relié à rj si
il existe un chemin dans G qui relie ri à rj.
.2cm
Question 7
Indiquer sans programmer quelle serait a priori la complexité
du calcul de la question 6 si on avait une machine PRAM CREW, et si on avait
une machine PRAM EREW.
.2cm
On définit un algorithme qui, partant de k=0, A0=A de taille n0 × n0,
fait les étapes
suivantes, tant que nk>0 (nk étant la taille de Ak):
calculer GC et les Ti par la méthode de la question 4 et 5,
calculer Ak=(Ak-1)' de taille nk × nk
par la méthode de la question 6.
Programmer cet algorithme.
.2cm
Question 8
Prouver que nk £ nk-1/2. On pourrait prouver, mais on ne le
demande pas ici, que l'algorithme sur une machine PRAM CRCW en mode consistant
prendrait un temps O(log2(n)) pour un total de O(n2) opérations, où
n est le nombre de noeuds dans le graphe G de départ. Quelle est l'efficacité
de l'algorithme?