Graphes - Séance 7 - Université Paul Valéry

publicité
Graphes - Séance 7
G. Richomme
[email protected]
Université Paul Valéry Montpellier 3
Licence AES parcours Misahs
cours 2012-2013
1
[email protected]
Graphes - Séance 7
Complexité d'un parcours
2
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
3
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
Complexité en temps
Fonction qui exprime le temps d'exécution d'un algorithme par
rapport à la taille des données.
3
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
Complexité en temps
Fonction qui exprime le temps d'exécution d'un algorithme par
rapport à la taille des données.
Complexité en espace
Fonction qui exprime l'espace mémoire nécessaire pour l'exécution
d'un algorithme par rapport à la taille des données.
3
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
Complexité en temps
Fonction qui exprime le temps d'exécution d'un algorithme par
rapport à la taille des données.
Cette complexité en temps dépend potentiellement :
de l'implémentation (donc du programmeur)
3
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
Complexité en temps
Fonction qui exprime le temps d'exécution d'un algorithme par
rapport à la taille des données.
Cette complexité en temps dépend potentiellement :
de l'implémentation (donc du programmeur)
→ on supposera une implémentation au meilleur coût.
3
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
Complexité en temps
Fonction qui exprime le temps d'exécution d'un algorithme par
rapport à la taille des données.
Cette complexité en temps dépend potentiellement :
de l'implémentation (donc du programmeur)
→ on supposera une implémentation au meilleur coût.
de la structure des données :
3
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
Complexité en temps
Fonction qui exprime le temps d'exécution d'un algorithme par
rapport à la taille des données.
Cette complexité en temps dépend potentiellement :
de l'implémentation (donc du programmeur)
→ on supposera une implémentation au meilleur coût.
de la structure des données :
→ estimation dans le pire des cas.
3
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
Complexité en temps
Fonction qui exprime le temps d'exécution d'un algorithme par
rapport à la taille des données.
Cette complexité en temps dépend potentiellement :
de l'implémentation (donc du programmeur)
→ on supposera une implémentation au meilleur coût.
de la structure des données :
→ estimation dans le pire des cas.
de la machine :
3
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
Complexité en temps
Fonction qui exprime le temps d'exécution d'un algorithme par
rapport à la taille des données.
Cette complexité en temps dépend potentiellement :
de l'implémentation (donc du programmeur)
→ on supposera une implémentation au meilleur coût.
de la structure des données :
→ estimation dans le pire des cas.
de la machine :
→ on se donnera un modèle de machine (RAM)
3
[email protected]
Graphes - Séance 7
Complexité d'un algorithme ?
Complexité en temps
Fonction qui exprime le temps d'exécution d'un algorithme par
rapport à la taille des données.
Cette complexité en temps dépend potentiellement :
de l'implémentation (donc du programmeur)
→ on supposera une implémentation au meilleur coût.
de la structure des données :
→ estimation dans le pire des cas.
de la machine :
→ on se donnera un modèle de machine (RAM)
→ on essaiera juste de donner l'ordre de grandeur.
3
[email protected]
Graphes - Séance 7
Modèle de machine (RAM simplié et imprécis)
RAM = Random Access Machine
Fonctionnement séquentiel
Mémoire centrale partagée
Chaque instruction "élémentaire" de la machine coûte 1
accès à la mémoire aux variables (aectation ou lecture)
opération numérique de base (+, -, . . . )
...
Remarque : déterminer si une opération peut être considérée
comme élémentaire est souvent source de discussion.
Important : dans ce modèle, on peut supposer que les opérations
sur les piles et sur les les sont élémentaires
4
[email protected]
Graphes - Séance 7
Instructions élémentaires
Dire que Chaque instruction "élémentaire" de la machine coûte 1
est à comprendre par :
Le coût de chacune de ces instructions est inférieur à une
borne xe commune.
5
[email protected]
Graphes - Séance 7
Exemple
Algo :
for i in range(0, len( L ) ):
print( L[i] )
6
[email protected]
Graphes - Séance 7
Exemple
Algo :
for i in range(0, len( L ) ):
print( L[i] )
Posons n = len( L).
Nombre d'opérations bornées par C .n pour une constante C .
Le temps d'exécution est de l'ordre de n.
6
[email protected]
Graphes - Séance 7
Exemple
Algo :
for i in range(0, len( L ) ):
print( L[i] )
Posons n = len( L).
Nombre d'opérations bornées par C .n pour une constante C .
Le temps d'exécution est de l'ordre de n.
Type d'information apportée :
si n double, grosso-modo le temps d'exécution aussi.
6
[email protected]
Graphes - Séance 7
Exemple
Algo :
num = 0
for i in range(0, len( M ) ):
for j in range(0, M[i]):
if M[i][j] = 1:
num = num + 1
7
[email protected]
Graphes - Séance 7
Exemple
Algo :
num = 0
for i in range(0, len( M ) ):
for j in range(0, M[i]):
if M[i][j] = 1:
num = num + 1
Posons n = len(M) et m = max{ M[i] | i = 0, . . . , n − 1}.
Nombre d'opérations majoré par 1 + Cnm pour une constante C .
7
[email protected]
Graphes - Séance 7
Exemple
Algo :
num = 0
for i in range(0, len( M ) ):
for j in range(0, M[i]):
if M[i][j] = 1:
num = num + 1
Posons n = len(M) et m = max{ M[i] | i = 0, . . . , n − 1}.
Nombre d'opérations majoré par 1 + Cnm pour une constante C .
Nombre d'opérations majoré par C 0 nm pour une constante C 0 .
7
[email protected]
Graphes - Séance 7
Exemple
Algo :
num = 0
for i in range(0, len( M ) ):
for j in range(0, M[i]):
if M[i][j] = 1:
num = num + 1
Posons n = len(M) et m = max{ M[i] | i = 0, . . . , n − 1}.
Nombre d'opérations majoré par 1 + Cnm pour une constante C .
Nombre d'opérations majoré par C 0 nm pour une constante C 0 .
Le temps d'exécution est de l'ordre de nm.
7
[email protected]
Graphes - Séance 7
Exemple
Algo :
num = 0
for i in range(0, len( M ) ):
for j in range(0, M[i]):
if M[i][j] = 1:
num = num + 1
Posons n = len(M) et m = max{ M[i] | i = 0, . . . , n − 1}.
Nombre d'opérations majoré par 1 + Cnm pour une constante C .
Nombre d'opérations majoré par C 0 nm pour une constante C 0 .
Le temps d'exécution est de l'ordre de nm.
Quand n = m, le temps d'exécution est de l'ordre de n2 .
7
[email protected]
Graphes - Séance 7
Exemple
Algo :
num = 0
for i in range(0, len( M ) ):
for j in range(0, M[i]):
if M[i][j] = 1:
num = num + 1
Posons n = len(M) et m = max{ M[i] | i = 0, . . . , n − 1}.
Nombre d'opérations majoré par 1 + Cnm pour une constante C .
Nombre d'opérations majoré par C 0 nm pour une constante C 0 .
Le temps d'exécution est de l'ordre de nm.
Quand n = m, le temps d'exécution est de l'ordre de n2 .
Type d'information apportée :
si n double, grosso-modo le temps d'exécution est multiplié par 4.
7
[email protected]
Graphes - Séance 7
Ordre de grandeur
Majoration asymptotique
Soient f et g deux fonctions telles que :
il existe un entier N et une constante C > 0 tels que
pour tout n ≥ N, f (n) ≤ Cg (n).
On dit que f est majorée asymptotiquement par g .
On note f = O (g ).
8
[email protected]
Graphes - Séance 7
Ordre de grandeur
Majoration asymptotique
Soient f et g deux fonctions telles que :
il existe un entier N et une constante C > 0 tels que
pour tout n ≥ N, f (n) ≤ Cg (n).
On dit que f est majorée asymptotiquement par g .
On note f = O (g ).
Les opérations élémentaires ont une complexité en temps en
O (1).
8
[email protected]
Graphes - Séance 7
Ordre de grandeur
Majoration asymptotique
Soient f et g deux fonctions telles que :
il existe un entier N et une constante C > 0 tels que
pour tout n ≥ N, f (n) ≤ Cg (n).
On dit que f est majorée asymptotiquement par g .
On note f = O (g ).
Les opérations élémentaires ont une complexité en temps en
O (1).
Notre premier exemple a une complexité en temps en O (n).
8
[email protected]
Graphes - Séance 7
Ordre de grandeur
Majoration asymptotique
Soient f et g deux fonctions telles que :
il existe un entier N et une constante C > 0 tels que
pour tout n ≥ N, f (n) ≤ Cg (n).
On dit que f est majorée asymptotiquement par g .
On note f = O (g ).
Les opérations élémentaires ont une complexité en temps en
O (1).
Notre premier exemple a une complexité en temps en O (n).
Notre deuxième exemple a une complexité en temps en O (nm)
et O (n2 ) quand n = m.
8
[email protected]
Graphes - Séance 7
Quelques propriétés utiles
si f = O (g ) et g = O (h) alors f = O (h).
9
[email protected]
Graphes - Séance 7
Quelques propriétés utiles
si f = O (g ) et g = O (h) alors f = O (h).
si P (n) = ak nk + ak −1 nk −1 + . . . + ak , alors P = O (nk )
9
[email protected]
Graphes - Séance 7
Quelques propriétés utiles
si f = O (g ) et g = O (h) alors f = O (h).
si P (n) = ak nk + ak −1 nk −1 + . . . + ak , alors P = O (nk )
si f = O (h) et g = O (h) alors f + g = O (h)
9
[email protected]
Graphes - Séance 7
Complexité en temps de l'algorithme de parcours
O (n + m)
où n est le nombre de sommets et m est le nombre d'arcs !
10
[email protected]
Graphes - Séance 7
Complexité en temps de l'algorithme de parcours
O (n + m)
où n est le nombre de sommets et m est le nombre d'arcs !
fonction Graphe_Accessible( G, x )
ens_som_acc = { x } # ensemble des sommets accessibles
ens_arcs = vide # ensemble des arcs résultats
ens_arcs_a_voir = vide # ensemble des arcs à visiter
Pour chaque successeur y de x faire
ajouter (x, y) dans ens_arcs_a_voir
tant que ens_arcs_a_voir n'est pas vide faire
(i, f) = un arc retiré de ens_arcs_a_voir
si f n'est pas dans ens_som_acc alors
ajouter (i, f) dans ens_arcs
ajouter f dans ens_som_acc
Pour chaque successeur y de f faire
ajouter (f, y) dans ens_arcs_a_voir
retourner le graphe (ens_som_acc, ens_arcs)
[email protected]
Graphes - Séance 7
10
Degré d'un sommet
11
[email protected]
Graphes - Séance 7
Degrés
5 bS
aZ
Cd e
yb
yy
y
yy
yy
yy
a GG
wd
GG
ww
GG
w
w
GG
GG wwww
w
c
c
Le degré d'un sommet s d'un graphe non orienté est le nombre
d'arêtes incidentes. Notation d (s ).
12
[email protected]
Graphes - Séance 7
Degrés
5 bS
aZ
Cd e
yb
yy
y
yy
yy
yy
a GG
wd
GG
ww
GG
w
w
GG
GG wwww
w
c
c
Le degré d'un sommet s d'un graphe non orienté est le nombre
d'arêtes incidentes. Notation d (s ).
Le degré extérieur d'un sommet s d'un graphe orienté est le
nombre d'arcs sortant de s. Notation d + (s ).
Le degré intérieur d'un sommet s d'un graphe orienté est le
nombre d'arcs entrant de s. Notation d − (s ).
12
[email protected]
Graphes - Séance 7
Degrés
5 bS
aZ
Cd e
yb
yy
y
yy
yy
yy
a GG
wd
GG
ww
GG
w
w
GG
GG wwww
w
c
c
Le degré d'un sommet s d'un graphe non orienté est le nombre
d'arêtes incidentes. Notation d (s ).
Le degré extérieur d'un sommet s d'un graphe orienté est le
nombre d'arcs sortant de s. Notation d + (s ).
Le degré intérieur d'un sommet s d'un graphe orienté est le
nombre d'arcs entrant de s. Notation d − (s ).
Le degré d'un sommet s d'un graphe orienté est la somme
d + (s ) + d − (s ).
[email protected]
Graphes - Séance 7
12
Liens degrés - nombre d'arcs
Théorème
Dans n'importe quel graphe orienté les trois valeurs suivantes sont
égales :
la somme des degrés extérieurs ;
la somme des degrés intérieurs ;
le nombre d'arcs.
13
[email protected]
Graphes - Séance 7
Liens degrés - nombre d'arcs
Théorème
Dans n'importe quel graphe orienté les trois valeurs suivantes sont
égales :
la somme des degrés extérieurs ;
la somme des degrés intérieurs ;
le nombre d'arcs.
Conséquence :
dans un graphe orienté, la somme des degrés est égale au
double du nombre d'arcs du graphe.
13
[email protected]
Graphes - Séance 7
Liens degrés - nombre d'arcs
Théorème
Dans n'importe quel graphe orienté les trois valeurs suivantes sont
égales :
la somme des degrés extérieurs ;
la somme des degrés intérieurs ;
le nombre d'arcs.
Conséquence :
dans un graphe orienté, la somme des degrés est égale au
double du nombre d'arcs du graphe.
idem dans un graphe non orienté.
13
[email protected]
Graphes - Séance 7
Liens degrés - nombre d'arcs
Théorème
Dans n'importe quel graphe orienté les trois valeurs suivantes sont
égales :
la somme des degrés extérieurs ;
la somme des degrés intérieurs ;
le nombre d'arcs.
Conséquence :
dans un graphe orienté, la somme des degrés est égale au
double du nombre d'arcs du graphe.
idem dans un graphe non orienté.
Exercice : Dans un graphe non orienté,
montrer que le nombre de sommets de degré impair est pair.
13
[email protected]
Graphes - Séance 7
Exercice
Euler : les ponts de K÷nisberg
Source image = wikipedia commons (domaine public)
Prouver qu'il n'existe pas de chemin partant d'un point, passant
une fois et une seule par tous les ponts, et revenant au point de
départ ?
14
[email protected]
Graphes - Séance 7
Exercice
Euler : les ponts de K÷nisberg
Source image = wikipedia commons (domaine public)
Prouver qu'il n'existe pas de chemin partant d'un point, passant
une fois et une seule par tous les ponts, et revenant au point de
départ ?
Comment généraliser le raisonnement ?
[email protected]
Graphes - Séance 7
14
Graphe eulérien
Dénition
Un graphe non orienté est eulérien s'il existe un cycle qui passe une
fois et une seule par toutes les arêtes (un tel cycle sera appelé
eulérien).
15
[email protected]
Graphes - Séance 7
Graphe eulérien
Dénition
Un graphe non orienté est eulérien s'il existe un cycle qui passe une
fois et une seule par toutes les arêtes (un tel cycle sera appelé
eulérien).
Exemple d'application : élaboration d'une tournée de facteur.
15
[email protected]
Graphes - Séance 7
Graphe eulérien
Dénition
Un graphe non orienté est eulérien s'il existe un cycle qui passe une
fois et une seule par toutes les arêtes (un tel cycle sera appelé
eulérien).
Exemple d'application : élaboration d'une tournée de facteur.
Théorème d'Euler
Un graphe connexe d'au moins deux sommets est eulérien si et
seulement si tous les sommets sont de degrés pairs.
15
[email protected]
Graphes - Séance 7
Une preuve en 3 étapes
Si un graphe possède un cycle eulérien, alors tous les sommets
sont de degrés pairs.
16
[email protected]
Graphes - Séance 7
Une preuve en 3 étapes
Si un graphe possède un cycle eulérien, alors tous les sommets
sont de degrés pairs.
Si un graphe connexe d'au moins 2 sommets a tous ses
sommets de degrés pairs, alors il contient un cycle passant au
plus une fois par chaque arête.
16
[email protected]
Graphes - Séance 7
Une preuve en 3 étapes
Si un graphe possède un cycle eulérien, alors tous les sommets
sont de degrés pairs.
Si un graphe connexe d'au moins 2 sommets a tous ses
sommets de degrés pairs, alors il contient un cycle passant au
plus une fois par chaque arête.
Si un graphe connexe d'au moins 2 sommets a tous ses
sommets de degrés pairs, alors il contient un cycle eulérien.
16
[email protected]
Graphes - Séance 7
Éléments de preuve (2/5)
Si un graphe connexe d'au moins 2 sommets a tous ses sommets de
degrés pairs, alors il contient un cycle passant au plus une fois par
chaque arête.
Preuve constructive par algorithme glouton suivant qui cherche un
cycle (non nécessairement eulérien) dans le graphe
Choisir un sommet x0
Considérer un successeur y 6= x0
Marquer l'arête [x0 , y ]
x ←y
Tant que x 6= x0 faire
Considérer un successeur y de x avec [x , y ] non marqué
Marquer [x , y ]
x ←y
17
[email protected]
Graphes - Séance 7
Éléments de preuve (3/5)
Remarques le graphe obtenu en enlevant les arêtes marquées à la
n de l'algorithme précédent :
vérie encore : le degré de chaque sommet est pair ;
pas nécessairement connexe ;
chaque composante connexe a moins d'arêtes que le graphe
initial.
Il est donc possible pour chaque composante connexe d'appliquer
l'algorithme glouton précédent.
18
[email protected]
Graphes - Séance 7
Éléments de preuve (4/5)
Fusion de cycle
Considérons deux cycles passant par un sommet x,
l'un partant de x suivant un chemin c et
l'autre partant de x suivant un chemin c 0 ,
alors
il existe un cycle partant de x suivant le chemin c puis le chemin c 0 .
19
[email protected]
Graphes - Séance 7
Éléments de preuve (5/5)
Si un graphe connexe d'au moins 2 sommets a tous ses sommets de
degrés pairs, alors il contient un cycle eulérien.
Algorithme récursif :
Construire un cycle C dans G avec algo glouton précédent
Considérer le graphe G 0 des arêtes non marquées
Enlever de G 0 les sommets isolés
Pour chaque composante connexe G 0
construire un cycle eulérien C 0
fusionner C 0 à C et prendre pour C le résultat
20
[email protected]
Graphes - Séance 7
Exercices
Les graphes suivants sont-ils eulériens ? Si oui, proposer un
cycle eulérien. A terminer
oo a' OOO
w a& FF
w & F
ww & FFF
FF
ww &&
w
FF
w
&&
ww
&&
c
b* AA
&&
** AA
~~
~
&& ~~ ** AA ~
** AAA
~& ~ ** AAA ~~~ && ** ~~~AA && * ~~ AAA && ~
d
e
oo '' OOOO
OOO
ooo
'
o
o
OOO
''
oo
o
O
o
o
''
c
b* N@@NN
'
p
p p
''
** @@NNN
p
p

