Vous êtes sur la page 1sur 92

CNAM – COURS RCP 105

Modélisation – Optimisation – Complexité – Algorithmes

Enseignant : Félix MORA-CAMINO

2016

1 – 92
SOMMAIRE

1. RAPPELS SUR LA THEORIE DES GRAPHES ................................................................... 6


1.1. Définitions d’un graphe ..............................................................................................6
Graphe orienté..............................................................................................................................6
Graphe non orienté (clique) ............................................................................................................7
Graphe simple ..............................................................................................................................7
p-Graphe .....................................................................................................................................7
Applications multivoques : prédécesseurs et successeurs ...................................................................8
Adjacence ....................................................................................................................................8
Degré d’un sommet .......................................................................................................................8
Cocycles.......................................................................................................................................9
Fermeture transitive associée à un sous-ensemble A de X ................................................................ 10
Base d’un graphe simple orienté ................................................................................................... 10
Anti-base d’un graphe simple orienté ............................................................................................. 11
Sous-ensembles absorbants d’un graphe........................................................................................ 11
Sous-ensembles stables dans un graphe ........................................................................................ 13
Fonction de Grundy ..................................................................................................................... 14
1.2. Représentations d’un graphe.....................................................................................15
1.2.1. Représentation matricielle...................................................................................................... 15
Matrice d’incidence sommets-sommets .......................................................................................... 15
Matrice d’incidence sommets-arcs ................................................................................................. 16
Comparaison des deux représentations matricielles ......................................................................... 16
1.2.2. Représentation vectorielle...................................................................................................... 17
1.3. Connexité d’un graphe simple orienté.........................................................................18
1.3.1. Définitions ........................................................................................................................... 18
Chaîne ....................................................................................................................................... 18
Cycle ......................................................................................................................................... 18
Chemin ...................................................................................................................................... 18
Circuit........................................................................................................................................ 18
Chaîne eulérienne ....................................................................................................................... 18
Chaîne hamiltonienne .................................................................................................................. 18
1.3.2. Composantes connexes ......................................................................................................... 19
Nombre de connexité d’un graphe ................................................................................................. 19
Isthme....................................................................................................................................... 19
Point d’articulation ...................................................................................................................... 19
Graphe fortement connexe ........................................................................................................... 19
1.3.3. Algorithme de Trémeaux ....................................................................................................... 20
Algorithme ................................................................................................................................. 20
Exemple..................................................................................................................................... 21
1.3.4. Algorithme de Tarjan ............................................................................................................ 24
1.4. Graphes simples particuliers .....................................................................................25
1.4.1. Graphes symétriques ............................................................................................................ 25
1.4.2. Graphes anti-symétriques ...................................................................................................... 25
1.4.3. Graphe complet .................................................................................................................... 25
1.4.4. Graphe transitif .................................................................................................................... 26
1.4.5. Graphe injectif ..................................................................................................................... 26

2 – 92
1.4.6. Graphe fonctionnel................................................................................................................ 26
1.4.7. Graphe bi-parti..................................................................................................................... 26
2. ARBRES ET ARBORESCENCES................................................................................. 27
2.1. Définitions..............................................................................................................27
2.1.1. Arbre .................................................................................................................................. 27
2.1.2. Arborescence ....................................................................................................................... 28
2.1.3. Forêt ................................................................................................................................... 28
2.1.4. Arbre maximal d’un graphe G connexe .................................................................................... 28
Algorithme de construction ........................................................................................................... 28
Résultat ..................................................................................................................................... 29
Exemple 1 .................................................................................................................................. 29
Exemple 2 .................................................................................................................................. 29
Arbre maximal de poids minimum ................................................................................................. 30
Arbre maximal de poids maximum ................................................................................................ 30
2.1.5. Fermeture transitive ............................................................................................................. 31
2.1.6. En résumé ........................................................................................................................... 31
2.2. Cycles et bases de cycles d’un graphe ........................................................................ 31
2.2.1. Pré-requis et définition .......................................................................................................... 31
2.2.2. Cycles indépendants ............................................................................................................. 32
Exemple 1 .................................................................................................................................. 32
Exemple 2 .................................................................................................................................. 32
2.2.3. Base de cycles d’un graphe simple orienté ............................................................................... 32
Exemple..................................................................................................................................... 33
Nombre cyclomatique .................................................................................................................. 33
2.2.4. Cocycles et bases de cocycles d’un graphe planaire................................................................... 34
Pré-requis et définitions ............................................................................................................... 34
Nombre cocyclomatique ............................................................................................................... 34
3. RECHERCHE DE CHEMINS DANS UN GRAPHE SIMPLE ORIENTE ....................................... 35
3.1. Définitions..............................................................................................................35
Exemple..................................................................................................................................... 35
Hypothèse de base ...................................................................................................................... 36
Exemples d’application................................................................................................................. 36
3.2. Algorithmes ............................................................................................................37
3.2.1. Moore-Dijkstra (cas 2)........................................................................................................... 37
Exemple..................................................................................................................................... 38
3.2.2. Berge (cas 2) ....................................................................................................................... 39
Exemple..................................................................................................................................... 40
3.2.3. Bellman (cas 2) .................................................................................................................... 40
3.2.4. Ford (cas 2) ......................................................................................................................... 41
3.2.5. Cas des graphes sans circuit (cas 2) ....................................................................................... 41
Exemple..................................................................................................................................... 41
Fonction rang ............................................................................................................................. 42
4. APPLICATION AUX PROBLEMES D’ORDONNANCEMENT ................................................. 43
4.1. Graphe potentiel – tâches.........................................................................................43
4.1.1. Marge totale ........................................................................................................................ 43
4.1.2. Marge libre .......................................................................................................................... 44
4.1.3. Marge certaine ..................................................................................................................... 44
4.1.4. Exemple applicatif................................................................................................................. 44
4.2. Graphe potentiel – évènements .................................................................................45
5. PROGRAMMATION LINEAIRE CONTINUE .................................................................. 46
5.1. Définition ...............................................................................................................46

3 – 92
5.2. Exemple.................................................................................................................47
5.3. Applications réelles ..................................................................................................47
5.4. Admissibilité ...........................................................................................................48
Solution admissible...................................................................................................................... 48
Domaine admissible..................................................................................................................... 48
Simplexe.................................................................................................................................... 49
Possibilités ................................................................................................................................. 49
5.5. Exercices ...............................................................................................................50
5.5.1. Premier exercice................................................................................................................... 50
5.5.2. Second exercice ................................................................................................................... 51
5.5.3. Troisième exercice ................................................................................................................ 52
Application numérique ................................................................................................................. 52
6. ALGORITHMES ET PERFORMANCES .......................................................................... 53
6.1. Problèmes combinatoires..........................................................................................53
Définition ................................................................................................................................... 53
Exemple..................................................................................................................................... 53
Questions................................................................................................................................... 53
Approche élémentaire .................................................................................................................. 54
Exemple 1 : les calculateurs ......................................................................................................... 54
Exemple 2 : le sac à dos .............................................................................................................. 55
6.2. Complexité d’un algorithme ...................................................................................... 55
6.2.1. Complexité en temps ............................................................................................................ 55
6.2.2. Complexité en mémoire......................................................................................................... 56
6.2.3. Critères d’évaluation de la complexité ..................................................................................... 56
Coût uniforme............................................................................................................................. 56
Coût logarithmique ...................................................................................................................... 56
Comparaison des coûts (exemple) ................................................................................................. 56
6.2.4. Complexité asymptotique ...................................................................................................... 58
6.2.5. Ordre .................................................................................................................................. 58
Exemple..................................................................................................................................... 58
Remarque .................................................................................................................................. 59
Exercice ..................................................................................................................................... 59
6.3. Efficacité d’un algorithme .........................................................................................60
6.3.1. Premier algorithme possible ................................................................................................... 60
6.3.2. Second algorithme possible.................................................................................................... 61
6.3.3. Troisième algorithme possible ................................................................................................ 61
Remarques ................................................................................................................................. 62
6.3.4. Exercice : calcul de an ........................................................................................................... 62
6.3.5. Exercice : problème des célébrités .......................................................................................... 63
6.3.6. exercice : calcul du nombre de hamsters au bout de n mois....................................................... 63
6.3.7. Exemple : les tours de Brahma............................................................................................... 65
7. CLASSES DE COMPLEXITE DE PROBLEMES ................................................................. 67
7.1. Première classification..............................................................................................67
7.2. Seconde classification (dite de complexité).................................................................. 67
7.2.1. Réductibilité d’un problème à un autre .................................................................................... 68
7.2.2. Équivalence ......................................................................................................................... 68
7.2.3. Classe de complexité NP-Complet ........................................................................................... 68
7.2.4. Problème de satisfaisabilité (SAT) ........................................................................................... 69
Exemple 1 .................................................................................................................................. 69
Exemple 2 .................................................................................................................................. 69
7.3. Exemples ...............................................................................................................70

4 – 92
7.3.1. Problèmes de classe P ........................................................................................................... 70
7.3.2. Problèmes NP-Complets......................................................................................................... 70
8. METHODES EXACTES D’OPTIMISATION COMBINATOIRE ............................................... 71
8.1. Backtracking...........................................................................................................71
Exercice ..................................................................................................................................... 72
8.2. Branch & Bound ......................................................................................................73
Exercice ..................................................................................................................................... 74
Exemple : coloration d’un graphe .................................................................................................. 76
Exemple : voyageur de commerce................................................................................................. 77
8.3. Programmation dynamique .......................................................................................80
Exemple : sac à dos .................................................................................................................... 80
Exercice ..................................................................................................................................... 83
9. METHODES HEURISTIQUES D’OPTIMISATION COMBINATOIRE ....................................... 85
9.1. Définition ...............................................................................................................85
Exemple : sac à dos .................................................................................................................... 85
9.2. Structures d’indépendance........................................................................................85
Exemple : algorithme de Kruskal................................................................................................... 85
9.2.1. Système d’indépendance ....................................................................................................... 86
Exemple 1 .................................................................................................................................. 86
Exemple 2 .................................................................................................................................. 86
9.2.2. Matroïde .............................................................................................................................. 86
Exemple..................................................................................................................................... 87
Algorithme général ...................................................................................................................... 87
9.3. schéma d’approximation...........................................................................................87
9.4. Problèmes types......................................................................................................87
9.4.1. Tâches indépendantes ........................................................................................................... 87
9.4.2. Bin Packing .......................................................................................................................... 90
9.4.3. Coloriage des sommets d’un graphe........................................................................................ 91
Méthode exacte : algorithme de Zikov ........................................................................................... 91
Heuristique inspirée de l’algorithme de Zikov .................................................................................. 92

5 – 92
1. RAPPELS SUR LA THEORIE DES GRAPHES

Nous considérons dès à présent un système, c’est à dire un ensemble d’éléments en interaction et organisé en
vue de réaliser une certaine fonction.

1.1. DEFINITIONS D’UN GRAPHE

Graphe orienté
Un graphe orienté G est tout couple X, U dans lequel :

X  x1, x2 , ..., xN : sommets


U  u1 , u2 , ..., uM  : arcs
avec :
N  card X  : nombre total de sommets
M  card U : nombre total d’arcs
tels que :
u  U,  i  X et j  X : u  i, j
u est l’arc orienté de i à j.

Représentation graphique :
Sommets : points
Arcs : flèches

Exemple : fonction Pilotage Automatique :


Consignes Pilote

Régulateur Actionneur Process

Chaînes de transmission Capteurs Visu

REMARQUE : le graphe est dit planaire si aucun arc ne coupe un autre arc.

6 – 92
Graphe non orienté (clique)
Dans ce cas, l’ordre des éléments dans les couples n’est plus pris en compte :
U  u1 , u2 , ..., uM  : arêtes

Représentation graphique :
Arêtes : segments (pas de flèches)

Graphe simple
Il s’agit de tout graphe sans boucle et ne contenant pas plus d’un arc entre deux sommets.

REMARQUE : si on a N sommets, combien de graphes simples orientés différents peut-on envisager ? Si on se


base sur la représentation matricielle sommets-sommets (N colonnes et N lignes) :
0 
 
 0   m 
    ij 
0
 
 0
avec :
i : ligne
j : colonne

Alors :
mij  1 s’il existe un arc dans G ;

mij  0 sinon.

2
Donc, le nombre total de cas envisageables vaut : 2N N

Exemple numérique :

N=10  Nombre total de cas : 210


2
10
 
 290  210
9
 10249  10 
39
 1027 !

On peut donc envisager un nombre fini de graphes simples orientés différents. Et ce nombre peut s’avérer
immense.

p-Graphe
C’est un graphe dans lequel il n’existe jamais plus de p arcs entre deux sommets. Donc, tout graphe est un p-
graphe.

1-graphe

2-graphe 1-graphe
(par association)

7 – 92
Applications multivoques : prédécesseurs et successeurs
i est prédécesseur de j dans G si u  U tel que u  i, j .

On définit alors la fonction  comme étant l’ensemble des prédécesseurs de i dans G  X,   :

 : i  X  i  X

j est successeur de i dans G si u  U tel que u  i, j .

On définit alors la fonction  1 comme étant l’ensemble des successeurs de i dans G  X,  1 :  


1
 :i X  i1 X

Il existe donc trois représentations possibles des graphes :


G  X, U
G  X, 


G  X,  1 
Exemple : G  X, U

X  1,2,3,4,5
U  1,2, 2,3, 2,4, 4,5

1 2 3

1  2 11  
2  3 21  1
4 5
 : 3    1
: 31  2
4  5 41  2
5   51  4

Adjacence
Deux sommets sont adjacents s’ils sont reliés par un arc :

Deux arcs sont adjacents s’ils ont une extrémité commune :

Degré d’un sommet

Le demi-degré extérieur constitue le nombre d’arcs d’origine i : di .

Le demi-degré intérieur constitue le nombre d’arcs d’extrémité i : di .

Le degré d’un sommet i est donc la somme des demi-degrés : di  di  di .

REMARQUE 1 : si le degré d’un sommet est nul, celui-ci est dit isolé.
REMARQUE 2 : le nombre d’arcs M   di   di .
iX iX

8 – 92
Exemple : G  X, U
X  1,2,3,4,5
U  1,2, 2,3, 2,4, 4,5
1 2 3

d1  0 d1  1
d2 1 d2  2
 
4 5
d : d3 1 d : d3  0
d4 1 d4  1
d5 1 d5  0

Cocycles
Considérons un sous-ensemble A de sommets de G : A  X . Alors :
A : ensemble des arcs d’origine dans A et de fin hors de A.

A : ensemble des arcs de fin dans A et d’origine hors de A.

D’où le cocycle associé à A :


A A  A

(le terme signifie « définit »)

Exemple : G  X, U
X  1,2,3,4,5
U  1,2, 2,3, 2,4, 3,4, 4,5

1 2 3 A  3,4

A A  4,5

A  2,3, 2,4


4 5

REMARQUE : l’arc 3,4 ne compte pas car à il


appartient au sous-ensemble A.

REMARQUE 1 : si on a N sommets et un ensemble des parties de X : P  X  alors on peut définir card PX   2N
cocycles.

Exemples numériques :

X  1,2,3  PX   0, 1, 2, 3, 1,2, 1,3, 2,3, 1,2,3  card PX   2N  23  8 cocycles

Si N  100  card PX   2N  2100  210   10


 10  3 10
 1030 !

REMARQUE 2 : les cocycles sont organisés en espaces vectoriels tant ils peuvent être nombreux. Et tout
ensemble vectoriel peut être ramené à sa base (résumé).

9 – 92
Fermeture transitive associée à un sous-ensemble A de X
Soit A  l’ensemble des successeurs de A :

A    i
i A

On peut donc définir le successeur des successeurs :


i2  i 

A2  A 

On en déduit donc la fermeture :


N1
 A    n A 
n 0

La fermeture signifie donc « tous les sommets que l’on peut atteindre en suivant les arcs ».

Exemples :
G  X, U
1 2 N

A  1   1  1,2,...,N  X  A0  A

