• Aucun résultat trouvé

Introduction aux graphes

N/A
N/A
Protected

Academic year: 2022

Partager "Introduction aux graphes"

Copied!
55
0
0

Texte intégral

(1)

19/03/2020

1

Introduction aux graphes

(2)

19/03/2020

2

Définitions

Un graphe est un couple G = (S, A)

où S est un ensemble (l'ensemble des sommets) et A est une partie de S x S, l'ensemble des arêtes.

• Deux arêtes (s, t) et (s', t') sont consécutives si t = s' A = {(1, 2), (1, 4), (2, 4), (4, 3)}

Arêtes consécutives (1, 2) et (2, 4)

(3)

19/03/2020

3

Définitions

Un chemin dans un graphe est une suite d'arêtes consécutives.

• (1, 4), (4, 3), (3, 2) : chemin du sommet 1 au sommet 2

Graphe non dirigé : si (s, t) est une arête, (t, s) est une arête

(4)

19/03/2020

4

Défintions

• Un graphe G est composé de deux ensembles S et A :

• S est un ensemble fini d’éléments, appelés sommets

• A est un ensemble fini d’éléments, appelés arcs

Notion d’arc

• un arc a est un élément du produit cartésien des sommets S × S :

• il est noté a = (i , j) où i et j sont dans S

• A traduit une organisation relationnelle des sommets entre eux.

(5)

19/03/2020

5

Défintions

Concept d’orientation

• graphe non orienté : (i , j) = (j , i)

• graphe orienté : (i , j) ≠ (j , i)

• G = (S,A) :

• S = {1, 2, 3, 4}

• A = {(1, 2), (2, 3), (3, 1), (3, 4)}

(6)

19/03/2020

6

Notation et

Terminologie

Notation

si un graphe à n sommets, les sommets sont notés 1, 2, . . . , n

un arc orienté est noté(i , j ), où i et j sont pris dans l’intervalle 1..n

Terminologie

Sommets adjacents: Si (a, b) est un arc alors a et b sont des sommets adjacents

Arc incident

Si (a, b) est un arc, alors :

(a, b) est un arc incident extérieurement à a

(a, b) est un arc incident intérieurement à b

Degré d’un sommet nombre d’arcs incidents au sommet

(7)

19/03/2020

7

Degré

• Soit u ∈ S un sommet de G et d(u), le degré de u

d(u) est le nombre d'arcs ou d'arêtes incidents à u

si G est orienté :

de (u) (le degré entrant) est le nombre d'arcs qui arrivent à u. (x, u)

ds (u) (le degré sortant) est le nombre d'arcs qui partent de u. (u, x)

d(u) = de (u) + ds (u)

(8)

19/03/2020

8

Exemple

(9)

19/03/2020

9

Terminologie (suite)

Chemin:séquence de sommets (s0, s1, s2, . . . , sp−1, sp) où (s0, s1), (s1, s2, ), . . . , (sp−1, sp) sont des arcs

la longueur d’un chemin (s0, s1, ..., sp) vaut p

un chemin simple est un chemin qui ne comporte pas plusieurs fois le même arc

un chemin élémentaire est un chemin qui ne passe pas plus d’une fois par le même sommet

un circuit est un chemin de la forme (s0, s1, s2, ..., sp−1, s0)

Graphe valué :graphe où une valuation est associée à chaque arc

(10)

19/03/2020

10

Représentation par une matrice d’adjacence

Soit G un graphe à n sommets notés 1, 2, . . . , n

G est représenté par une matrice A[1..n][1..n]

Graphe non valué

si (i , j) est un arc de G alors

A[i ][j ] =1

sinon

A[i ][j ] =0

finsi

Graphe valué

si (i , j) est un arc de G valué par v alors

A[i ][j ] = v

sinon

A*i +*j + une valeur particulière qui dénote l’absence d’arc

finsi

(11)

19/03/2020

11

Matrice d’adjacence d’un graphe

Exemple:

(12)

19/03/2020

12

Représentation par une liste d’adjacence

Liste des arcs

• G est représenté par une liste d’arcs (i , j)

Listes d’adjacence

• G est représenté par une liste de sommets ls

=< s1, . . . , sn >

• chaque élément si de la liste ls est une liste qui contient les sommets successeurs du sommet i dans le graphe G

(13)

19/03/2020

13

Représentation par une liste d’adjacence

(14)

19/03/2020

14

Représentation par une liste d’adjacence

en C :

typedef struct cel{

int st;

struct cel* suiv;

}cellule;

typedef cellule* Liste;

typedef struct{

Liste a[N_MAX];

int n;

}grapheL;

(15)

19/03/2020

15

Parcours d’un graphe

• Parcours de tous les sommets

• visiter chaque sommet du graphe une seule fois

• appliquer un même traitement en chaque sommet

(16)

19/03/2020

16

Parcours à partir d’un sommet s

parcours en profondeur

• le principe consiste à descendre le plus

”profond” dans le graphe à partir de s, avant de revenir pour prendre une autre direction

parcours en largeur

• le principe consiste à visiter les sommets

situés à une distance 1 de s, puis ceux situés à une distance 2 de s, etc...

(17)

19/03/2020

17

Parcours à partir d’un sommet s

• il faut un mécanisme pour éviter de boucler indéfiniment :

• Marquer les noeuds

• Lister les noeuds traités

(18)

19/03/2020

18

Parcours en largeur

principe de l'algorithme

1- Dans le parcours en largeur, on utilise une file.

On enfile le sommet de départ.

2-On visite les voisins de la tête de file. On les enfile (en les numérotant au fur et à mesure de leur découverte) s'ils ne sont pas déjà présents dans la file, ni déjà passés dans la file.

3-On défile

4-On recommence au point 2 (tant que la file n'est pas vide).

(19)

19/03/2020

19

Parcours en largeur

• Dans un parcours en largeur, on visite en

premier lieu tous les sommets à une distance 1 du départ, puis tous les sommets à une

distance 2 du départ,…

• Pour tout sommet u du graphe P[u] sera le père de u, c’est-à-dire le sommet à partir duquel le sommet u à été découvert lors du parcours.

(20)

19/03/2020

20

Parcours en largeur

• Pour tout sommet u du graphe couleur[u]

vaut blanc si u n’est pas passé dans la file, gris s’il est dans la file, noir lorsqu’il sorti de la file.

• On utilise une file f, on enfile un sommet

lorsqu’il est découvert, on le défile lorsqu’il est exploité.

(21)

19/03/2020

21

Exemple de parcours en largeur

• Soit le graphe suivant et sa représentation par une liste d’adjacence:

(22)

19/03/2020

22

Exemple de parcours en largeur

(23)

19/03/2020

23

Exemple de parcours en largeur

(24)

19/03/2020

24

Exemple de parcours en largeur

(25)

19/03/2020

25

Exemple de parcours en largeur

(26)

19/03/2020

26

Exemple de parcours en largeur

(27)

19/03/2020

27

Exemple de parcours en largeur

(28)

19/03/2020

28

Exemple de parcours en largeur

(29)

19/03/2020

29

Exemple de parcours en largeur

(30)

19/03/2020

30

Exemple de parcours en largeur

(31)

19/03/2020

31

Exemple de parcours en largeur

(32)

19/03/2020

32

Parcours en largeur: algorithme

PL(G,s)

for x in G : couleur[x]='blanc‘

P[x]=None

d[x]=

P[s]=None

d[s]=0

couleur[s]='gris‘

f=file_vide()

f=enfiler(f,s)

while !est_vide(f)

u=head(f)

for v in add[u] :

if couleur[v]=='blanc'

P[v]=u

d[v]= d[u]+1

couleur[v]='gris'

f=enfiler(f,v)

f=defiler(f)

couleur[u]='noir'

return P

(33)

19/03/2020

33

Chemin entre deux sommets

• chemin(G,s,v) :

• P=PL(G,s)

• ch=liste_vide();

• ch=inserer(ch,0,v)

• while P[v] :

• ch=inserer(ch,0,P[v])

• v=P[v]

• return ch

(34)

19/03/2020

34

Parcours en profondeur

principe de l'algorithme

La stratégie suivie par un parcours en profondeur est de descendre plus profondément dans le graphe chaque fois que c’est possible. Lors d’un parcours en profondeur, les arcs sont explorés à partir du sommet v découvert le plus récemment et dont on n’a pas encore exploré tous les arcs incidents. Lorsque tous les arcs de v ont été explorés,

l’algorithme revient en arrière pour explorer les arcs qui partent du sommet à partir duquel v a été découvert. Ce processus est répété jusqu’à ce que tous les sommets

accessibles à partir du sommet origine aient été découverts.

(35)

19/03/2020

35

Exemple de Parcours en profondeur

(36)

19/03/2020

36

Exemple de Parcours en profondeur

(37)

19/03/2020

37

Exemple de Parcours en profondeur

(38)

19/03/2020

38

Exemple de Parcours en profondeur

(39)

19/03/2020

39

Exemple de Parcours en profondeur

(40)

19/03/2020

40

Exemple de Parcours en profondeur

(41)

19/03/2020

41

Exemple de Parcours en profondeur

(42)

19/03/2020

42

Exemple de Parcours en profondeur

(43)

19/03/2020

43

Exemple de Parcours en profondeur

(44)

19/03/2020

44

Exemple de Parcours en profondeur

(45)

19/03/2020

45

Exemple de Parcours en profondeur

(46)

19/03/2020

46

Exemple de Parcours en profondeur

(47)

19/03/2020

47

Exemple de Parcours en profondeur

(48)

19/03/2020

48

Exemple de Parcours en profondeur

(49)

19/03/2020

49

Exemple de Parcours en profondeur

(50)

19/03/2020

50

Exemple de Parcours en profondeur

(51)

19/03/2020

51

Exemple de Parcours en profondeur

(52)

19/03/2020

52

Arborescence associée au parcours

(53)

19/03/2020

53

Parcours en profondeur: algorithme

• Parcours_prof(graphe G, sommet s)

• couleur[s]gris

• pour tout v in add[s] faire

Si couleur[v]= =blanc alors

Parcours_prof(G,v) Finsi

Finpour

couleur[s]noir fin

(54)

19/03/2020

54

Exemple de parcours

(a)un graphe G, (b) la liste d’adjacence de G

(55)

19/03/2020

55

Exemple de parcours

• Parcours en profondeur: v0, v1, v3, v7, v4, v5, v2, v6

• Parcours en largeur: v0, v1, v2, v3, v4, v5, v6, v7

Références

Documents relatifs

[r]

• chaque trimestre, le montant vers´e augmente de 5 % par rapport ` a celui du trimestre pr´ec´edent. On note u n le montant, exprim´e en euro, vers´e le

L’ensemble des morceaux musicaux qu’il possède se divise en trois genres distincts selon la répartition suivante : 30 % de musique classique, 45 % de variété, le reste étant

— Soit Y] une espèce de structures quasi-inductive; alors (2, &lt;;) est une classe sous-inductive et, en vertu du corollaire 2 de la proposition 12-2, (2*, &lt;;) est une

Compétences

[r]

Compétence : identifier un personnage, comparer des lettres, écrire un mot en lettres mobiles. Consigne : entoure le loup, colle les lettres de LOUP dans le

Compétitive Local Exchange Carriers.... Progression de la pénétration du téléphone