' pppp  ** @@ NNNNN ** @@@ NNN ppp'''pp  @@ f
**
' 
@@ 00 '' 
**
@@ 0 '
**
0 '
@
@@@00 ''
**
0
'
** @@@ 00 '
@@ 00 '' ** 
@@0 ' * 
@0' 
d
e
21
[email protected]
Graphes - Séance 7
Exercices
Les graphes suivants sont-ils eulériens ? Si oui, proposer un
cycle eulérien. A terminer
oo a' OOO
w a& FF
w & F
ww & FFF
FF
ww &&
w
FF
w
&&
ww
&&
c
b* AA
&&
** AA
~~
~
&& ~~ ** AA ~
** AAA
~& ~ ** AAA ~~~ && ** ~~~AA && * ~~ AAA && ~
d
e
oo '' OOOO
OOO
ooo
'
o
o
OOO
''
oo
o
O
o
o
''
c
b* N@@NN
'
p
p p
''
** @@NNN
p
p

' pppp  ** @@ NNNNN ** @@@ NNN ppp'''pp  @@ f
**
' 
@@ 00 '' 
**
@@ 0 '
**
0 '
@
@@@00 ''
**
0
'
** @@@ 00 '
@@ 00 '' ** 
@@0 ' * 
@0' 
e
d
A quelle condition un graphe complet est-il eulérien ? A faire
21
[email protected]
Graphes - Séance 7
Exercice
A faire Peut-on adapter la recherche d'un parcours eulérien à un
graphe orienté ? Si oui, comment ?
22
[email protected]
Graphes - Séance 7
Téléchargement