G  X, U
A  3,4
1 2 3

 1  1,2,3,4,5  X

 2  2,3,4,5

 3  3,4,5
4 5
 4  4,5

 5  5

Base d’un graphe simple orienté


La base d’un graphe est l’ensemble de sommets sans prédécesseurs :
i  X et i  B si et seulement si i1  

Exemple :

1 2
G  X, U

Ici, il n’y a pas de base car tous les sommets


ont un prédécesseur.

REMARQUE 1 : si la base se réduit à un seul sommet, c’est une source.

10 – 92
Exemple :

1 2 3
G  X, U

Ici, 1 est la source.

4 5

REMARQUE 2 : on dit que la base d’un graphe est instable.

Anti-base d’un graphe simple orienté


La base d’un graphe est l’ensemble de sommets sans successeurs :
i  X et i  B si et seulement si i  

REMARQUE 1 : si l’anti-base se réduit à un unique élément, on dit que c’est un puits.


REMARQUE 2 : on dit que l’anti-base d’un graphe est stable.
REMARQUE 3 : un sommet isolé est à la fois base et anti-base : IG  BG  BG .

Exemple :

1 2 3 G  X, U

Ici, 1 est isolé.


Il est donc base et anti-base.
4 5

Sous-ensembles absorbants d’un graphe


A  X est absorbant dans G si et seulement si  i  X  A  , on a : i  A   .

Exemple :
G  X, U
A  3,4 est-il absorbant ?
1 2 3

1  2  2  3,4  


5      3,4  

4 5 On a au moins deux sommets pour lesquels la


propriété n’est pas respectée. A  3,4 n’est
donc pas absorbant.

11 – 92
Exemple :
G  X, U
A  2,4,5,6 est-il absorbant ?
1 2 3

1  2  2  2,4,5,6  


3  4  4  2,4,5,6  

On a deux sommets pour lesquels la propriété


est respectée. A  2,4,5,6 est absorbant.
4 5 6

REMARQUE 1 : si on prend tous les sommets dans A, ça marche !


REMARQUE 2 : il faut inclure tous les sommets isolés dans A sinon ça ne marche pas.

Le cardinal minimum d’un ensemble absorbant de G définit le nombre d’absorption de G : G .

G est difficile à trouver car il existe 2N sous-ensembles de G.

Exemples :

1 2 3

G  X, U

Ici, G  4
4 5 6

1 2 3
G  X, U

Ici, G  3
(on enlève le sommet 6)
4 5 6

12 – 92
Sous-ensembles stables dans un graphe
A  X est stable dans G si et seulement si : A  A   .
De manière générale, X n’est pas stable sauf si tous ses sommets sont isolés. Sinon, n’importe quel sommet de
A convient.

Exemple :
G  X, U

1 2 3 Ici, en partant de 6 vers 1, on construit le


sous-ensemble stable A dans G :
A  1,3,5,6

On ne met pas le sommets 4 car 5 est son


4 5 6
successeur. De même pour le sommet 2 à
cause de 3 et 4.

Le cardinal maximal d’un ensemble stable de G définit le nombre de stabilité de G : G .

Exemple :

G  X, U
1 2 3 A  1,3,5,6

A est stable : G  4

4 5 6 REMARQUE : ici, A est également absorbant.

Un sous-ensemble de sommets de G constitue un noyau s’il est à la fois stable et absorbant. Il est possible
qu’un graphe G ait plusieurs ou aucun noyau.

REMARQUE : le noyau ne correspond pas forcément à G ou G :

Exemple :

G  X, U
1 2

1 n’est pas un noyau car non absorbant.


1,2 n’est pas un noyau car instable.
1,2,3 n’est pas un noyau car non
absorbant et instable.
3

13 – 92
Fonction de Grundy
A tout sommet i, on fait correspondre le nombre entier g
i tel qu’il soit le plus petit entier naturel non présent
dans les successeurs de i :
g: X 

 0,1,2,3,...

G  X, U , A  1,3,5,6 ,  0,1,2,3,...

Méthode :
Exemple : 1. On part d’un sommet sans successeur. Par
exemple, du sommet 6 : on lui attribue
l’entier le plus faible, à savoir 0
(  0,1,2,3,... ).
1 2 3

2. Il est va de même pour le sommet 5 .

3. Pour le sommet 4 , l’entier le plus faible


4 5 6 non immédiatement utilisé est 1
(  
 0 ,1,2,3,... ).

 4. Pour le sommet 3 , on a 0. En effet,


l’entier le plus faible le plus proche est 1

1 2 3
(  
 0, 1,2,3,... ).

2 ,
0 2 0
5. Pour le sommet 0 et 1 sont utilisés :

on aura 2 ( 
 0 , 1,2,3,... ). 
4 5 6
6. Enfin, pour le sommet 1 , on aura 0
1 0 0 (  
 0, 1, 2 ,3,... ).

A aucun moment, il n’y a eu de difficulté à


trouver un entier naturel. Ce graphe est donc
une fonction de Grundy.

REMARQUE 1 : tout les graphes n’admettent pas de fonction de Grundy.

Contre-exemple :

1 1
1 2
G  X, U , A  3 ,  0,1,2,3,...

Ici, le graphe n’est pas une fonction de


Grundy car l’entier 1 est utilisé pour deux
sommets cotes à cotes.
3 4
0 2

REMARQUE 2 : la fonction de Grundy permet de construire un noyau quand g i  0 .

REMARQUE 3 : tout graphe admettant une fonction de Grundy admet un noyau (et ce peut importe sa taille).
L’inverse n’est pas vrai : tout graphe admettant un noyau n’admet pas forcément de fonction de Grundy.

14 – 92
Exemples :

1 2 3
0 1 0 G  X, U , A  1,3,6 ,  0,1,2,3,...

A est absorbant et stable : il s’agit donc d’un


noyau. Il admet une fonction de Grundy.
4 5 6
1 1 0

1 2 3
1 0 2 G  X, U , A  2, 4,6 ,  0,1,2,3,...

A est absorbant et stable : il s’agit donc d’un


noyau. Il admet une fonction de Grundy.
4 5 6

0 1 0

1.2. REPRESENTATIONS D’UN GRAPHE


Il existe diverses façons de représenter un graphe :
 par une énumération des sommets et des arcs ;
 par un graphique (via de la reconnaissance d’images) ;
 par une fonction multivoque ;
 par une matrice ;
 par un vecteur.

1.2.1. REPRESENTATION MATRICIELLE

Matrice d’incidence sommets-sommets


On a N colonnes et N lignes :
0 
 
0
ss     a 
  ij 
0
 
 0
avec :
i  1 à N : ligne

j  1 à M : colonne

Alors :
aij  1 s’il existe un arc i, j dans G ;

aij  0 sinon.

nombre de cases non nulles


On définit la densité d’une matrice ainsi : densité  d
nombre total de cases

15 – 92
Pour la matrice ss, cela revient à :
M M
densité : dss  
N  N N2

Du fait qu’elle soit binaire, le principal avantage de cette représentation est une visualisation rapide de la
présence ou non d’un arc.
Malheureusement, sa faible densité entraîne une forte présence de zéro. On parle de matrice creuse (le terme
anglophone est sparse).

Cette représentation n’est donc pas facilement adaptable vers un algorithme.

Matrice d’incidence sommets-arcs


On a M colonnes et N lignes :
    
   
sa        aij 
    
 
avec :
i  1 à N : ligne
j  1 à M : colonne

Alors  i  X et u  U , si u  i, j :

aiu  1

aiu  aju  0

aju  1

Exemple :

G  X, U

1 2 3

1 1 0 0 0 1
 
 1 0 1 0 0 0 
   0 1 1 1 1 0 
 
 0 0 0 1 0 1
 0 0 0 0 1 0 
4 5  

Le principal avantage de cette représentation est qu’elle permet de connaître le sens de l’arc.
Toutefois, cette représentation n’est pas non plus facilement adaptable vers un algorithme du fait de sa faible
densité :
2M 2
densité : dsa  
NM N

Comparaison des deux représentations matricielles


Si on les compare, on s’aperçoit que dss  dsa si :

M 2
2
  M  2N
N N
De manière générale, aucune des deux représentions matricielles n’est efficace d’un point de vue
algorithmique.

16 – 92
Leur factorisation se fait par obtention du déterminant de la matrice :
a b
 ad b c
c d

a b e
c d f  a   d  i  f  h   c  b  i  e  h   g   b  f  d  e 
g h i

etc.

1.2.2. REPRESENTATION VECTORIELLE


Soient les vecteurs :
  G de dimension N+1.

  G de dimension M.

La liste des successeurs du sommet i est dans   G à partir de la position  i .

Méthode d’après l’exemple précédent :


i 1 2 3 4 5 6
 i 1
1. On part du sommet 1 :  i  1 pour i  1 .
 i  2. On se reporte à la première colonne (dernière
ligne) pour remplir les successeurs du sommet
 1 2 3 4 5 6
1 :  i
i 1 2 3 4 5 6 3. Puis part de la colonne immédiatement libre
 i 1
(ici, la quatrième) et on reporte son chiffre
dans  i .
 i  2 3 4
 1 2 3 4 5 6 4. On place alors le successeur du sommet 4
dans la colonne qui est libre pour  i (ici, la
i 1 2 3 4 5 6 quatrième).
 i 1 5. Et ainsi de suite.
 i  2 3 4 6. Lorsque le dernier sommet est atteint, on
 1 2 3 4 5 6 remplit les  i avec M+1.

i 1 2 3 4 5 6
i 1 2 3 4 5 6
 i 1 4  i 1 4 5
 i  2 3 4  i  2 3 4 3 4
 1 2 3 4 5 6
 1 2 3 4 5 6

i 1 2 3 4 5 6
i 1 2 3 4 5 6
 i 1 4  i 1 4 5 M+1 M+1 M+1
 i  2 3 4 3  i  2 3 4 3 4 5
 1 2 3 4 5 6
 1 2 3 4 5 6

L’avantage majeur de cette représentation est sa forte densité (ce qui est plus pour la machine).
Malheureusement, cela devient illisible pour l’homme.
i1
di   i  1   i   i   d1k  1
k 1

17 – 92
1.3. CONNEXITE D’UN GRAPHE SIMPLE ORIENTE

1.3.1. DEFINITIONS

Chaîne
Une chaîne de longueur q est une séquence d’arcs telle que les arcs sont adjacents deux à deux (extrémité
commune) :

u1, u2, u3, ..., up , up1, ..., uq

Exemple :

1 G  X, U
a

Chaîne :
2 8 10
ue , uf , uh
b c
i j

3 Cycle 4 9 Cycle élémentaire :


d e f uc , ue , ud, ub 
g
5 6
Cycle composé :
h
uc , ue , ud, ub , uc , ue , ug, uf 
7

Cycle
C’est une chaîne dont les extrémités coïncident. Elle commence et finit au même sommet.
Un cycle élémentaire est un cycle qui ne contient aucun autre cycle : il ne passe donc pas deux fois par le
même sommet.
REMARQUE : les cycles élémentaires ne sont pas linéairement indépendants.

Chemin
C’est une chaîne dont tous les arcs sont orientés dans le même sens.

Circuit
C’est un chemin qui commence et finit au même sommet : ce chemin est également un cycle.
Tout comme pour le cycle, un chemin élémentaire est un chemin qui ne contient aucun autre chemin.

Chaîne eulérienne
C’est une chaîne qui ne passe qu’une seule fois par chaque arc.

Chaîne hamiltonienne
C’est une chaîne qui ne passe qu’une seule fois par chaque sommet.

18 – 92
1.3.2. COMPOSANTES CONNEXES
Un graphe est connexe si tout couple de sommets i, j  X peut être relié par au moins une chaîne.

Relation d’équivalence sur X :


Propriété : iRj si il existe une chaîne entre i et j.
Réflexivité :  i  X : iRi (chaîne vide : zéro arcs).
Symétrie :  i et j  X : iRj  jRi .

Transitivité :  i, j, k  X : iRj et iRk  iRk .


 classes d’équivalence (= composantes connexes).

Ainsi, si le graphe est non connexe, il est composé de sous-graphes partiels connexes ; on parle de
composantes connexes.

Par exemple : dans l’exemple précédent, le graphe est composé de deux sous-graphes : il n’est donc pas
connexe.

Nombre de connexité d’un graphe


C’est le nombre de composantes connexes p.

Isthme
C’est un arc tel que sa suppression augmente le nombre de connexité p d’un graphe.
La présence d’isthmes est généralement liée à des problèmes de fiabilité (exemple : les by-pass).

Par exemple, dans l’exemple précédent, le graphe est composé de deux sous-graphes : un isthme les sépare.

Point d’articulation
C’est un sommet tel que sa suppression augmente le nombre de connexité p d’un graphe.
Tout comme les isthmes, les points d’articulation sont liés à des problèmes de fiabilité. L’algorithme de
Trémeaux et celui de Tarjan (plus performant, il se base sur celui de Trémeaux) permettent de vérifier leur
présence ou non dans un graphe.

Graphe fortement connexe


Un graphe est dit fortement connexe si quelque soient les sommets i et j, il existe un chemin reliant ces deux
sommets.

Exemple :

1 2 1 2

3 4 5 3 4 5

Graphe simplement connexe Graphe fortement connexe

19 – 92
1.3.3. ALGORITHME DE TREMEAUX
Cet algorithme permet de vérifier la connexité p d’un graphe. Pour cela, il recherche d’abord « en profondeur »
puis il revient par chaque bifurcation (« largeur »).
Il est possible de commencer à partir de n’importe quel sommet.

Notations :
num i : numéro du sommet i dans l’exploration (par exemple, pour le premier sommet l : num l  1 ).

P i : prédécesseur du sommet i dans l’arborescence (en théorie, le graphe est initialement vide).

di : nombre de successeurs du sommet i ( di  i ) ( di est un compteur).

i k  : kième successeur du sommet i (pour k  1 à di ).

n i : indice du dernier sommet exploré à partir du sommet i (le graphe étant vide, l’indice est donc nul au
départ).

Algorithme
Initialisation :
P i   0 i  1 à N
di  di i  1 à N 
n i   0 i  1 à N 
k 1 l  1
num l  1

P l   l i  l 

Itération :


Tant que n i  di ou 
i  l , répéter :

Si n i  di

Alors :
i  P i 

Sinon :
n i   n i   1

 
j  i n i

Si P  j  0

Alors :
P  j  i

i j

k  k 1
num i  k

Conclusion :
Si k  N : le graphe est connexe.

20 – 92
Exemple

Méthode :
1 4 5
1. Initialement, on considère que le graphe est
vide :
P i   0 i  1 à 5 
di  i
2 3  d1  1, d2  2, d3  2, d4  4, et d5  1
n i   0
1  4 , 2  3, 4 , 3  2, 4
avec : Les di ont été déduits des i initiaux.
et  4  1,2,3,5 , 5  4

2. Le premier sommet rencontré est le sommet


1 :
1
k  1, l  1, num 1  1
P 1  1, i  1, n 1  1

3. On procède à la première itération : i  1


n 1  0 et d1  1 01

Remarque : la première condition est


remplie, il n’est donc pas nécessaire de
continuer le reste du test de base.
n 1  n 1  1  0  1  n 1  1
1 4

j  1 n 1  1  4 
P  j  P  4   0 (valeur par défaut)
 P  j  i  P  4  1
i j i4
 k  k 1  k  2
 num i  k  num  4   2

4. Le sommet suivant désigné est le sommet 4 .


Le test se fera donc avec i  4 .
Test : n  4   0 et d4  4 04
n  4  n  4  1  0  1  n  4  1


j  4 n  4   1  1 
1
a
4
P  j  P 1  1

Le sommet 1 a déjà été exploré :


b
Test : n  4   1 et d4  4 1 4
n  4  n  4  1  1  1  n  4  2
2

j  4 n  4   2  2 
P  j  P  2   2 (sommet suivant)
 P  j  i  P 2   1
i j i2
 k  k 1  k  3
 num i  k  num 2   3

21 – 92
5. Test avec i  2 :
Test : n 2   0 et d2  2 02

1 4
n 2   n  2   1  0  1  n 2   1


j  2 n 2   1  3 
P  j  P  3   0 (valeur par défaut)
 P  j  i  P 3   1
2 3 i j i3
 k  k 1  k  4
 num i  k  num 3  4

6. Test avec i  3 :
Test : n 3  0 et d3  2 02
n 3   n  3   1  0  1  n 3  1


j  3 n 3  1  2 
P  j  P  2   1

1 4 Le sommet 2 a déjà été exploré.

Test : n 3  1 et d3  2 12


b
n 3   n  3   1  1  1  n 3  2

2
a
3

j  3 n 3  2  4 
P  j  P  4   1

Le sommet 4 a déjà été exploré.

Test : n 3  2 et d3  2 22


ou test : i  3  1
 i  P 3   2

7. Test avec i  2 :
Test : n 2   1 et d2  2 12
n 2   n  2   1  1  1  n 2   2

1 4

j  2 n 2   2  4 
P  j  P  4   1

Le sommet 4 a déjà été exploré.

Test : n 2   2 et d2  2 22
2 3
ou test : i  2  1
i  P 2   4

Il n’y a pas d’autre successeur : on revient au


sommet 4 .

8. Test pour i  4 :
Test : n  4   2 et d4  4
b
1 4 5 24
n  4  n  4  1  2  1  n  4  3
a

j  4 n  4   3  3 
P  j  P  4   3
2 3
Le sommet 3 a déjà été exploré.

22 – 92
Test : n  4   3 et d4  4 34
n  4  n  4  1  3  1  n  4  4


j  4 n  4   4  5
P  j  P  5   0 (valeur par défaut)
 P  j  i  P 5   4
i j i5
 k  k 1  k  5
 num i  k  num 5  5

9. Test pour i  5 :
Test : n 5  0 et d5  1 01
n 5   n  5   1  0  1  n 5   1

1 4 5

j  5 n 5  1  4 
P  j  P  4   1

Le sommet 4 a déjà été exploré.

Test : n 5  1 et d5  1 11


2 3
ou test : i  5  1
i  P 5   4

Il n’y a pas de successeur ; on revient au


sommet 4 .

10. Test pour i  4 :


1 4 5
Test : n  4   4 et d4  4 44
ou test : i  4  1
i  P 4  1

Il n’y a pas de successeur ; on revient au


sommet 1 .
2 3

11. Test pour i  1 :


Test : n 1  1 et d1  1 11
1 4 5
ou test : i  1  1
i  P 1  1

Il n’y a pas de successeur car le sommet 1


est la racine du graphe.
2 3
Conclusion : k  5  N .
Le graphe est donc connexe.


REMARQUE : le nombre de boucles dans le graphe que l’on peut faire au maximum est inférieur à 2  N  dmax
avec :

dmax  max imum di  (i  X)

Ainsi :

 par rapport à N ( X  1 à N ) : dmax N ( 2  N2 )

 par rapport à M ( U  1 à M ) : dmax  k1  M  k2 (relation linéaire !)

Nota : k1 et k2 sont des constantes indépendantes de N et M.

23 – 92
1.3.4. ALGORITHME DE TARJAN
Cet algorithme sert à la recherche des points d’articulation d’un graphe connexe G à partir d’un sommet
quelconque i.
Pour ce faire, on utilise l’algorithme de Trémeaux avec adjonction pour chaque sommet d’une condition
d’articulation.

Pour  i  X , on a :

 D i : ensemble des descendants de i dans l’arborescence de Trémeaux appliquée au graphe G. A


chaque sommet j de D i , on associe le nombre l  j  min num k  avec k   j . 
 l  j : plus petit numéro des sommets adjacents à j dans le graphe G. On a donc l’indice

 
inf i  min l  j avec j  D i .

 inf i : plus petit des numéros des sommets pouvant être atteints avec une seule arête à partir des
descendants de i dans l’arborescence.

Remarque 1 : on a toujours inf i  num i puisqu’à partir du successeur de i, on peut remonter au sommet i.

Remarque 2 : si inf i  num i , le sommet i est un point d’articulation dans le graphe.

Algorithme de Tarjan :
Initialisation :
Arbre vide à l’origine : P i  0  i  1 à N
Compteur : di  di i  1 à N 
Indice nul à l’origine (arbre vide) : n i  0 i  1 à N
inf i   i  1 à N 
k 1 l  1
num l  1  P l  l i  l 

Itération :


Tant que n i  di ou 
i  l , répéter :

Si n i  di

Alors :
q  inf i

i  P i 

inf i  q

Si inf i  num i , i est un point d’articulation

Sinon :
n  i   n i   1

 
j  i n i

Si P  j  0

Alors :


inf i  min inf i ,num i 
P  j  i

i j

24 – 92
k  k 1
num i  k

Sinon :
r  P  j

 
inf i  min inf i ,num i

Les algorithmes de Trémeaux et de Tarjan sont compliqués mais pas complexes.

1.4. GRAPHES SIMPLES PARTICULIERS

1.4.1. GRAPHES SYMETRIQUES

i j
Deux graphes sont symétriques si et seulement
si : i, j  U   j,i  U

1.4.2. GRAPHES ANTI-SYMETRIQUES

Deux graphes sont anti-symétriques si et


i j
seulement si : i, j  U   j,i  U

Nota : le graphe présenté en exemple est


également injectif, fonctionnel, et bi-parti.

1.4.3. GRAPHE COMPLET

i j
Un graphe est dit « complet » si et seulement si :
i, j  U   j,i  U

25 – 92
1.4.4. GRAPHE TRANSITIF

i j k
Un graphe est dit « transitif » si et seulement si :
i, j  U et  j,k   U  i,k   U

1.4.5. GRAPHE INJECTIF

i j
Un graphe est dit « injectif » si et seulement si :
iX: di  1

1.4.6. GRAPHE FONCTIONNEL

i j
Un graphe est dit « fonctionnel » si et seulement
si :  i  X : di  1

1.4.7. GRAPHE BI-PARTI


Si X peut être partagé en X1 et X2 tel que X  X1  X2 et X1  X2   , alors :

si i  X1  j  X2
 i, j  X : 
si i  X2  j  X1

2 1
1 2 4

3 4
3

X1 X2

Remarque : tester si un graphe est bi-parti ou non est très long car on a N sommets :
C1N  CN
2 N
   CN  2N

26 – 92
2. ARBRES ET ARBORESCENCES

2.1. DEFINITIONS

2.1.1. ARBRE
C’est un graphe connexe sans cycle.

Définitions équivalentes :
 Graphe connexe admettant N-1 arcs.
 Graphe simple sans cycle admettant N-1 arcs.
 Graphe simple sans cycle qui, par l’ajout d’un arc, introduit un cycle unique.
 Graphe connexe qui, par le retrait d’un arc, n’est plus connexe.
 Tout couple de sommets relié par une chaîne unique.

Exemple :

3 2

2 4 4

1 5 6

6 7 7

Nota : tout arbre est bi-parti (propriété non-caractéristique).

27 – 92
2.1.2. ARBORESCENCE
C’est un ensemble de sommets dits « racines » tels qu’il existe un chemin entre ceux-ci et tous les autres
sommets du graphe.

2 4

3 5

6 7

2.1.3. FORET
C’est un graphe dont chaque composante connexe est un arbre (arborescence).

2.1.4. ARBRE MAXIMAL D’UN GRAPHE G CONNEXE


C’est un sous-graphe de G comprenant tous les sommets de G et étant un arbre.

Exemple :

u1

u6 u7 u8 u2

u12 u9

u5 u11 u10 u3

u4

Algorithme de construction
G  X,U
U  u1, ,un 

Algorithme :
1. Prendre a1  u1 i  1 .
2. Chercher uj qui ne forme pas de cycle avec a1, a2 , , ai1 .

3. S’il n’y en a pas, a1,a2 , ,ai1 sont les arcs d’un arbre maximal.

28 – 92
D’après l’exemple précédent :
u1

u1,u2 

u1,u2 ,u3 

u1,u2 ,u3 ,u4 

u1,u2 ,u3 ,u4 ,u5 

u1,u2 ,u3 ,u4 ,u5 ,u7 

Résultat
Le nombre d’arbres maximaux d’un graphe est égal au mineur de n’importe quel élément de la diagonale
principale d’une matrice D.
Soit i l’énième ligne et j l’énième colonne, alors :
D  dij 

dii  d i : degré du sommet i

Si i, j  U  dij  1

Si i, j  U  dij  0

Exemple 1

1 1 0 0
 
0 3 0 1
4 2 D
0 1 2 0
 
 0 0 1 2 
3

Le mineur associé à 1 (en haut à gauche) est le déterminant de la sous-matrice :


2 0 0 1 0 1
3   1  0  3  4  1  0  11
1 2 1 2 2 0
Avec cet arbre, il est possible de fabriquer 11 arbres maximaux.

Exemple 2

Pour un graphe complet G, il est possible de fabriquer NN2 arbres maximaux :

29 – 92
a(N)

Si N=10, on a 108 possibilités.

Pour N=20, on monte à 1023 !

N
0

Arbre maximal de poids minimum


Fonction poids : u  U  wu 

Arbre  X, A   P  arbre    wu
uA

Trouver l’arbre maximal de poids minimum est complexe et long. Il existe une solution rapide : l’algorithme
de Kruskal :
1. On ordonne les arcs du graphe par poids croissant : T u1  u1, ,un
2. On considère uk . Si uk forme un cycle avec T, on rejète uk . Sinon : T  T  uk 

3. On recommence avec k  k  1 tant qu’il reste des arcs à considérer.


Exemple :
u1
1 2
w1=5
Arbre maximal possible :
w2  w3  w4  w5  w6  ?
u7 u2 u3 u10
 1  1  3  4  3  12 w7=2 w2=1 w3=1 w10=2

Un autre : u6 u4
4 3 6
u2 ,u3,u7 ,u10 ,u6 ,u4 ,u3,u5,u1,u8  w6=3 w4=3

 1  1  2  2  3  3  3  4  5  5  29
u5
w5=4
u8 u9
Encore un autre : w8=5 w9=3

u2 ,u3,u7 ,u10 ,u9 


5
 112 2 3  9

Attention : il ne faut pas faire de cycle !

Variante de l’algorithme :
1. U  u1, ,un  non-ordonné par poids : T  u1 k 2

2. On considère uk . Si uk forme un cycle avec T, on enlève de ce cycle l’arc ui qui a le poids maximum.

3. k  k  1 , puis on continue.

Nota : il faudra quand même comparer les poids à la fin. La meilleure méthode à adopter dépendra donc de
l’allure du graphe considéré.

Arbre maximal de poids maximum


C’est le raisonnement inverse.

30 – 92
2.1.5. FERMETURE TRANSITIVE
La fermeture transitive ou la représentation matricielle permettent de déterminer l’existence ou non d’un cycle
dans le graphe.

Par exemple :
Arrêt : cycle !

1 2
1 2 3 2

4 3
4 4

2.1.6. EN RESUME
Racine

Cycle

Graphe Arbre Arbre Arborescence

2.2. CYCLES ET BASES DE CYCLES D’UN GRAPHE

2.2.1. PRE-REQUIS ET DEFINITION


Le graphe G doit être planaire :

E E
Coupure : le graphe est non planaire !

M1 M2 M3 e M1 M2 M3 e

G G

31 – 92
Le sens de référence est le sens des aiguilles d’une montre :

Considérons un cycle : à chaque arc de ce cycle, on


a un nombre :
u1 u2
u  1 : l’arc u est parcouru en sens direct.

u3 u  1 : l’arc u est parcouru en sens contraire.

u  0 : l’arc u n’appartient pas à ce cycle.


u4

Exemple :

u6 u5
U  u1,u2 ,u3 ,u4 ,u5 ,u6 ,u7 ,u8 

C1   0, 1,1, 1,0,0,0,0 
u8 
C2   0,0,0,0,0, 1,1, 1
u7
L’arc u3 est orienté dans le sens direct.

L’arc u4 est orienté dans le sens contraire.

2.2.2. CYCLES INDEPENDANTS


n
  i  Ci   0
   
Deux cycles C1 et C2 sont indépendants si écrire implique i  0 i  1 à n  .
i1

Exemple 1

   
 
1  C1  2  C2   0, 1, 1, 1,0, 2 , 2 , 2    0,0,0,0,0,0,0,0   indépendance

Exemple 2

U  u1,u2 ,u3 ,u4 ,u5 ,u6 ,u7 ,u8 



C1   0, 1,1, 1,0,0,0,0 

C2   0,0,0,1,1,0,0,1

u1 u2 C3   0, 1,1,0,1,0,0,1

C1 u3
Ici, on a :
  
u6 u8 u4 C3  C1  C2
C2
C3
   
 C1  C2  C3  0
   
u7 u5  1  C1  1  C2   1  C3  0
   
1  0 2  0 3  0

Ces cycles sont dépendants.

2.2.3. BASE DE CYCLES D’UN GRAPHE SIMPLE ORIENTE


Il s’agit d’un ensemble de cycles indépendants tels que tout cycle du graphe puisse s’écrire sous la forme :
n
  i  CBi    est la base.
   
C où CB1, ,CBn
i1

On appelle donc base de cycle le plus grand ensemble de cycles linéairement dépendants.

32 – 92
Exemple

U  u1,u2 ,u3 ,u4 ,u5 ,u6 ,u7 ,u8 



C1   0, 1,1, 1,0,0,0,0 

C2   0,0,0,1,1,0,0,1
u1 u2 
C3   0, 1,1,0,1,0,0,1

C1 u3

 
    
B  C1,C2 avec : C1,C2 ,C3
u6 u8 u4
C2   
C3 C  1  C  0  C
 1 
1

2

u7 u5  C2  0  C1  1  C2
  
C3  1  C1  1  C2

Nombre cyclomatique
C’est la dimension de la base d’un graphe :
G  M  N  p   M  N  1
où :
 M : arcs
 N : sommets
 P : composantes connexes

Dans l’exemple précédent :


M  8, N  7, p  1
 G  M  N  p  8  7  1  2

  
 
B  C1,C2

Remarque : cette formule est dérivée de la notion d’arbre :


p p p

 Mi  Ni  1   Mi    Ni   p  M  N  p


i1 i1 i1

Exemple :

arbre
maximal !

Tout ajout d’arc crée un cycle, donc crée


une base supplémentaire !

33 – 92
Autre exemple :

u4

u3 u6
A B C2 C D

C4 Dans l’arbre maximal ci-contre,


u5
u8 tout cycle doit être considéré
u1 C1 u2 u7
comme une combinaison linéaire
C3
des cinq autres.

F u10 E

C5

u9

2.2.4. COCYCLES ET BASES DE COCYCLES D’UN GRAPHE PLANAIRE

Pré-requis et définitions
Soit le graphe G  X,U . On a :

AX
 A  A

Il n’y a pas de sens de référence.

Soit le vecteur  1, , n  :

Si i    A  en rentrant, alors : i  1

Si i    A  en sortant, alors : i  1

Si i    A  , alors : i  0

n
  i  Coi   0
  
Donc pour i  1 à n : Coi sont indépendants si  i  0i  1 à n .
i1

Nombre cocyclomatique
C’est la dimension de la base d’un cocycle
G  N  p

avec : G  G  M

Nota : les vecteurs associés aux cycles et aux cocycles sont orthogonaux (produit scalaire) :

C   1, , n 

Co   1, , n 
  M 
 C  Co    i  i   0
i1

Les deux bases étant complémentaires, elles ne sont donc pas suffisantes en elle-mêmes pour définir un
graphe.

34 – 92
3. RECHERCHE DE CHEMINS DANS UN
GRAPHE SIMPLE ORIENTE

3.1. DEFINITIONS
Soit un graphe G  X,U , on a la longueur de l’arc u :


 u U: l u   

Cette longueur peut être définie de plusieurs façons :

l u    , , 0,1 , 
, , , 0,1 , v1, , vR  ,
La nature de l u dépend du graphe dans lequel elle est considérée. Ainsi, pour chaque arc, on pourrait associer
plusieurs longueurs. Par exemple :
 
u   l1 u ,l2 u , l3 u 
  
 tarif durée risque 

De manière générale, la longueur d’un chemin w1, , wk  :


k
l  ch   l  wi 
i1
k
L  ch   l  wi 
i1

Exemple

P23 P34 P45


2 3 4 5
courbe
logarithmique

P12 P37 P56

P71 P76 0 1
1 7 6

P78

8
  Pij  1

Soit Pij la probabilité que étant en i, on passe en j.

Selon la théorie des probabilités :


P16  P12  P23  P34  P45  P56
 log P16   log P12   log P23   log P34   log P45   log P56 

35 – 92
ou encore :
P16  P12  P23  P37  P76
 log P16   log P12   log P23   log P37   log P76 

Dans ce cas, le chemin le plus probable est celui de longueur minimale. Ce dernier critère est variable et
dépend du contexte (le chemin le plus probable aurait pu être celui de longueur maximale).
De manière générale, on ne s’intéressera ici qu’aux chemins de longueur minimale, la conversion vers les
chemins de longueur maximale étant facile.

log

Dans notre cas : l u  

 
0 1
Hypothèse : l i, j   log Pij

-log

Hypothèse de base
Dans le cas où l’on recherche des chemins de longueur minimale, il n’existe pas de circuit de longueur négative
dans le graphe.

Par exemple :

Pour le chemin de 1 à 4 :
10 5 10

1,2 , 2,3 , 3, 4  25


1 2 3 4
l 1, 4   l

-10 10

Mais attention aux cycles :

6
-20
5
l 1, 4   l 1,2 , 2,3 , 3,5 , 5,6 , 6,2 , 2,3 , 3, 4
 10  3  10  20  10  5  10  8

De manière générale, il faut considérer des chemins de longueur extrémale (minimale ou maximale). Les
différents algorithmes de recherche de chemins extrémaux se différencient de deux façons :
 Par le domaine de longueur des arcs.
 Par la nature du problème.

Exemples d’application
Cas 1 : on a un sommet origine et un sommet
destination. On cherche le chemin extrémal
entre ces deux sommets.
Pour ces problèmes, on cherche généralement
à se ramener au cas 2.
Cas 2 : on a un sommet origine. On recherche
le chemin extrémal entre ce sommet et tous les
autres sommets du graphe.  Algorithme
arborescent.
Il est possible de résoudre ce cas avec
l’algorithme du cas 3.

36 – 92
Cas 3 : on recherche l’ensemble des chemins
extrémaux entre toutes les paires de sommets
du graphe.  Algorithme matriciel.
Les algorithmes utilisés dans ce cas sont très
performants.
Cas 4 : on recherche les k meilleurs chemins entre un sommet origine et un sommet destination. Ce
dernier cas est très difficile à résoudre.

3.2. ALGORITHMES

3.2.1. MOORE-DIJKSTRA (CAS 2)


G  X, 

l u   0 (pour le sommet 1 : 1  2,1  3, ,1  N ).

i : longueur du meilleur chemin trouvé jusqu’à présent entre le sommet 1 et le sommet i.

S : ensemble des sommets pour lesquels on n’a pas encore de solution.

Algorithme :
Initialisation :
S  2,3, ,N
1  0
Si 1,i  U : i  l1i
Si 1,i  U : i  
Pi  1 i 1àN

Recherche :
Choisir j  S :  j  min  i 
iS

Tant que S   , faire :

S  S   j

Si S   : fin

Sinon :  i   j et iS: 
i  min i ,  j  lji 

37 – 92
Exemple
Les successeurs du sommet 1 :

7 4
S  2,3, 4,5,6
1 2 4

1 5 2 5 1  0
1 2  7
3 2 5 3  1
4  5  6  
7 3

Hypothèse de départ sur


6
les sommets les plus proches :
P1  P2  P3  P4  P5  P6  1

On commence par la plus petite longueur de chemin trouvée : 3  1 .

j3  S3  2, 4,5,6


2 15  6  P2  3

 4  
 
5  12  3  P5  3
 17  8  P6  3
 6
Puis on continue selon la même logique d’après les résultats trouvés : 5  3

j5  S5  2, 4,6



 2 122  5  P2  5
 
4  1  2  5  8  P4  5

Nota : 6 n’est pas concerné car il n’a pas de successeur.

Puis : 2  5

j2  S2  4,6

4  1  2  2  4  9  8
 
6  1  2  2  1  6  P6  2

Nota : on remarque que le 4 trouvé est supérieur à celui trouvé précédemment. Donc, pour les Pi , on ne
considèrera que celui du sommet 6.

Enfin : 6  6

j6  S6  4
 j4  S4  

On a donc les longueurs minimales des sommets 1 à 2 :


l12  5
l13  1
l14  8
l15  3
l16  6
Ce qui donne la longueur finale du chemin.

Le chemin est celui parcouru :

38 – 92
1 2 4

P6  2
P2  5
3 5
P5  3
P3  1

1 2 4

Et : P4  5

3 5
On remarque que la progression du chemin est
semblable à l’eau qui s’écoule.
Le graphe formé est arborescent.
6

Remarque : si dmax est le degré maximal pour les sommets, on obtient alors la dimension du graphe qui vaut
c N  N * dmax

3.2.2. BERGE (CAS 2)


G  X,U

l u  

i, j  U  lij

Algorithme :
Initialisation :
1  0
i   i  2 àN
Pi  1 i 1àN

Recherche d’un arc i, j tel que :

Si  j  i  lij : fin

Sinon
 j  i  lij
Pj  i

Principale différence avec l’algorithme de Moore-Dijkstra : il n’y a plus de compteur.

39 – 92
Exemple
1  0
2  3  4  5  6  
1 7 2 4 4

P1  P2  P3  P4  P5  P6  1
1 5 2 5

3 2 5 j
1 j

7 3

i lij
6

On a les étapes suivantes :


1  0

 2  3  4  5  6  
1. P  P  P  P  P  P  1
1 2 3 4 5 6
 Arcs : 1,2  , 1,3 , 2, 4  , 2,6  , 3,2  , 3,5 , 3,6  , 5,2  , 5, 4 ,  6,5

 Arc 1,2   2  7

 2  1  7 ?  non
2. 
 2  1  7  0  7  7
 P  1
 2

3. Et ainsi de suite pour chaque arc, en tenant compte des résultats précédents.

3.2.3. BELLMAN (CAS 2)


l u  

Algorithme :
Initialisation :
10  0
10   i  2 àN

Recherche :
k 1
1k  0
1k  min
1
ji

kj 1  lji 
Tant que k  N  1 :
k  k 1
1k  0
1k  min
1

kj 1  lji
ji

Si k  N : il existe un circuit de longueur négative.
Si ki  ik 1  i  1, ,N : fin

40 – 92
3.2.4. FORD (CAS 2)
l u  

Algorithme :
Initialisation :
1  0
i   i  2 àN

Recherche :
Tant que les i ne se sont pas stabilisés ( i  1, ,N ), faire :

i  min
1

 j  lji
ji

3.2.5. CAS DES GRAPHES SANS CIRCUIT (CAS 2)


l u  

S : complémentaire de S

Algorithme :
Initialisation :
1  0
i   i  2 àN
S  1

Recherche de j  S avec  j 1  S :

 j  min
1
j j

i  lji 
S  S   j

Si S  X : fin
Sinon : retourner au début.

Exemple

1. 1  0 et S  1

2. 2  1 et S  1,2
2 -1 5
3. 3  2 et S  1,2,3

4. 4  3 et S  1,2,3, 4 1 2 2

5. 5  0 et S  1,2,3, 4,5 1 4 6 6

6. 6  9 et S  1,2,3, 4,5,6
2 3 7

7. 7  3 et S  1,2,3, 4,5,6  X
3 -5 7

Remarque : dans ce graphe, on voit


clairement apparaître le rang des
sommets.

41 – 92
Fonction rang
Soit un graphe sans circuit présentant une source.
On appelle rang d’un sommet le nombre d’arcs du chemin le plus long (en terme d’arcs) joignant la source à ce
moment.
Avec E le nombre (cardinal) d’éléments de l’ensemble E.

Algorithme :
Initialisation :

di  i1  iX


k 0
SX
Recherche :
Tant que S   , faire :


Sk  i  S | di  0 
ri  k  i  Sk
dj  dj  1  j  i
S  S  Sk
k  k 1
On aura donc N-1 itérations dans le pire des cas.

Exemple :

1 2

d1  0
7 3 d2  d6  1
d3  d4  d7  2
d5  3
6 4
k 0
SX

D’où :
S0  1

r1  0

 d2  0
1. i  1  
 d3  1

S  S  S0  2,3, 4,5,6,7
k  0  1  1


S1  2,3

r1  1

 d4  1
i  2  d  1
  5
2. 
 d4  0
i  3  
 d7  1
S  S  S  4,5,6,7
 1  
k  1  1  2

3. Et ainsi de suite…

Remarque : comme il n’y a pas de circuit, on ne revient jamais en arrière.

42 – 92
4. APPLICATION AUX PROBLEMES
D’ORDONNANCEMENT

Étant donné un objectif atteignable par l’exécution préalable d’un ensemble de tâches élémentaires soumises à
diverses contraintes, il s’agit de déterminer l’ordre et le calendrier de ces tâches de façon à minimiser la durée
totale de l’application.

Ainsi, on associe :
Tâches  durée di .

Contraintes  contraintes de succession (une tâche ne peut être réalisée qu’à la suite ou avant une autre).
Nota : il pourrait y avoir des contraintes d’exclusion.

On en déduit donc que le problème central de l’ordonnancement correspond au couple contrainte – tâche.

Il existe plusieurs méthodes :


 Graphe potentiel – tâches  méthode française.
 Graphe potentiel – évènements (= potentiel – étapes)  méthode américaine.

4.1. GRAPHE POTENTIEL – TACHES


À chaque tâche élémentaire on associe un sommet du graphe, et à chaque contrainte de succession on associe
un arc orienté.

Le graphe, simple et orienté, admet une fonction rang et ne comporte pas de circuit :
 Longueur d’un arc orienté = durée de la tâche précédente.
  et  : tâches fictives associées au graphe, symbolisant le début et la fin du graphe.

De manière générale, on recherche la durée minimale du projet (= chemin la plus court entre  et ).

4.1.1. MARGE TOTALE


Soient :


Date au plus tôt pour réaliser une tâche i : ti  max t j  dj .
ji1

Date au plus tard pour réaliser une tâche i : Ti  min Tj  di
j i
 

On définit la marge totale de la tâche i comme :


Mi  Ti  ti

Localement, une tâche i pourra être finie un temps Ti plus tard sans que l’ensemble du projet n’en soit affecté.

Si Mi  0 , la tâche i est dite critique (la marge totale est nulle). L’ensemble de ces tâches constitue un chemin
critique ; cela signifie qu’elles ne peuvent être retardés.

43 – 92
4.1.2. MARGE LIBRE
La marge libre correspond au délai dont il est possible de retarder une tâche i sans que ses tâches successeurs
soient retardées :


mi  min t j  ti  di
j i

Nota : si Mi  0 , alors mi  0 .

k j1

t j1  tk  dk
  
ti  di  min t j1, t j2 
 t j2  tl  dl
i
Les tâches k et l pénalisent la durée : il est donc
possible de retarder le commencement de la tâche
i.
l j2

4.1.3. MARGE CERTAINE


C’est la marge dont on dispose pour réaliser la tâche i lorsque toutes ses précédentes commencent à leur date
au plus tard et toutes ses successeurs commencent à leur date au plus tôt :

 
 
i  max 0,min t j  di  max Tk  dk 
 j  
1
i k i

Nota : si mi  0 , alors i  0 .

k1 j1

i On ne s’intéresse qu’à la partie à gauche de i.

k2 j2

4.1.4. EXEMPLE APPLICATIF


Données de départ :
Tâche Durée Tâche antérieure
1 7 -
2 3 1
3 1 2
4 8 1
5 2 3–4
6 1 3–4
7 1 3–4
8 3 6
9 2 8
10 1 5–7–8

On recherche la durée minimale t  du projet (= chemin le plus court entre  et ). Ici, on a : t   T .

44 – 92
Représentation graphique :

3 1
2 3 5
2
7
1

0 1 3 2 1
 1 8 6 8 9 10 

8 1
7 1

8
4 7

Rang : 1 2 3 4 5 6 7 8

D’après les définitions précédentes, on peut compléter ainsi le tableau de données :


Tâche
Tâche Durée  ti  Ti Mi mi µi
antérieure
 0 - 0 0 0-0 = 0 0 0
1 7 - 0 0 0-0 = 0 0 0
2 3 1 7 11 11-7 = 4 |10-7-3| = 0 0
max{0, (15-1)-
3 1 2 10 14 14-10 = 4 |15-10-1| = 4
max{(11+3), 10}} = 0
4 8 1 7 7 7-7 = 0 0 0
max{0, (21-2)-
5 2 3–4 15 19 19-15 = 4 |21-15-2| = 4
max{(14+1), 15}} = 4
6 1 3–4 15 15 15-15 = 0 0 0
max{0, 20-
7 1 3–4 15 20 20-15 = 5 |22-15-1| = 5
max{(14+1), 15}} = 5
8 3 6 16 16 16-16 = 0 0 0
9 2 8 19 19 19-19 = 0 0 0
10 1 5–7–8 21 21 21-21 = 0 0 0
 0 - 22 22 22-22 = 0 0 0

Le chemin critique suit le chemin pour lequel Mi  0 : {, 1, 4, 6, 8, 9, 10, }. Les tâches ne pouvant être
retardées sont {4, 5, 6}.

4.2. GRAPHE POTENTIEL – EVENEMENTS


Inventée par l’américain Roy, cette méthode est beaucoup plus connue sous le nom de P.E.R.T. (Program
Evaluation Research Technic) :
Arcs  Tâches.
Sommets  Contraintes de succession.
1

7
3 1
2 3

7 8 2 1

1 4 5 10

1 2
6 9
2

45 – 92
5. PROGRAMMATION LINEAIRE CONTINUE

La programmation linéaire continue (PLC) est la résolution de problèmes d’optimisation linéaires continus (par
opposition aux problèmes discrets qui sont l’objet de la PLD).

5.1. DEFINITION
Soit la définition suivante (pouvant varier selon le contexte) :
m
min  ci  xi   ct x
i1

ou :
m
max  ci  xi   ct x
i1

Légende :
ci : paramètres inconnus.

xi : inconnues.

c et x : vecteurs.

t : transposée du vecteur.
: produit scalaire.
m : contraintes égalités.

D’où :

  a1i  xi  b1


 a2i  xi  b2
 

  ami  xi  bm
 Ax  b  xi  0  

Nous pouvons donc conclure :

min c t x
Ax  b

 
m

x

La première ligne désigne la solution à trouver, la seconde les contraintes et la dernière le domaine.

46 – 92
5.2. EXEMPLE
On cherche à minimiser :
2  x1  x2  3  x3
x1  x2  3
0  x1  2
x2 

Hypothèse : on se crée de nouvelles variables.


x1  x2  3  x4  0  x1  x2  x4  3
0  x1  2  x5  0  x1  x5  2
x2   x2  x2  x2 avec x2  0 et x2  0

On en déduit donc une nouvelle forme du problème :

2  x1  x2  x2  3  x3 2  X1  X2  X3  3  X4
x1  x2  x2  x4  3  X1  X2  X3  X5  3
x1  x5  2 X1  X6  2
D’où :
min 2  X1  X2  X3  3  X4   Xi  0 i  1 à 6

Conclusion :
 X1  2
   
 X2  1
1 1 1 0 1 0  X3  3  1
     et  
1 0 0 0 0 1
  X4   2  3
A
X  b 0
  5  
 X6  
0 
c

Nota : ici, on ne s’intéresse qu’à la modélisation. On ignore si le problème a une solution.

5.3. APPLICATIONS REELLES


On peut imaginer plusieurs débouchés.

Par exemple un problème culinaire :


Ingrédients : i  1 à n
Coût unitaire : ci

 xi  xi mini
Pourcentage des ingrédients dans le produit fini : xi  
ij  xi  x j  ij
 min c1  x1  ...  cn  xn

Les PLC à structure particulière permettent également de résoudre des problèmes de flux (=flots). Une
application évidente est le réseau de distribution.

En effet, un réseau s’apparente à un graphe orienté additionné d’un flux, où les arcs symboliseraient les flux
( arc   fx ). Ainsi :

47 – 92
f 

f 1

f 2

f 2
f 3

Si on considère la propriété de conservation des flux :

 f   f  0
i i

alors f  f  0 est une contrainte possible.

On peut alors en déduire :

min  ci  fi
i
Af b
b0

De manière générale, il existe des méthodes plus adaptées que la PLC généralisée pour résoudre ce type de
problèmes.

5.4. ADMISSIBILITE

Solution admissible
 A  x  b
C’est une solution qui satisfait aux contraintes du problème : 
 b  0

Domaine admissible
C’est un polytope tel que : X  x | A  x  b , x  0

Sa particularité est d’avoir une surface convexe.


x3

x1  
x2  
x    x1  1     x2  
0 x2
0  1

x1

A la surface de ce polytope, la frontière est alors soit un point, soit une arête, soit une facette.
Pour déterminer si une surface est convexe ou non, il suffit de choisir un segment quelconque appartenant à
celle-ci. Si l’ensemble des points de ce segment appartient à la surface, alors celle-ci est convexe :

48 – 92
Convexe Non convexe

La partie du segment en dehors de la surface n’est pas une solution admissible du problème.
De manière générale, la solution admissible optimale se trouve à la frontière.

Simplexe
Le simplexe est la première solution admissible.
Ainsi, si on observe au voisinage immédiat pour savoir s’il existe une meilleure solution et qu’il n’y en a pas, on
a fini.

Possibilités
Combien de sommets peut avoir un polytope ? (cas général)

D’après la PLC :

min c t x
Ax  b

 
n

x

avec :
n : variables.
m : contraintes
n m
Alors, on pourra envisager Cnm solutions. Si n m , il n’y aura pas de solutions.

2000
Par exemple, C10000  10000! (c’est long).

Pour certaines problèmes, la solution de PLC la plus utilisée dans le commerce donne (paradoxalement) une
solution assez rapidement. En effet, une méthode récente (moins de 20 ans) permet cela.

49 – 92
5.5. EXERCICES

5.5.1. PREMIER EXERCICE


min 2  x1  5  x2 
 x1  x2  5
  Possibilités : C24  6
x1  3  x2  7

 x1  0
 x2  0

Illustration graphique en deux dimensions (il ne reste alors que 4 des 6 possibilités) :

x2

5 2

7/3 3 4

0 1 5 7 x1

Ici, on peut remarquer que le domaine admissible est convexe.


Les solutions admissibles se trouvent sur les segments frontières.
Les solutions optimales se trouvent dans les coins.

La solution optimale est donnée par la résolution des contraintes :

 x1  x2  5

x1  3  x2  7
d’où :

 x  4  x  0  x  0  x  5
1:  1 2: 1 3:  1 4: 1
x2  5 / 4 x2  7 / 3 x2  0 x2  0
 min 2  x1  5  x2   min 2  x1  5  x2   min 2  x1  5  x2   min 2  x1  5  x2 
 min 2  4  5  5 / 4   min 2  0  5  7 / 3  min 2  0  5  0   min 2  5  5  0 
 min 57 / 4   min 35 / 3  min  0   min 25

La solution optimale est constituée par le point 3.

50 – 92
5.5.2. SECOND EXERCICE
min 2  x1  3  x2 
x1  4  x2  1
  Possibilités : C24  6
2  x1  x2  1

 x1  0
 x2  0

Ici, la solution est du type :


x1  4  x2  x3  1

t
min c x 2  x1  x2  x4  1 2
  
x1  0 3 1 4 1 0 1
Ax  b    c   et A  et b 
x2  0 0 2 1 0 1  1
x0   
 x3  0
 0
 x4  0

La méthode du simplexe donne :


Solutions de base :
 x1 0

x2 0

Trouver une solution  x3 1
extrême initiale S=S(0)  x4 1

Vérifier s'il existe une Changement Meilleures solutions possibles :


de base
meilleure solution S=S(k+1)
 
 j j
2  x1  3  x2
Non Oui  k k
S=S(k+1) 2  x1  3  x2
 l l
2  x1  3  x2
 

Illustration graphique en deux dimensions (il ne reste alors que 4 des 6 possibilités) :

x2

2
1

3 4

1/4

0 1/2 1 x1

51 – 92
De la même manière que précédemment, on détermine les coordonnées des points optimaux :

x  3 / 7  x  0  x  0 x  1 / 2
1:  1 2: 1 3:  1 4: 1
x2  1 / 7 x2  1 / 4 x2  0  x2  0
 max 2  x1  3  x2   max 2  x1  3  x2   max 2  x1  3  x2   max 2  x1  3  x2 
 max 2  3 / 7  3  1 / 7   max 2  0  3  1 / 4   max 2  0  3  0   max 2  1 / 2  3  0 
 max  9 / 7   max 3 / 4   max  0   max 1

La solution optimale est constituée par le point 1.

Rappel : détermination des coordonnées du point 1 :


x1  4  x2  1 1  *2 1  *2 2  x1  8  x2  1
   
2  x1  x2  1 2  *1 2  *1  2  x1  x2  1

 12  2  x1  8  x2  1  2  x1  x2  1  7  x2  1
 x2  1 / 7

 1  x1  3 / 7

5.5.3. TROISIEME EXERCICE


Le cas traité démontre que, dans certains cas, la méthode du simplexe peut se révéler très lente.

Ainsi le problème suivant :

 n 

max 2n1  x1  2n2  x2    2  xn1  xn   max 
 2nk  xk  
 k 1 
 x1  5

 2  x1  x2  52
2

 2  x1  22  x2  x3  53
3

 
2n  x  2n1  x    22  x n
 1 2 n1  xn  5
xk  0

entraîne 2n itérations.

Application numérique
2000 contraintes et 10000 variables :

  10 
1000 1000
210000  210  3
 103000

Le nombre de solutions possibles est gigantesque !

52 – 92
6. ALGORITHMES ET PERFORMANCES

De manière générale, les problèmes que l’on doit résoudre sont de nature combinatoire.

6.1. PROBLEMES COMBINATOIRES

Définition
Choix discret, sélection, organisation d’un ensemble discret, éléments de l’ensemble qui sont organisés dans
une certaine structure (par exemple : graphe).

Exemple

max 2  x1  3  x2    CB
x1  4  x2  1  C1  B1
2  x1  x2  1  C2  B2

x1  x1 
x1  1000 x1  1000
x2  0,1,2,8,17,61,76 x2  0,1,2,8,17,61,76

Modélisation graphique :

C 0 B

2
x1 1

2
C1 1 B1

4
x2
1

C2 1 B2

Questions
Existe-t-il une solution ?
Combien il y a-t-il de solutions ?
Quelle est ou quelles sont les solutions ?

53 – 92
Approche élémentaire

Génération
d'une solution

Evaluation
Cycle
de la solution

Non Il y a-t-il d'autres Oui


solutions ?

Ainsi, sur n objets, le nombre d’itérations sera souvent de l’ordre de 2n ou n!.

Exemple :
n Temps d’itération (cycle)
1 10-9 secondes (hypothèse)
5 0.12 µs
10 3.7 ms
15 14.5 s
20 80 ans
21 1680 ans

Cette approche est donc limitée à des problèmes de petite dimension.

Exemple 1 : les calculateurs


Soit un calculateur A. Trouver un problème de dimension n en T unités de temps. On a :
T  2n  t0A

t0A : durée d’une itération avec le calculateur A.

Soit un calculateur B fonctionnant x fois plus vite que A. Quelle est la taille N des problèmes que peut traiter B
pendant l’intervalle de temps T ?

Réponse :
t0A
tB0   2N  tB0  T et 2N1  tB0  T
x

t0A T
 2N  T  2N  x   x  2n  N  log2  x    n
x t0A

Le terme   signifie qu’il faut prendre l’entier immédiatement inférieur.

Application numérique :
n  100
  8  10  16  23  10  24
 x  10
Si on considère que 10 est très proche de 16, alors N=104 !

Conclusion : augmenter la performance du calculateur ne sert à rien. On parle d’explosion combinatoire. Face à
celle-ci, on a développé :
 des méthodes exactes spécialisées (les problèmes résolus sont de l’ordre de n<500) ;
 des méthodes approchées (heuristiques) (les problèmes résolus sont de l’ordre de n<5000).

54 – 92
Exemple 2 : le sac à dos
Soient :
n, b : entiers non nuls

ai | i  1 à n , ci | i  1 à n : entiers naturels

ai  b i  1 à n
n n
Il faut trouver x1, , xn   tels que  ci  xi  soient maximum alors que la contrainte est   ai  xi   b .
i1 i1

On a :
n : nombre de variables de décision.
ci : pondération positive de la variable i.

ai : pondération négative de la variable i.

b : capacité.

Réponse :
La programmation linéaire entière (PLI) ou bien la programmation linéaire binaire (PLB) seraient plus
appropriées dans le cas qui nous occupe. En effet, on à 2n solutions à envisager : il s’agit d’un arbre binaire à
2n feuilles. Si on veut une solution exacte, il faudra donc faire 2n itérations.

x1
1 0

 n  x2
max 
  ci  xi   1 0 1
 i1  x3
n 1 0 1 0 1 0 1 0

  ai  xi   b
i1
xi  0,1
i 1àn 1 0
xn
1 0 1 0 1 0

ci c1 c c c
Une solution possible : pi    2  3  n .
ai a1 a2 a3 an

Hypothèse de choix : xi  1 quand ai  b . Ainsi :

a2  b  a1

Si x2  1 : rien.

Si x2  0  a3  b  a1  a2 .

Etc. pendant n itérations !

6.2. COMPLEXITE D’UN ALGORITHME

6.2.1. COMPLEXITE EN TEMPS


Hypothèse de base : le temps d’exécution d’un algorithme appliqué à la résolution d’un problème ne dépend
que de la taille de l’instance du problème et non des valeurs numériques de celle-ci.

55 – 92
Exemple : le temps d’exécution des deux problèmes ci-dessous sera sensiblement le même.
max 2  x1  3  x2  max 3  x1  x2 
2  x1  x2  5 x1  8  x2  10
x1  0,1 x1  0,1
x2  0,1 x2  0,1

La complexité en temps d’un algorithme est la fonction qui relie la taille du problème à son temps d’exécution
par l’algorithme.
Ainsi, plus la machine sera puissante, plus l’algorithme sera résolu rapidement (de manière générale).
Le temps d’exécution par l’algorithme correspond donc au nombre moyen d’opérations élémentaires nécessaire
à sa résolution.

6.2.2. COMPLEXITE EN MEMOIRE


La complexité en mémoire d’un algorithme est la fonction qui associe à la taille du problème la taille moyenne
de l’espace de mémoire nécessaire à sa résolution.

6.2.3. CRITERES D’EVALUATION DE LA COMPLEXITE

Coût uniforme
L’exécution d’une instruction élémentaire consomme une unité de temps et l’exécution d’une opération de
mémorisation consomme une unité d’espace.
On retiendra ce coût par la suite car il est le plus usité.

Coût logarithmique
Le temps et l’espace mémoire nécessaires à l’exécution d’une instruction élémentaire sont proportionnels au
nombre de bits nécessaires pour représenter une instance du problème.

Comparaison des coûts (exemple)

Problème : étant donné n entier supérieur à 1, calculer nn .


Hypothèse de bornage : on prendra n maximum tel que nn  9999 .

Algorithme de calcul :
Début
Lire n 1
Si n  0 : écrire 0 1
Sinon :
xn 1
y  n 1 1
Tant que y  0 , faire :
x  x n
y  y 1
Écrire x 1
Fin

56 – 92
Pour le coût uniforme en temps, on se concentre sur les opérations d’écriture (lire, écrire, ). On en dénombre
cinq. Puis on s’intéresse au nombre d’opérations au sein de la boucle du tant que : on a cinq fois n moins une
itérations au pire. On en déduit que :
Coût uniforme en temps : 1  1  1  1  1  5  n  1  5  n

Pour le coût en mémoire, on compte le nombre de variables. Elles sont au nombre de trois : x, y, et n. Donc :
Coût uniforme en mémoire : 3.

Pour le coût logarithmique en temps, on considère l’énième itération : ni et on définit la longueur en bits :

 
 ni  i  log2 n   1

n1
Cette longueur est proportionnelle à :   ni  qui est compris entre :
i1

n  n  1 n1 n  n  1
2
 log2 n    ni  
2
 log2 n  n  1
i1

 n2  n 
On obtient alors quelque chose comme : t0    log2 n  n  1   n2  log2 n
 2 
 
t0 est le coût logarithmique en temps.

Pour le coût logarithmique en mémoire, on aura pour n itérations : n  log2 n  1 .

Si on compare les coûts dans le temps :

Complexité
en temps Coût logarithmique

ˆ logarithmique en temps n
Cout
  log n
ˆ uniforme en temps
Cout 2 2
5.n
Coût uniforme

ˆ log arithmique en mémoire n


Cout
  log n
ˆ uniforme en mémoire
Cout 3 2

De manière générale, on s’intéressera au coût en temps et on choisira l’évaluation la plus simple (= uniforme) :

n
Nombre d'opérations 2 ou n! 4
élémentaires a.n

Dans ce type de polynôme


(dégré 4 par exemple), on
traite plus de cas.

n
Asymptote

57 – 92
6.2.4. COMPLEXITE ASYMPTOTIQUE
Fonction dominée asymptotiquement
La fonction f :  est dominée asymptotiquement par la fonction g :  si et seulement si :

n0  , n  n0 : f n   g  n 

On dit que g n « majore » (domine) f n pour n grand.

Par exemple, g n domine f n pour les cas suivants :

f n  2  n2  3
g n  3  n2  2
g n  5  n2  n  1
g n  en /1000

mais f n domine g n pour :

g n  log n

6.2.5. ORDRE
T n est d’ordre O f n   si et seulement si :

k  , n0  , n  n0 : T n   k  f n  .

 
T n est d’ordre  g n si et seulement si :

h  , n1  , n  n1 : h  g n   T  n  .

T n est d’ordre exact f n si et seulement si T n est d’ordre O f n   
et d’ordre  f n : 
k  , h  , n  , n  n : h  f n   T n   k  f n 

Exemple

T n  2  n2  3 
O n2


 
 k  3
 3
  n2  2

2
 n 3
 n
3

3f n T n  2
2.n +3
et n0  2

T n  3  n2  2 
O n2


 
 k  1
 n3  2  n2  3

n
T n est d’ordre  n2   :

h1  n2  2  n2  3  n1  1

58 – 92
Remarque

Si T n est d’ordre O f n      


et f n est d’ordre O g n , alors T n est d’ordre O g n .

De manière générale :
p
T n     ak  nk   a0  a1  n  a2  n2    ap  np
k 0

Ainsi, T n est d’ordre exact np .

A  D1  B1
 T n  T1 n  T2 n


  f n    f n 
 1 2   

 ou

 
 O f1 n  O f2 n  
 
T n sera d’ordre  min f1 n , f2 n    
ou O max f1 n , f2 n .

Exercice
Mettre en ordre croisant n entiers ai (i  1 à n) .

Algorithme de calcul :
Début
Lire n, a1,a2 , , an  pour i  1 à n  1

Pour  j  n à i  1 faire :

Si aj1  aj alors :

Début
temp  aj1
aj1  aj
aj  temp

Fin
Écrire n, a1, a2 , , an 

Fin

Dans le pire des cas, on procèdera à 4  n  i itérations.

D’où, pour la première opération :


n1 n1
1   4  n  i  1  1  4  n  n  1  4   i  1
i1 i1
 n  n  1 
  1  4  n  n  1  4    1
 2 
 
  1  2  n  n  1
  2  n2  2  n  2

Dans le meilleur des cas, on procèdera à n  i itérations.

n1 n  n  1
1   n  i  1  2
2
i1

59 – 92
Ainsi :
T1 n  2  n2  2  n  2
n2 n
T2 n   2
2 2

Ici, la complexité asymptotique est n2 (ordre exact).

6.3. EFFICACITE D’UN ALGORITHME


Soit l’exemple suivant :
  x2k 
cos  x     1
k
 
 2  k  ! 
k 0  
L’ordre tend vers 2   : O  2   .

Il est possible d’approcher cos  x  par le polynôme suivant :

f  x   1  a1  x  a2  x2  a3  x3  a4  x4  a5  x5

 x  0,2   : cos  x   f  x   2  109

Les valeurs des coefficients sont :


a1  0.5
a2  0.0416666418
0 2. a3  0.001388391
a4  0.0000247609
a5  0.0000002605

n
Le polynôme est de la forme Pn  x     ak  xk  sur 0,2  
k 0

Il existe plusieurs manières d’aborder le problème.

6.3.1. PREMIER ALGORITHME POSSIBLE


Début
Lire n, an, an1, , a1, a0 , x  1

p  a0 1

Pour i  1 à n faire :

p  p  ai  xi 3+i

Écrire p 1
Fin

 n n n  n  i 
3 


 3  i  3  3  n   i 3  3  n  2
On aura donc le nombre d’itérations suivantes :  i1 i1
 n2  7  n
  3
 2

60 – 92
6.3.2. SECOND ALGORITHME POSSIBLE
Début
Lire n, a0 , a1, ,an, x  1

p  a0 1

yx 1

Pour i  1 à n faire :
Début
p  p  ai  y
3+2
y  yx
Fin
Écrire p 1
Fin

On aura donc le nombre d’itérations suivantes :


n
4  5   4  5  n
i1

Bine que plus compliqué, ce second algorithme est moins complexe que le premier : l’ordre est moindre.
Son efficacité est donc plus grande que le premier.

6.3.3. TROISIEME ALGORITHME POSSIBLE


On réutilise le polynôme de départ :
n
Pn  x     ak  xk  sur 0,2  
k 0

 Pn  x     a  x  a
n n1   x  an2   x    x  a1   x  a0

Par exemple :

2  x4  3  x3  5  x2  8  x  2    2  x  3   x  5   x  8   x  2
On en déduit l’algorithme de Hörner :
Début
Lire n, a0 , a1, ,an, x 

p  an

Pour i  n  1 à 0 faire :
p  p  x  ai

Écrire p
Fin

Dans ce cas, on a plus que 3  3  n itérations.

D’ordre n, cet algorithme se révèle plus efficace encore que le second (les coefficients sont plus faibles).

61 – 92
Remarques
 f n 
 
f n est O g n si et seulement si lim    0.
n  g n 
 
 f n 
f n  g n si et seulement si lim   1.
n  g n 
 
Exemples :

n2 est O n5  
sin n est O n

1 1
sin  
n n

2n  n  log n  100  n5 2n

6.3.4. EXERCICE : CALCUL DE AN


On cherche à calculer an . Intuitivement, on peut utiliser l’algorithme suivant :
Début
Lire  a,n 1

z 1 1
k n 1
Tant que k  0 faire : 1
Début
z  za 2
k  k 1 2
Fin
Écrire z 1
Fin
On en déduit le nombre d’itérations : T n  4  5  n .

On peut également utiliser l’algorithme rapide exponentiel :


Début
Lire  a,n 1

z 1 1
ta 1
k n 1
Tant que k  0 faire : 1
Si k est impair, alors : 1
Début
zzt 2
k 
k  2
2 
Si k  0 , alors : 1
2
tt 2
Fin
Écrire z 1
Fin

62 – 92
Soit m une itération quelconque. Le nombre total d’itérations oscille entre :
2m1  n  em
Dans notre cas, il sera de 5  9  m itérations.

Remarque

T(n)

S(n) 5  9m   
5  9  log2 n  1
 S n  14  9  log2 n


S n est O T n 
n

6.3.5. EXERCICE : PROBLEME DES CELEBRITES


Soit n personnes. Parmi elles se trouve peut-être une célébrité.
Rappel : une célébrité est une personne qui ne connaît personne mais que tout le monde connaît.

Soit un couple de personnes A et B. On pose la question suivante à A : « Connaissez-vous B ? ».


Si A répond :
 Oui  A n’est pas célèbre.
 Non  B n’est pas célèbre.

De manière générale, on en déduit une table de réponses suivante :


B
A

 oui
pour laquelle on a l’ensemble : Q  A | B   
non

6.3.6. EXERCICE : CALCUL DU NOMBRE DE HAMSTERS AU BOUT DE N MOIS


Un couple de hamsters adultes donne chaque mois naissance à un autre couple de hamsters, sachant qu’un
hamster n’est adulte qu’au terme d’un mois. Ayant acheté un couple de hamsters à l’instant t=0, combien en
aurais-je à t=n ?

On en déduit :
a 0  0
a 1  2 (couple initial)
a 2   2  0  2
a 3   2  2  4
a  4  4  2  6
a 6   6  2  8

63 – 92
Soit de manière générale :
n  2 : a n  a  n  1  a  n  2 
 
couples couples
enfants petits
enfants

Soit l’algorithme pour a n :

Début
Lire n
Si n=0, alors :
a n   0

Si n=1, alors :
a n   2

Sinon a n  a  n  1  a  n  2 

Écrire x
Fin
On en déduit que le nombre d’itérations maximal est de l’ordre de 2n2 , ce qui est gigantesque :

 
10
n  100   2100  210 1030

Pourtant, si on se base sur le même principe que précédemment (les coefficients ci sont connus) :

a n  c1  an1  c2  an2    ck  ank

et en s’affranchissant des conditions initiales ai , on peut alors ramener le problème à un polynôme de la


forme :
k
a n     i  xin  i 1àk
i1

 1  5
et xn  xn1  xn2  x2  x  1  0 
 2
n n
1 5  1  5 
 a n  1     2   
 2   2 
   
 1  2  0
 n n
 n  0:  1 5  1  5  2

 1     2   
2   2 
    
 n
1  5  
n
5  1  5 
et a n        
5  2   2  
  


Cette solution, bien que plus compliquée, est moins complexe.

1 5
Nota :  1.618033988 est le nombre d’or.
2
  a 1 
 lim  n  est le nombre d' or 
 x   an  
   
Le nombre d’or est le nombre qui fournit, entre
autres, un carré agréable (exemple : Léonard de
n
Vinci).

64 – 92
6.3.7. EXEMPLE : LES TOURS DE BRAHMA
Soit 64 disques de taille croissante. On cherche à amener les disques en position Z.

64
disques

X Y Z

Les règles sont les suivantes :


1. on ne peut déplacer qu’un seul disque à la fois ;
2. les petits disques sont posés sur les plus grands.
On cherche à faire l’opération le plus rapidement possible.

Exemple avec 3 disques :


 7 opérations : 23  1

X Y Z X Y Z
X Y Z

X Y Z
Étape 1 : (1,1,3) Étape 2 : (1,2,3) Étape 3 : (1,2,2)
État initial : (1,1,1)

X Y Z X Y Z X Y Z X Y Z

Étape 4 : (3,2,2) Étape 5 : (3,2,1) Étape 6 : (3,3,1) Étape 7 : (3,3,3)

Si on observe le cheminement sur un graphe :


États : i, j,k 

i : indice de l’aiguille qui porte le grand disque ;


j : indice de l’aiguille qui porte le disque moyen ;
k : indice de l’aiguille qui porte le petit disque.
alors le chemin suivi par rapport à l’ensemble des possibilités est rectiligne et optimal. De manière générale, si
N est le nombre de disques, il faut 2N  1 opérations pour le chemin le plus court.

(1,1,1)

112 113

132 123

133 122
131 121

233 322

231 232 323 321

221 212 313 331

(2,2,2) 223 213 211 311 312 332 (3,3,3)

Le déplacement d’un disque de X vers Z se note ainsi : X  Z .

65 – 92
On en déduit alors l’algorithme de Hanoï :
Hanoï (N de X vers Z en passant par Y)
Début
Si N=1, alors X  Z
Sinon
Début
Hanoï (N-1 de X vers Y en passant par Z)
XZ
Hanoï (N-1 de Y vers Z en passant par X)
Fin
Fin

Soit T N le nombre d’opérations élémentaires pour N disques :

 T 1  1

 T N  2  T n  1  1

Par exemple, peut-on affirmer ceci ? :


 T 2   3  22  1

  T N  2N  1
 T 3  7  2  1
3

On pose :
 N1
a : T N 

 
2i
i0

b : T N  1  2  T N  1
N1 N1 N N
 b:  2  2i  1   2i1  1   2i  20    2i 
i 0 i0 i 0 i0

Si e  2 et k  N  1 , alors :
K
1  ek 1 1  2N
 ek   1e

12
 2N  1
k 0

Vérifié !

Donc, si une opération élémentaire dure une seconde, il faudra pour 64 disques :
T  64   264  1  585 000 000 années !!!

66 – 92
7. CLASSES DE COMPLEXITE
DE PROBLEMES

7.1. PREMIERE CLASSIFICATION


Les problèmes peuvent être classifiés dans un premier temps en :
 Problèmes de décision : les solutions sont du type oui/non. Par exemple : soit G et k entiers
strictement positifs, existe-t-il une clique de G de taille supérieure ou égale à k ?).
 Problèmes de localisation. Par exemple : trouver dans G une clique de taille supérieure ou égale à k.
 Problèmes d’optimisation. Par exemple : trouver dans G la clique de plus grande taille.

Rappel :
Une clique est un graphe non-orienté dont tous
les sommets sont reliés.

Exemple : clique d’ordre 5 

7.2. SECONDE CLASSIFICATION (DITE DE COMPLEXITE)


Soit un problème général paramétré. Il est dit « traitable » si on connaît un algorithme de résolution de celui-ci
en temps polynomial.

Temps polynomial : Soit N un paramètre de la taille du problème. Alors :


T  N Nk

k : entier fixé ne dépendant pas de l’instance.

Un problème « traitable » appartient à la classe de complexité P.


Les problèmes qui ne sont pas connus pour être de la classe P sont dits de classe NP. Toutefois, cela ne signifie
pas qu’ils ne sont pas polynomiaux ; cela signifie simplement que l’on ne les a pas encore classés.

Exemple :
Est-il plus facile de vérifier que 267  1 n’est pas premier ou bien de montrer que
67
2  1  193707721  761838257287 ? Dans le premier cas, la démonstration est difficile, dans le second la
vérification est facile.

De manière générale, si on veut vérifier qu’un nombre N est premier, on cherche à vérifier qu’il est divisible par
1 ou par lui-même. On a donc intérêt à considérer les nombres supérieurs :

m  2,3, ,  N 
 

Ainsi, 21 est-il premier ? Non car il est divisible par 3 et par 7 :


/2 /3
 /4 /5 /6 /7
 etc.
7 3

67 – 92
La charge totale de vérification est de l’ordre de N.

Si on définit B  log2 N , alors :

B
N 2 2 et N  2B

On retrouve la forme T N Nk .

Si on reprend l’exemple :

10 
67 33
B  67  2 2  233  3
 109 !!!

on se rend compte que vérifier si un nombre est premier est de l’ordre de l’exponentiel !

Une autre définition des problèmes de classe de complexité NP peut être donnée : c’est la classe des problèmes
de décision pour laquelle il est « facile » de vérifier qu’une solution est correcte mais pour lesquels il peut être
difficile de construire une solution.
L’un des meilleurs exemples de classe NP est le problème du coloriage d’un graphe avec K couleurs.

Conclusion :
Trouver une solution est difficile.
Vérifier une solution est facile (celle-ci se fait de manière polynomiale).

7.2.1. REDUCTIBILITE D’UN PROBLEME A UN AUTRE


Soient deux problèmes Q et Q’.
Q’ est « rapidement » réductible en Q si on peux convertir toute instance de Q’ en une instance de Q en temps
polynomial de façon à ce que les deux problèmes aient la même solution.

Exemple :
Q' : A  x  b

avec A matrice rectangulaire (lignes n et colonnes m).

Si n m , alors :

Q' : A  x  b   
Q : At  A  x  At  b

Si A t  A est inversible :

 
1
x*  A t  A  At  b

7.2.2. ÉQUIVALENCE
Q et Q’ sont équivalents si Q’ est rapidement réductible en Q et inversement.

7.2.3. CLASSE DE COMPLEXITE NP-COMPLET


Un problème est dit NP-Complet si et seulement si :
 Il est de classe NP
 Tout problème de classe NP est rapidement réductible en lui.

68 – 92
NP NP
?
P P NP-C

NP-C

État d’origine État loisible et souhaité

 Q'
NP

R A
P
Q0
NP  C et P

R0A

P
solution   
Ar AR 0

De manière générale, on connaît des algorithmes pour les problèmes de classe P. Pour tous les autres
problèmes, on cherche des solutions polynomiales approchées (=P).

7.2.4. PROBLEME DE SATISFAISABILITE (SAT)


Ce problème a été définit P par le théorème de Cook.

Soit un ensemble de clauses. Existe-t-il une affectation de valeurs booléennes (V,F) aux variables, de façon à
ce que chaque clause soit vraie ?

Exemple 1
Soit 3 variables logiques (3-SAT) :  x1, x2 , x3  .

On en déduit les clauses : x1, x2  , x1, x3  , x2 , x3 , x1, x3 .

On cherche :  x1  x2    x1  x3    x2  x3    x1  x3  .

On aura 2N itérations. Le problème est donc NP-Complet.

Exemple 2

Peut-on colorier ce graphe avec 3 couleurs ?


1 2

Couleurs : j  1 à 3
Sommets : i  1 à 4

4 3

V : si le sommet i est colorié en j


xij  
F : sin on

   : le sommet i est colorié.


4 clauses : x1i , xi2 , xi3

 4 clauses :  x , x  : le sommet i n’est pas colorié en 1 ou 2.


i
1
i
2

 4 clauses :  x , x  : le sommet i n’est pas colorié en 1 ou 3.


i
1
i
3

 4 clauses :  x , x  : le sommet i n’est pas colorié en 2 ou 3.


i
2
i
3

 3 clauses / barrette :  x , x  : (u,v) sont les arêtes de G.


u
j
v
j

Soit 34 clauses au total.

69 – 92
7.3. EXEMPLES

7.3.1. PROBLEMES DE CLASSE P


 Recherche de chemins de poids minimum dans un graphe.
 Résolution de systèmes d’équations de type linéaire : A  x  b .
 Problèmes de PLC.
 Problèmes spéciaux : transports :

Destinations Dj
j

Origines i 1  M

Oi  Qij

N M
Qij  : min  Cij  Qij 
i1 j1

M

 Qij  Oi i  1 à N
 j1

 N M
 
 Oi 
 i1
 Di
j1
N


 Qij  Di i  1 à N
 i1

7.3.2. PROBLEMES NP-COMPLETS


 Problème de satisfaisabilité (SAT).
 Coloriage d’un graphe.
 Problème de la K-clique.
 Problème du Kième ensemble stable.
 Problème du partage :
N entiers relatifs : a1, a2 , , aN  A  A .

On a :  ai    aj  .
iA iA

Est-il possible de trouver A ?

70 – 92
8. METHODES EXACTES
D’OPTIMISATION COMBINATOIRE

La plupart des problèmes concernés sont d’ordre NP (NP-Complets inclus).


Les méthodes utilisées sont :
 Backtracking : on énumère les solutions une à une (aucune condition préalable).
 Branch & Bound : les solutions sont séparées et évaluées (aucune condition préalable).
 Programmation dynamique : la construction des solutions se fait étape par étape.

8.1. BACKTRACKING
On cherche à tirer le meilleur bénéfice zi possible compte tenu des variables xi : max  zi  .
xi

On a :
1 : si le tronçon du réseau est arrangé
xi  
0 : sin on
et :
n
  ci  xi   B
i1

ci : coût

B : budget

D’où l’idée de maximiser ou de minimiser le critère d’optimisation, en fonction des variables de décision, des
contraintes, et du domaine de définition.

La méthode du backtracking appliquée aux problèmes NP-Complets permet d’avoir des résultats de manière
très rapide, moyennement rapide, ou très lente selon le problème. Ainsi, du fait de ses performances aléatoires,
le choix de cette méthode est à retenir en dernier.

71 – 92
Exercice
Problème du plus grand ensemble de sommets indépendants d’un graphe :

Il a été démontré que ce


problème est du type NP-
Complet.
3 6 5 1

A ce jour, on ne connaît pas


d’algorithme rapide de
résolution en temps
polynomial.
4

D’un point de vue matriciel :


M  mij 

mij  1 si arête entre i et j, 0 sinon

On a donc une matrice carrée avec des zéros sur la diagonale.

Si on construit l’arbre de décision :

niveau 1
{Ø}
sens de parcours

niveau 2
{1} {2} {3} {4} {5} {6}

niveau 3
{1,3} {1,6} {2,4} {2,5} {3,4} {3,5} {4,5}

niveau 4
{2,4,5} {3,4,5}

on s’aperçoit que l’on obtient 16 sommets indépendants (contre 26  64 sommets pour une recherche globale).

Si on considère un graphe de N sommets et que l’on chercher à calculer la complexité moyenne IN du


backtrack pour le problème du plus grand sous-ensemble de sommets indépendants, on aura d’après la
matrice :
0    
  mii  0  N2 N 
 0     
 N2 solutions  diagonale 2 
N * N :        0   IN  2
  mij  mji  1 2 solutions possibles 0 ou 1
   0   
    0 

Par exemple, si N=10 :
 102 10 
 
  2 
 2  4.5 4
2   245  210  10
 102

On montre que :
  k k 1  
N   
   0  NlnN
 2 
  CkN  2
 
 
k 0  n' est pas
 polynomial
 
L’ordre de résultat est dit « sub-exponentiel ». En effet, quelque soit le problème posé, l’ordre de solution sera
toujours plus petit que NN , N! , ou 2N .

72 – 92
On montre même que :
N
  lnN  
   
 NlnN   N N  
lim     0
x   2N  2N
   
 
 

Si on désigne par :
 
 
nombre de sommets de l' arbre de résolution 
IN   
  N2 N  
tous les  
graphes   2  
 2 

alors, en moyenne :

N IN 2N

2 3. 4

3 5.6 8

4 8.5 16

5 12.2 32

10 52.0 102 4

15 149.8 32 768

20 350.6 1 042 576

30 1 342.5 1 073 741 824

40 3 862.9 1 099 511 627 776 > 1012 !

Cette méthode est très efficace.

8.2. BRANCH & BOUND


Soit S un sous-ensemble de variables  x1, , xn  , f une fonction critère, et g une fonction contrainte :

min f  x1, , xn 
g1  x1, , xn   0

g2  x1, , xn   0
x1  domaine

 0
x2   ou xi  ou xi 
 1
etc.

On cherche à diviser par deux le sous-ensemble S.

73 – 92
Attention : il ne s’agit pas de dichotomie ! Il
{S} s’agit plutôt de séparer S d’après une
variable charnière.

xi=0 xi=1
On ne s’intéresse qu’aux solutions pour
lesquelles Si  1 .
{Si=0} {Si=1}
Nota : on peut très bien avoir Si  0   , ce
solution solution qui donne un coup pour rien : S ne sera alors
inintéressante intéressante pas subdivisé.

Au final, on obtient une solution  x1, , xn  qui semble la plus prometteuse. Mais on ignore s’il s’agit réellement
de la meilleure tant que l’ensemble de l’arbre n’a pas été exploré.
Ce n’est donc pas suffisant : il faut trouver dans chaque choix des bornes inférieures B telles que la meilleure
solution dans Bi  0 sera toujours moins bonne que celles pour Bi  1 .

{S}
B

xi=0 xi=1

b  Bi  0
{Si=0} {Si=1}
Bi=0 Bi=1
etc.
Dans ces conditions, trouver B tient
de l’ordre de l’astuce !

 x1, , xn   b

Exercice
Soit :
min  Z  3  x1  7  x2  5  x3  8  x 4  10  x5  4  x6  6  x7  9  x8 
c1 : x1  x2  1

c2 : x3  x4  x5  1

c3 : x5  x6  x7  1
c : x  x  1
 4 7 8
c5 : x2  x4  x6  1

xi  i  1 à 8 

xi  0,1

Méthode : on va modifier les contraintes et les combiner entre elles afin de ne retenir que le meilleur des cas.

Hypothèse 1 : on combine le critère Z avec les contraintes.


Z  3  c1  3  x1  7  x2  5  x3  8  x4  10  x5  4  x6  6  x7  9  x8   3   x1  x2  1
 4  x2  5  x3  8  x4  10  x5  4  x6  6  x7  9  x8  3
On part du résultat obtenu (que l’on renomme Z) et on continue :
Z  5  c2   4  x2  5  x3  8  x4  10  x5  4  x6  6  x7  9  x8  3  5   x3  x4  x5  1
 4  x2  3  x 4  5  x5  4  x6  6  x7  9  x8  8

Z  4  c3   4  x2  3  x 4  5  x5  4  x6  6  x7  9  x8  8   4   x5  x6  x7  1
 4  x2  3  x 4  x5  2  x7  9  x8  12

Z  2  c4   4  x2  3  x4  x5  2  x7  9  x8  12   2   x7  x8  1
 4  x2  3  x 4  x5  7  x8  14

74 – 92
On ne peut en revanche pas utiliser la même méthode avec c5 car il n’y a déjà plus de x6 . On considère donc
que dans le meilleur des cas, on aura 14 :

{S} 14

? ?

Hypothèse 2 : on choisit de prendre à tour de rôle les variables manquantes  x1, x3 , x6 , x7  , de leur affecter une
valeur (0 ou 1), et de voir quelle est la solution la plus prometteuse :
x1  0  c1 : x1  x2  1  0  0  x2  1  0  x2  1
 4  x2  3  x 4  x5  7  x8  14  4  3  x4  x5  7  x8  14
La pénalité augmente de 4.
x1  1  c1 : x1  x2  1  0  1  x2  1  0  x2  0
 4  x2  3  x 4  x5  7  x8  14  0  3  x 4  x5  7  x8  14
Dans ce cas il n’y a pas de pénalité.
En procédant ainsi pour les autres variables, on obtient au final :
x1  0  P1  4
x3  0  P3  3
x6  0  P6  4
x7  0  P7  7
xi  1  Pi  0

Le meilleur des cas apparaît pour la pénalité la plus forte :

{S} 14

x7  1
x7=0 x7=1  c3 : x5  x6  0
 c 4 : x8  0
21 14

Le problème revient donc à minimiser :


min  Z'  4  x2  3  x4  14 
x1  x2  1  0

x3  x4  1  0
x  x  1  0
 2 4

En retenant la troisième contrainte ci-dessus et en appliquant à nouveau l’hypothèse 1 du début ( Z' 3  c ), on


obtient :
min  Z"  x2  17 
x1  x2  1  0

x3  x4  1  0
x  x  1  0
 2 4

En appliquant alors l’hypothèse 2 :


x1  0  P1  1
x3  0  P3  0
x4  0  P4  1
xi  1  Pi  0

75 – 92
On en déduit :

{S} 14
x1  1

 x2  0
  min  Z"  x2  17   min  0  17   17
x7=0 x7=1  x4  1
 x  0
 3
21 14
On obtient alors le résultat final.
x1=0 x1=1
A noter que nous aurions pu prendre indifféremment
x1 ou x 4 car la pénalité est la même : le résultat
18 17
aurait été identique.

Exemple : coloration d’un graphe

Soit un graphe de N sommets et K couleurs. On a alors KN possibilités.

3 2 1

Hypothèse de départ :

2
 1
 2 etc.
couleur
sommet 1
2
sommet
couleur 1
2
5 4

Considérons d’abord le problème avec une approche backtracking…

{S}

1 2
Avec K=2, on obtient un résultat mais pas un arbre
entier (faute de couleurs) : il est en effet impossible de
déterminer une couleur pour les sommets 3, 4, et5.
12 21

121 212

{S} Avec K=3, on a alors 35 possibilités.


Mais sur ces 243 possibilités, il n’y a qu’une douzaine de
solutions intéressantes.
1 2 3

Il faut donc minimiser le problème :


12132 21231 31231 N K
min   cnk  xnk 
n1 k 1


  xnk   1 n  1 à N
12312 21321 31321

k

13123 23123 32132 x  1 si la couleur k est donnée au sommet n
 nk
xnk  0 sin on
13213 23213 32312

Les xnk sont tels que G  X,U est colorié

On remarque ainsi que plus le graphe est connexe (i.e. plus le graphe ressemble à une clique), plus le nombre
de couleurs se rapproche du nombre de sommets.
De la même manière, on montre que pour un graphe à arêtes de taille quelconque, le nombre moyen de nœuds
dans l’arbre des solutions pour le problème de coloration d’un graphe vaut 197.
Conclusion : résoudre ce problème avec la méthode du Bound & Branch est difficile, voire impossible.

76 – 92
Exemple : voyageur de commerce

A F

On cherche à minimiser le problème :


min  cij  xij 
i j
B E
avec la méthode du Branch & Bound

C D

Il n’est pas utile de s’intéresser au réseau. Seuls les coûts (=distances) sont utilisables :
A B C D E F

A  27 43 16 30 26

B 7  16 1 30 25

C 20 13  35 5 0

D 21 16 25  18 18

E 12 46 27 28  5

F 23 5 5 9 5 

On a les contraintes suivantes :


1 A
 xij  1

2 6  x ji  0

B F 
  xij  1  j  1 à N
 i

On ne travaille plus alors qu’avec les distances :


le réseau situé entre les points A à F est
définitivement ignoré.
3 5

C E Attention : cette méthode ne garantit pas la


connexité. Pour que le circuit soit connexe, il faut
que :

4 D   xij   1 i  1 à N
i

Hypothèse de départ : on regarde quel est le coût minimal (par ligne) en partant d’un point :
A B C D E F 

A  27 43 16 30 26 16

B 7  16 1 30 25 1

C 20 13  35 5 0 0

D 21 16 25  18 18 16

E 12 46 27 28  5 5

F 23 5 5 9 5  5

 43

77 – 92
On peut supposer que CF=0 sera solution mais nous ne pouvons en être certain.
Si on ré-écrit la table des coûts :
A B C D E F

A-16  11 27 0 14 10

B-1 6  15 0 29 24

C-0 20 13  35 5 0

D-16 5 0 9  2 2

E-5 7 41 22 23  0

F-5 18 0 0 4 0 

Seconde hypothèse : on remarque que seule la première colonne ne comporte pas de zéro. On fait donc en
sorte que colonne comporte au moins un zéro :
A-5 B C D E F

A-16  11 27 0 14 10

B-1 1  15 0 29 24

C-0 15 13  35 5 0

D-16 0 0 9  2 2

E-5 2 41 22 23  0

F-5 13 0 0 4 0 

Puis on cumule le total retiré de la première hypothèse (43) avec celui de la seconde (5). On obtient alors notre
valeur charnière racine : 48.

Troisième hypothèse : on considère maintenant les solutions les moins coûteuses (par ligne). On remarque que
si il y a un arc entre les deux points, le coût est nul (cas des zéros). En revanche, s’il n’y a pas d’arc immédiat,
il faudra alors prendre un chemin détourné dans le réseau pour aller d’un point à un autre.

Exemple : première ligne : de A vers D.

Dans ce cas, nous avons le choix de passer


directement de A vers D :
A D
Coût=0
ou de « faire le tour » :
Coût=10
(le coût immédiatement supérieur).

On en déduit le coût pour chaque « voyage » :


Arc Arc
Voyage A-5 B C D E F
présent absent

A-16 AD  11 27 0 14 10 0 10

B-1 BD 1  15 0 29 24 0 1

C-0 CF 15 13  35 5 0 0 5

D-16 DA 0 0 9  2 2 0 1

D-16 DB 0 0 9  2 2 0 0

E-5 EF 2 41 22 23  0 0 2

F-5 FB 13 0 0 4 0  0 0

F-5 FC 13 0 0 4 0  0 9

F-5 FE 13 0 0 4 0  0 2

78 – 92
48 On élimine alors la ligne A et la colonne D.

La colonne D éliminée, il n’y a alors plus de zéro


AD (+10) AD (+0) sur la ligne B. On résout cela de manière à en
avoir un de nouveau.

58 48 Puis on en déduit les nouvelles solutions de


moindre coût pour chaque voyage…

Arc Arc
Voyage A-5 B C D E F
présent absent

A-16 AD  11 27 0 14 10

B-1-1 BA 0  14 0 28 23 0 14+2=16

C-0 CF 15 13  35 5 0 0 5

D-16 DA 0 0 9  2 2

D-16 DB 0 0 9  2 2 0 2

E-5 EF 2 41 22 23  0 0 2

F-5 FB 13 0 0 4 0  0 0

F-5 FC 13 0 0 4 0  0 9

F-5 FE 13 0 0 4 0  0 2

Nota : AD étant éliminé, DA l’est également.

48
La variable de décision devient alors BA
AD (+10) AD (+0) On élimine alors la ligne B.

58 48+1
Etc.
BA (+16) BA (+0)
Nota : le sommet ayant pour valeur 48 se voit
65 49 infligé une pénalité de 1 provenant du fait que
nous avons soustrait celle-ci pour la ligne B.

Finalement :
48

AD AD

58 49

BA BA
D’où :
65 51

A D C
EF EF
63
73 56
B F E
FB FB

64 63

DC ou CE

79 – 92
Attention : ce n’est pas vraiment fini. En effet, il nous faut maintenant vérifier le pire cas :
48

AD AD
On s’aperçoit alors qu’il est inutile de continuer
58 49 au-delà car nous avons déjà 63 au second
niveau.
FC FC

67 63

La première solution trouvée est donc l’une des meilleures. Pour être absolument certain qu’il s’agisse de la
meilleure de toutes, il faudrait parcourir l’arbre entièrement, ce qui est relativement long : il y a 230 solutions

 
3
finales (  210  109 ).

8.3. PROGRAMMATION DYNAMIQUE


A l’inverse des deux méthodes citées précédemment, celle-ci nécessite que le problème soit séparable au
préalable (ce qui la rend applicable à tous les problèmes de sac à dos).

Par exemple :
Pour que le problème soit séparable, il faut que
Variables de décision : xk k 1àK la fonction puisse s’écrire :

min f  x1, , xk 
K
f  x1, , xk     fk  xk  
g1  x1, , xk   0 k 1

Problème : g2  x1, , xk   5 et que les contraintes s’expriment sous la
 forme :
g3  x1, , xk  
 K
etc. gi  x1, , xk    gik  xk  i 1àm
k 1

Ainsi, les étapes symbolisent les séparations, et les états les contraintes :

A
l1 > l min
C
On considère le chemin de longueur
minimale de proche en proche.
l min
B ?

l2 > l min

Exemple : sac à dos


Soit un sac à dos pouvant supporter au maximum une masse de 12 kg. On souhaite le charger avec des
aliments plusieurs catégories (I, II, et III), sachant que chaque aliment a deux critères : masse et valeur
énergétique.
Catégorie d’aliment k I II III

Masse unitaire P (kg) 7 5 2

Quantité disponible x 4 3 4

Valeur énergétique V 15 10 4

80 – 92
Cela revient donc à :
3
max   Vk  xk 
k 1
 3

 Pk  xk   Pmax
k 1

Nous allons prendre l’hypothèse suivante :

Vk xk On cherche Vk max pour Pmax .


Pk

Ce qui donne si on ne considère que les aliments de catégorie I :

0 x1=0 0

0 0

x1=1 15

x1=2 30
impossible : > Pmax 14 !

En considérant les aliments de catégorie I et II, on obtient :

0 x1=0 0 x2=0 0

0 0 0

x2=1 10

x2=2 20

10

x1=1 15

x2=0 15

x2=1 25

12

81 – 92
Enfin, en considérant toutes les catégories d’aliment :

0 x1=0 0 x2=0 0 x3=0 0


0 0 0 0
N’oublions pas que l’on cherche :
Vk max par rapport à Pmax .
4
x3=1
2 On en déduit l’arbre simplifié suivant :
8
x3=2
4 0 0 0 0
x1=0 x2=0 x3=0
0 0 0 0
x3=3 10
6 4
x3=1
2
x3=4 12
8 8
x3=2
4

x2=1 10
5 x3=3 10
6

x3=0 10 x2=1 10
5 5

x3=1 14 x3=0 10
7 5

18 x3=1 14
x3=2
9 7

22 x3=2 18
x3=3
11 9

x2=2 20

20 10
x2=2
10
x3=0 20
10
x3=0 20
x1=1 15
10
7 x3=1 24
12
x1=1 15 x3=1 24
x2=0 15
7 12
7

x2=0 15
x3=0 15
7
7

x3=0 15
x2=1 25 x3=0 25
7
12 12

x3=1 19
9
Nous pouvons alors observer la solution optimale :
x3=2 23
11 x1  1

x2  1
x2=1 25 x3=0 25 x  0
12 12
 3

L’intérêt principal de cette méthode est qu’elle n’oblige pas à tout recommencer si des éléments viennent à être
modifiés.

Si on rajoute un quatrième aliment, il suffit juste de calculer les éléments correspondants en partant de x3
dans les branches de l’arbre précédent :
Catégorie d’aliment k I II III IV

Masse unitaire P (kg) 7 5 2 5

Quantité disponible x 4 3 4 1

Valeur énergétique V 15 10 4 20

82 – 92
On obtient alors comme meilleure solution :
x1 1

35 x2 0

12
x3 0
x 1
 4

Il est aussi possible d’envisager de modifier les conditions initiales, à savoir de modifier la masse admissible du
sac à dos.
Si Pmax  10 kg, on obtient alors :

x1 0

30 x2 1

10
x3 0
x 1
 4

De manière générale, cette méthode est particulièrement bien adaptée aux changements (car l’arbre construit
est connexe et sans cycles).

Exercice
Soit plusieurs types d’emplois N pour lesquels la rémunération rij varie en fonction du nombre d’heures
travaillées. La proportion de temps disponible par une semaine vaut T heures au maximum.

Activités j
Rémunération r
1 2 3 4

0 0 0 0 0

1 26 23 16 19
Heures
travaillées 2 39 36 32 36
i
3 48 44 48 47

4 54 49 64 56

Avec :
xij  1 si i heures sont consacrées à l’activité j.

xij  0 sinon.

Le problème revient donc à :


N T
max  rij  xij 
j1 i1

N T
 
 j1 i1
xij  T 

 T


 i1

xij  1 j 1àN


xij  0,1 i1àT j 1àN



Rappel :
 Étapes  séparation
 États  contraintes de capacité

83 – 92
Ainsi :
Pour l’activité 1, on a : Pour l’activité 2 :

Rémunération
0 Activité 1 0 Activité 2 0
0 Activité 1 0
0 0h 0 0h 0
0 0h 0

Nombre 26 26
d'heures 26
travaillées 1h 1 0h 0
1h 1

39 49
39
2h 2 1h 1
2h 2

48 62
48
3h 3 3h 3 1h 1

54 54 75

4h 4 4h 4 2h 2

Le schéma suivant s’explique par les optimisations suivantes : lorsque l’on ajoute une heure d’activité
supplémentaire, on considère le meilleur rapport rémunération/heure. Il en résulte l’abandon d’options qui
seraient, dans tous les cas ultérieurs, moins rentables. Cette méthode a donc l’avantage d’éviter des calculs
inutiles.

Il en résulte au final :

0 Activité 1 0 Activité 2 0 Activité 3 0 Activité 4 0


0 0h 0 0h 0 0h 0 0h 0
Avec :
26 26 26 26
1h 1 0h 0 0h 0 0h 0 i  1 à 4
xij  0 
j  1 à 4
39 49 49 49
2h 2 1h 1 0h 0 0h 0
x11 1

48 62 65 68 x12 1
sauf : 
3h 3 1h 1 1h 1 1h 1 x03 1
x 1
 24
54 75 81 85
4h 4 2h 2 2h 2 2h 2

La programmation dynamique fournit une « loi de commande » pour réagir à des perturbations. Cela implique
la construction du meilleur arbre depuis la solution optimale.
Ainsi, en cas de perturbation, il suffit de translater la condition devenue invalide vers la condition valide la plus
proche pour revenir dans la configuration du meilleur cas possible :

Début Fin

Attention : si le problème posé contient un nombre d’états par étape exponentiel, la programmation dynamique
devient inopérante.

84 – 92
9. METHODES HEURISTIQUES
D’OPTIMISATION COMBINATOIRE

9.1. DEFINITION
Ce sont des méthodes de résolution en temps polynomial d’un problème qui donne en général de « bonnes »
solutions et qui met en œuvre un principe d’optimisation partiel, local, etc.
Ces méthodes servent donc à résoudre des problèmes difficiles.

Nota : certaines méthodes exactes s’en rapprochent par leur principe. A cause de cela, les méthodes
heuristiques sont surnommées « myopes » (= « greedy »).

Une méthode myope permet donc la construction pas à pas de la solution globale en prenant à chaque fois la
décision locale optimale.

Exemple : sac à dos


Le problème est le suivant :
N
max  ri  xi 
i1
N

  ci  xi 
 i1

 0
xi  1
 

ri
Par exemple, on peut considérer le rapport comme étant la valeur massique, laquelle est optimale quand ri
ci
est maximal et ci est minimal. Alors :

r1 r r
 2  n
c1 c2 cn
c1  C  OUI : x1  1 NON : x1  0
 c2  C  c1  x1  OUI : x2  1 NON : x2  0
 etc. N fois 

Avec cette méthode, on ne revient jamais en arrière.

9.2. STRUCTURES D’INDEPENDANCE


Les méthodes myopes sont optimales lorsque le problème est muni d’une structure d’indépendance.

Exemple : algorithme de Kruskal


Soit un graphe connexe orienté pondéré. On cherche à trouver un arbre maximal de poids minimal.

85 – 92
Cela implique le rangement des arcs par poids croissant. Puis on rajoute dans l’ordre les arcs tant qu’on ne fait
pas de cycle ou de circuit jusqu’à l’obtention de la solution optimale.

9.2.1. SYSTEME D’INDEPENDANCE


E  1, ,n
F  P E  : famille de sous-ensemble de E

Propriété de mono-tonicité : si S1  S2 et S2  F , alors : S1  F .

E,F  constitue un système d’indépendance.

Exemple 1

2
E  1,2,3, 4,5



1,2,3 1,2 1 
 1,2, 4 1,3 2
 
F  1,2,3, 4 , 1,2,5 , 1, 4 , 3
 
 1,3, 4 1,5 4
 
   5  1 3 5

 1,2, 4  f : 1,2  1,2, 4  1,2  F

Quelque soit la sous-clique d’une clique d’un


graphe, cela reste une clique.
4

Exemple 2
max  8  x1  50  x2  15  x3  17  x4  20  x5  10  x6  5  x7 
14  x1  70  x2  92  x3  70  x4  86  x6  47  x7  250

 0
x1  1 i1à7
 

E  1,2,3, 4,5,6,7
Sk  1,2,3

F : ensemble des solutions admissibles


 Sh  1,2  Sk  Sh  F

9.2.2. MATROÏDE
Un système d’indépendance E,F  est un matroïde si et seulement si :

  F
S1
  S1 et S2  F : S1  S2  1  s tel que : S2  s  F
S2

86 – 92
Exemple

Soit c : E  une fonction objectif.
Soit E,F  un matroïde.

 
La résolution du problème : max c  s  , s  F par une méthode myope conduit à la solution optimale.

Algorithme général
Début
Ordonner les éléments de E de façon à ce que : c  s1   c  s2     c  sn   0

S
Pour i  1 à n faire :

Si S  si   F , alors : S  S  si 


Écrire S, c  s  
Fin

9.3. SCHEMA D’APPROXIMATION


Soient :
P : problème d’optimisation ;
I : instance de P ;
 : réel positif quelconque ;

* : optimal x*(I) ;

H : heuristique xH(I) ;

H est un schéma d’approximation de P si, étant donné I de P et   0 :

xH  I  x*  I    x*  I

Si x  I  0 , alors : x*  I  xH  I  1     x*  I

9.4. PROBLEMES TYPES

9.4.1. TACHES INDEPENDANTES


Soient N tâches de durées  t1, , tN  et M machines identiques travaillant en parallèle. On cherche à affecter les
tâches aux machines de façon à minimiser le temps global de l’exécution TG .

xij  1 si une tâche i est affectée à un machine j.

xij  0 sinon.

87 – 92
M
   xij   1 i 1àN
j1

N
Tj    xij  ti  : durée d’occupation de la machine j
i1


TG  max Tj | j  1 à M
j1 à M

Si TG  Tj , on alors le pire des cas. En effet, il faut TG le plus petit possible.

N
 TG    xij  ti  j 1àM
i1

Le problème se schématise donc de la manière suivante :


min TG
 N
 TG 

 xij  ti  j 1àM
i1
M
 

 xij  1 i 1àN
 j1
0
xij  
1
C’est un problème NP-Complet.

Exemple :

Machines

Note : le résultat ci-dessous est toujours


vrai :
N N
1

M i1
ti  T*   tj 3 t8 t9
  i1
TH

Dans le cas de plusieurs machines : 2 t2 t5


N N
1

M i1
ti  T*   tj
  i1
1 t1 t3 t4
TH
Temps
TG

Machines

On cherche à optimiser :
N
1

M=3
 ti  T* 3
M i1
 
TH

De manière optimale :
TH  T *
1

Temps
TG

On définit l’affectation aléatoire ainsi :


 1
T A   2    T*
 M 

88 – 92
Soit t0 la tâche au temps zéro. Il faut  t0  TG  le plus petit possible.

On a donc l’heuristique LPT (Longest Processing Time) :


1. On range les tâches par durée décroissante ;
2. On affecte la tâche suivante à la machine la moins chargée en temps.

Application numérique de l’exemple :

M3 Machines
N  11
 t1, , t11   5, 4, 4, 4, 4,3,3,2,2,2,1
TG  34
3 t3 t5 t9 t11

En appliquant l’heuristique LPT, on obtient


la solution ci-contre.
2 t2 t4 t8 t10

Est-elle optimale ? Oui car :


1 N  1 t1 t6 t7
34
  
 M i1
 ti   T*


3
 12
Temps
0
1 5 10 12

On démontre ainsi que :


1 1 
 I: T *  TLPT  T *    
3 3M

Attention : l’heuristique LPT n’est pas un schéma d’approximation, bien que cela y ressemble.

Dans le pire des cas :


T*
T*  TLPT 
3

Ainsi, pour M machines : N  2  M  1 tâches.


 i  1
ti  2  M    i  1 à 2 M  1 1 
  2   TLPT  T*  1   
t  3 3M
 2M1  M

LPT
TM

La formule encadrée précédemment ne


permet toutefois pas d’optimiser le nombre
de machines.

Ainsi, si :

LPT  1 1 
TM  T *  1   
 3 3M

Attention : les machines elles-mêmes ayant un coût, on ne peut prendre non plus une infinité d’entre elles.

La dualité de ce problème nous amène à considérer la question suivante : « combien doit-on avoir de machines
sachant que le travail doit être fait en un temps imparti limité ? ».

89 – 92
9.4.2. BIN PACKING
Soient N tâches à effectuer en un temps T. On a à disposition un nombre illimité de machines. Il faut trouver le
nombre minimal de machines nécessaire à l’exécution des N tâches en T unités de temps.
xij  1 si la tâche i est affectée à la machine j

xij  0 sinon

y j  1 si la machine j est utilisée

y j  0 sinon

j  1, , J

D’où :
J
min  yj
j1

N

 i1

xij  ti  T  y j j1àJ
 J
 

 xij  1 i 1àN
 j1
Bien que les variables soient séparables, le problème posé est de nature exponentielle. Par conséquent, la
méthode exacte de programmation dynamique n’est d’aucun recours ici.

Si on prend un exemple numérique pour 4 machines :

T 4
N5
 t1, , t5   3,3,2,2,2 Machines
4

La solution trouvée est- t4


elle optimale ?

Peut-être… En effet, on
ignore ici si certaines t1 t2
tâches n’auraient pas pu t3 t5
être décomposées plus
encore afin d’optimiser
le remplissage ci-contre. 0

On démontre par l’heuristique suivant que :


 si on ordonne les tâches par durées décroissantes,
 si on affecte en premier les tâches les plus longues,
 si on essaye d’utiliser le reste des machines déjà en présence,
11 *
 alors : MH  M  4
9

90 – 92
9.4.3. COLORIAGE DES SOMMETS D’UN GRAPHE
Nota : on part d’une méthode exacte vers une heuristique.

Méthode exacte : algorithme de Zikov


Soient deux sommets u et v non adjacents d’un graphe G. On cherche à trouver le plus petit nombre
chromatique X  G de ce graphe. Il est possible de procéder soit par addition d’arêtes : on obtient alors un


nouveau graphe G1 (pour lequel on obtient le nombre chromatique X uv  G ), soit par condensation du 

sommet v dans u : G2 (et respectivement X uv  G . On a alors : 
   
X  G   min X uv  G  , X uv  G  

Cette solution permet de ne pas perdre l’information sur le nombre chromatique tout en progressant vers la
solution.
G1 : addition d'arêtes

v
G
v
u
v

G2 : condensation de v dans u
Nota : le nombre chromatique d’une clique correspond à son nombre de sommets. Ainsi, en recherchant la
clique minimale, on obtient le nombre chromatique minimal.
Par exemple :

Etc.

Clique à 3 couleurs

Clique à 5 couleurs

On conserve la plus petite possibilité sur l’ensemble des solutions trouvées.

91 – 92
Heuristique inspirée de l’algorithme de Zikov
On recherche la solution du coté le plus prometteur. De manière générale, la meilleure solution est associée
aux condensations.
Le nombre de possibilités envisageables est donc divisé par deux à chaque étape.

Soient les classes d’heuristiques suivantes :


Méthode Temps polynomial Réponse correcte

Monte-Carlo Toujours Presque toujours

Las Vegas Presque toujours Toujours

Soit :
S  e1, , en

S1,  ,Sk   S
 
r éléments

 k  2r 2
et deux couleurs : V ou F.

Le problème consiste à colorer tous les éléments de S en l’une ou l’autre couleur de façon à ce que dans les
Si  i1,  ,ir  i  1 à k  , il y ait au moins un élément de chaque couleur.

Soit la procédure de coloration suivante :


1
rand  j   V  F  avec : p 
2
C ij  1 si rand ij  V
C ij  2 si rand ij  F

(1 et 2 étant les couleurs)

Soit Xi le nombre d’éléments de Si de couleur 1. Alors :

p  Xi  m  Crm  2m 0  m  r 
où 2m est une distribution polynomiale.

Ainsi, la probabilité d’avoir les r éléments de Si colorés par la couleur 1 vaut :


r r
 1 r 1 r
1    2   2
 2 2
Cela ne marche pas si l’un des Si a tous les éléments colorés de la même couleur.

La probabilité d’échec vaut :


k k k
 P  Xi  0  P  Xi  r     P  Xi  0  P  Xi  r     2 2r  2  k  2r  k  21r
i1 i1 i1

car les deux probabilités ont la même valeur (à ne pas confondre avec la couleur). On en déduit :
1
Pe  2r 2  21r  21 
2

1
Sur k  r possibilités de coloration, on montre que Pe  . C’est donc la procédure du type Monte-Carlo qui
2
l’emporte presque toujours.

92 – 92

Vous aimerez peut-être aussi