ALGORITHMIQUE DES GRAPHES

                         Jean-Michel H´lary
                                       e
                                     1
                              IFSIC

                             Cours C66
                             Juin 2004




1. c IFSIC 2004
2




    c IFSIC 2004
Table des mati`res
              e

1 Introduction, exemples                                                                                                                        9
  1.1 Historique . . . . . . . . . . . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
  1.2 Relations graphes et informatique . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
  1.3 Exemples . . . . . . . . . . . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10
       1.3.1 Le probl`me du chou, de la ch`vre et du loup .
                       e                       e                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10
       1.3.2 Blocage mutuel dans un partage de ressources .                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
       1.3.3 Fiabilit´ dans les r´seaux . . . . . . . . . . . .
                     e            e                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12

2 Graphes : un mod`le math´matique
                     e         e                                                                                                               15
  2.1 D´finitions math´matiques et notations .
        e              e                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
      2.1.1 L’objet math´matique . . . . . . .
                          e                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
             2.1.1.1 Vision ensembliste . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
             2.1.1.2 Vision fonctionnelle . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
             2.1.1.3 Vision relationnelle . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
      2.1.2 Vocabulaire . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
      2.1.3 Propri´t´s de graphes . . . . . . .
                    ee                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
  2.2 Notion de chemin . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
  2.3 Repr´sentations de l’objet math´matique
           e                          e                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19

3 Aspect algorithmique : un type de donn´es abstrait
                                                 e                                                                                             21
  3.1 Les sommets et les arcs . . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
      3.1.1 Le type Sommet . . . . . . . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
      3.1.2 Le type Arc . . . . . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
  3.2 Trois exemples de repr´sentation concr`te . . . . . . .
                             e                 e                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
      3.2.1 Repr´sentation par tableaux . . . . . . . . . . .
                  e                                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
      3.2.2 Repr´sentation par tableaux et listes . . . . . .
                  e                                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
      3.2.3 Repr´sentation d´centralis´e par listes . . . . .
                  e            e         e                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
  3.3 Le type abstrait Graphe : les m´thodes . . . . . . . . .
                                      e                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
  3.4 Notations . . . . . . . . . . . . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26

4 Relations et op´rateurs entre
                  e                    graphes                                                     29
  4.1 Relation d’ordre . . . . . .     . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
  4.2 Union . . . . . . . . . . . .    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
  4.3 Composition . . . . . . . .      . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

                                            c IFSIC 2004
4                                                                                                           `
                                                                                              TABLE DES MATIERES

          4.3.1  D´finition . . . . . . . . . . . .
                   e                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
          4.3.2  Algorithme . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
                 4.3.2.1 Analyse . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
                 4.3.2.2 Texte de l’algorithme        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
          4.3.3 Complexit´ . . . . . . . . . . .
                            e                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
    4.4   Puissances d’un graphe . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
    4.5   Graphe transpos´ . . . . . . . . . . . .
                          e                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
    4.6   Sous-graphe . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34

5 Fermeture transitive                                                                                                                                37
  5.1 Retour sur la transitivit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                               e                                                                                                                  .   37
  5.2 Caract´risation du graphe G+ . . . . . . . . . . . . . . . . . . . . . . . . . . . .
             e                                                                                                                                    .   38
  5.3 Algorithme des puissances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                       .   40
      5.3.1 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                         .   40
      5.3.2 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                        e                                                                                                                         .   41
  5.4 Algorithme de Roy-Warshall . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                            .   41
      5.4.1 Principe de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                        .   41
      5.4.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                         .   43
      5.4.3 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                        e                                                                                                                         .   43
      5.4.4 Routage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                       .   44
              5.4.4.1 D´finition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                         e                                                                                                                        .   44
              5.4.4.2 Construction des routages par l’algorithme de Roy-Warshall                                                                  .   46
              5.4.4.3 Exemple d’ex´cution . . . . . . . . . . . . . . . . . . . . . . . .
                                      e                                                                                                           .   47
              5.4.4.4 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                        .   48
  5.5 τ -minimalit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                   e                                                                                                                              .   49

6 M´thodes d’exploration
     e                                                                                                                                                51
  6.1 D´veloppement arborescent issu d’un sommet donn´ . . . .
         e                                                   e                                        .   .   .   .   .   .   .   .   .   .   .   .   51
  6.2 Exploration de la descendance de x . . . . . . . . . . . . . .                                  .   .   .   .   .   .   .   .   .   .   .   .   53
       6.2.1 Sp´cification du r´sultat . . . . . . . . . . . . . . . .
                 e             e                                                                      .   .   .   .   .   .   .   .   .   .   .   .   53
       6.2.2 Principe des m´thodes d’exploration . . . . . . . . .
                             e                                                                        .   .   .   .   .   .   .   .   .   .   .   .   53
       6.2.3 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . .                               .   .   .   .   .   .   .   .   .   .   .   .   55
       6.2.4 Texte de l’algorithme g´n´ral d’exploration . . . . .
                                      e e                                                             .   .   .   .   .   .   .   .   .   .   .   .   56
       6.2.5 Complexit´ . . . . . . . . . . . . . . . . . . . . . . .
                        e                                                                             .   .   .   .   .   .   .   .   .   .   .   .   56
  6.3 Strat´gies d’exploration particuli`res : largeur et profondeur
            e                           e                                                             .   .   .   .   .   .   .   .   .   .   .   .   56
       6.3.1 Exploration en largeur d’abord . . . . . . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   58
              6.3.1.1 Une structure de donn´es : la file . . . . . .
                                                e                                                     .   .   .   .   .   .   .   .   .   .   .   .   58
              6.3.1.2 Texte de l’algorithme . . . . . . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   58
              6.3.1.3 Exemple d’ex´cution . . . . . . . . . . . . .
                                     e                                                                .   .   .   .   .   .   .   .   .   .   .   .   58
       6.3.2 Recherche en profondeur d’abord . . . . . . . . . . .                                    .   .   .   .   .   .   .   .   .   .   .   .   59
              6.3.2.1 Une structure de donn´es : la pile . . . . .
                                                e                                                     .   .   .   .   .   .   .   .   .   .   .   .   59
              6.3.2.2 Texte de l’algorithme . . . . . . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   60
              6.3.2.3 Exemple d’ex´cution . . . . . . . . . . . . .
                                     e                                                                .   .   .   .   .   .   .   .   .   .   .   .   60
  6.4 Exemple d’application : calcul de l’ensemble des descendants                                    .   .   .   .   .   .   .   .   .   .   .   .   62

                                              c IFSIC 2004
`
TABLE DES MATIERES                                                                                                          5

          6.4.1 Cas de la recherche en largeur . . . . . . . . .   . . . . . .     .   .   .   .   .   .   .   .   .   .   63
          6.4.2 Cas de la recherche en profondeur : expression     r´cursive
                                                                    e              .   .   .   .   .   .   .   .   .   .   63
    6.5   ´
          Enum´ration des chemins ´l´mentaires issus de x . .
               e                   ee                              . . . . . .     .   .   .   .   .   .   .   .   .   .   64
          6.5.1 Algorithmes gloutons et non gloutons . . . .       . . . . . .     .   .   .   .   .   .   .   .   .   .   66

7 Circuits. Composantes fortement connexes                                                                                 71
  7.1 D´termination de l’existence de circuits . . . . . . . . . . .
        e                                                                  .   .   .   .   .   .   .   .   .   .   .   .   71
      7.1.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   71
      7.1.2 Algorithme de Marimont . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   72
             7.1.2.1 Analyse . . . . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   72
             7.1.2.2 Texte de l’algorithme . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   72
             7.1.2.3 Complexit´ . . . . . . . . . . . . . . . . . .
                                 e                                         .   .   .   .   .   .   .   .   .   .   .   .   73
  7.2 Application des graphes sans circuit : fonction ordinale . . .       .   .   .   .   .   .   .   .   .   .   .   .   74
  7.3 Application : fermeture anti-transitive et τ -minimalit´ . . .
                                                              e            .   .   .   .   .   .   .   .   .   .   .   .   77
  7.4 Composantes fortement connexes . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   81
      7.4.1 D´finition . . . . . . . . . . . . . . . . . . . . . . . .
                e                                                          .   .   .   .   .   .   .   .   .   .   .   .   81
      7.4.2 Algorithme de FOULKES . . . . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   83
             7.4.2.1 Principe . . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   83
             7.4.2.2 Texte de l’algorithme . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   84
             7.4.2.3 Complexit´ . . . . . . . . . . . . . . . . . .
                                 e                                         .   .   .   .   .   .   .   .   .   .   .   .   84
      7.4.3 Algorithme descendants-ascendants . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   85
             7.4.3.1 Principe . . . . . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   85
             7.4.3.2 Texte de l’algorithme . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   85
             7.4.3.3 Complexit´ . . . . . . . . . . . . . . . . . .
                                 e                                         .   .   .   .   .   .   .   .   .   .   .   .   85
      7.4.4 Algorithme de TARJAN . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   87
             7.4.4.1 Principe de l’algorithme de TARJAN . . .              .   .   .   .   .   .   .   .   .   .   .   .   87
             7.4.4.2 Exemple . . . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   88
             7.4.4.3 Mise en œuvre et texte de l’algorithme . .            .   .   .   .   .   .   .   .   .   .   .   .   90
             7.4.4.4 Complexit´ . . . . . . . . . . . . . . . . .
                                 e                                         .   .   .   .   .   .   .   .   .   .   .   .   93
      7.4.5 Applications . . . . . . . . . . . . . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   93
             7.4.5.1    Recherche d’un graphe minimal dans τ (G)           .   .   .   .   .   .   .   .   .   .   .   .   93
             7.4.5.2    Calcul rapide de la fermeture transitive . .       .   .   .   .   .   .   .   .   .   .   .   .   94

8    Chemins de valeur optimale                                                                                             97
    8.1 D´finitions et probl`mes pos´s . . . . . . . . . . . . . . . . . .
           e               e        e                                              .   .   .   .   .   .   .   .   .   .    97
    8.2 Chemins de valeur additive minimale issus d’un sommet donn´       e        .   .   .   .   .   .   .   .   .   .    99
        8.2.1 Existence . . . . . . . . . . . . . . . . . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .    99
        8.2.2 Caract´risation . . . . . . . . . . . . . . . . . . . . . . .
                     e                                                             .   .   .   .   .   .   .   .   .   .   100
    8.3 Algorithme de FORD : exploration . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   102
        8.3.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   102
        8.3.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   104
        8.3.3 Une heuristique d’am´lioration . . . . . . . . . . . . . .
                                     e                                             .   .   .   .   .   .   .   .   .   .   106
    8.4 Algorithme de BELLMANN-KALABA . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   106
        8.4.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   106

                                            c IFSIC 2004
6                                                                                             `
                                                                                TABLE DES MATIERES

          8.4.2 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
          8.4.3 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
          8.4.4 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
          8.4.5 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
                            e
          8.4.6 Acc´l´ration de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . 110
                      ee
    8.5    Cas des arcs de valeur positive ou nulle : algorithme de DIJKSTRA . . . . . . . 112
          8.5.1 Principe de l’algorithme de DIJKSTRA . . . . . . . . . . . . . . . . . . . 113
          8.5.2 Analyse de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
          8.5.3 Exemple d’ex´cution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
                                e
          8.5.4 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
          8.5.5 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
          8.5.6 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
                            e
    8.6    Cas des graphes sans circuit : algorithme ORDINAL . . . . . . . . . . . . . . . . 118
          8.6.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
          8.6.2 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
          8.6.3 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
          8.6.4 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
          8.6.5 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
                            e
          8.6.6 Adaptations et am´liorations . . . . . . . . . . . . . . . . . . . . . . . . . 122
                                    e
                 8.6.6.1 Calcul progressif des attributs . . . . . . . . . . . . . . . . . . . 122
                 8.6.6.2 Mise ` jour de l’ensemble des points d’entr´e . . . . . . . . . . . 122
                                 a                                      e
                 8.6.6.3 Nouvelle version de l’algorithme . . . . . . . . . . . . . . . . . . 123
                 8.6.6.4   G´n´ralisation au cas o` 1 n’est pas n´cessairement point d’entr´e124
                             e e                    u              e                            e
    8.7    Valeurs optimales de tout sommet ` tout sommet . . . . . . . . . . . . . . . . . 124
                                               a
          8.7.1 De la fermeture transitive aux valeurs optimales . . . . . . . . . . . . . . 124
          8.7.2 Transformation de l’algorithme des puissances . . . . . . . . . . . . . . . . 124
          8.7.3 Transformation de l’algorithme de Roy-Warshall . . . . . . . . . . . . 126
    8.8    Alg`bres de chemins : transformations d’algorithmes . . . . . . . . . . . . . . . . 128
               e

9     Probl`mes d’ordonnancement
            e                                                                                                                           135
    9.1   Nature des probl`mes . . . . . . . . . . . . . . . . . . . .
                           e                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   135
    9.2   Mod´lisation ` l’aide de graphe . . . . . . . . . . . . . .
              e        a                                                            .   .   .   .   .   .   .   .   .   .   .   .   .   136
        9.2.1    graphe potentiel-tˆche . . . . . . . . . . . . . . .
                                    a                                               .   .   .   .   .   .   .   .   .   .   .   .   .   136
        9.2.2    Exemple . . . . . . . . . . . . . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   137
    9.3   Ordonnancements particuliers; chemin critique; marges.                    .   .   .   .   .   .   .   .   .   .   .   .   .   138
    9.4   Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   140
    9.5   Choix des algorithmes de r´solution . . . . . . . . . . . .
                                      e                                             .   .   .   .   .   .   .   .   .   .   .   .   .   140
    9.6   ´
          Elimination de contraintes redondantes . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   142

10 Arbres ; arbre partiel de poids optimum                                                                                              145
   10.1 D´finition et propri´t´s caract´ristiques . . . . .
          e                ee          e                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   145
   10.2 Arbres partiels dans un graphe non orient´ valu´
                                                     e     e    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   147
   10.3 Algorithme de KRUSKAL . . . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   149
        10.3.1 Principe . . . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   149

                                              c IFSIC 2004
`
TABLE DES MATIERES                                                                                                                                    7

        10.3.2 Texte de l’algorithme . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   150
        10.3.3 Exemple . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   151
        10.3.4 Complexit´ . . . . . . . . . . .
                          e                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   151
   10.4 Algorithme de PRIM . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   152
        10.4.1 Principe de l’algorithme . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   152
        10.4.2 Mise en œuvre de l’algorithme        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   153
        10.4.3 Texte de l’algorithme . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   154
        10.4.4 Exemple . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   154

11 Flots dans un r´seau de transport
                     e                                                                                                                              157
   11.1 Exemple introductif . . . . . . . . . . . . . . . . . . . . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   157
   11.2 D´finitions et propri´t´s g´n´rales . . . . . . . . . . . . . .
          e                  ee e e                                                             .   .   .   .   .   .   .   .   .   .   .   .   .   158
   11.3 Recherche d’un flot compatible de valeur maximum . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   161
        11.3.1 Sch´ma g´n´ral . . . . . . . . . . . . . . . . . . . .
                   e     e e                                                                    .   .   .   .   .   .   .   .   .   .   .   .   .   161
        11.3.2 Marquage . . . . . . . . . . . . . . . . . . . . . . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   162
        11.3.3 Am´lioration . . . . . . . . . . . . . . . . . . . . .
                   e                                                                            .   .   .   .   .   .   .   .   .   .   .   .   .   163
   11.4 Algorithme de Ford-Fulkerson . . . . . . . . . . . . . . . .                            .   .   .   .   .   .   .   .   .   .   .   .   .   165
        11.4.1 Fonction marquage . . . . . . . . . . . . . . . . . .                            .   .   .   .   .   .   .   .   .   .   .   .   .   165
        11.4.2 Proc´dure am´lioration . . . . . . . . . . . . . . .
                     e       e                                                                  .   .   .   .   .   .   .   .   .   .   .   .   .   165
        11.4.3 Algorithme . . . . . . . . . . . . . . . . . . . . . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   166
        11.4.4 Exemple . . . . . . . . . . . . . . . . . . . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   167
        11.4.5 Complexit´ . . . . . . . . . . . . . . . . . . . . . .
                          e                                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   168
   11.5 Cas des r´seaux bi-partis : mise en œuvre par tableaux . .
                 e                                                                              .   .   .   .   .   .   .   .   .   .   .   .   .   168
   11.6 Application: probl`mes de couplage des graphes bi-partis .
                           e                                                                    .   .   .   .   .   .   .   .   .   .   .   .   .   176
        11.6.1 Le probl`me . . . . . . . . . . . . . . . . . . . . . .
                       e                                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   176
        11.6.2 Mod´lisation en r´seau bi-parti . . . . . . . . . . .
                     e           e                                                              .   .   .   .   .   .   .   .   .   .   .   .   .   177
        11.6.3 Exemple: syst`me de repr´sentants distincts . . . .
                             e            e                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   179

A Les op´rations de la classe GRAPHE et leur s´mantique
        e                                     e                                                                                                     181




                                             c IFSIC 2004
8                                `
                   TABLE DES MATIERES




    c IFSIC 2004
Chapitre 1

Introduction, exemples

1.1    Historique
    La th´orie des graphes a pris naissance en 1736 : le math´maticien allemand L. Euler
           e                                                      e
apporta une r´ponse au probl`me que se posaient les habitants de la ville de Koenigsberg ; `
                 e              e                                                                a
savoir :comment traverser les sept ponts de cette ville sans jamais passer deux fois par le mˆme.
                                                                                              e
    Jusqu’en 1946, la th´orie des graphes reste du domaine des math´matiques; les math´maticiens
                        e                                             e                 e
ayant associ´ leurs noms aux travaux les plus marquants sont, entre autres :
               e
    – au 19`me si`cle : Kirchoff, Hamilton, Sylvester, Kempe, Lucas, Petersen, Tarry
             e     e
                    e    e          e                          ¨
    – au 20`me si`cle (1`re moiti´) : Poincare, Sainte-Lague, Kuratowski, Hall, Polya,
             e
         ¨
      Konig, Whitney, Tutte.
Des recherches militaires li´es au conflit mondial de 1939-45 naˆ la Recherche Op´rationnelle
                             e                                     ıt                 e
provoquant un d´veloppement de la th´orie des graphes comme mod`les de probl`mes concrets ;
                   e                    e                               e          e
cet aspect est encore renforc´, dans les ann´es qui suivent, par le d´veloppement des Sciences
                               e              e                         e
´
Economiques et de Gestion. Les grands sp´cialistes de cette nouvelle orientation des graphes
                                              e
                               ¨
seront des auteurs tels que Kuhn, Dantzig, Ford, Fulkerson, Ghouila-Houry, Harary,
Saaty, Bellmann, Roy, Berge, Faure, Kaufmann, etc... Une troisi`me ´poque a ´t´ ou-
                                                                             e   e         ee
verte dans les ann´es 1960, avec le d´veloppement des sciences de l’information et de la commu-
                     e                e
nication. Des informaticiens tels que Dijkstra, Knuth, Wirth, Sakharovitch, Gondran
et beaucoup d’autres, participent au d´veloppement de l’algorithmique des graphes autant qu’`
                                        e                                                        a
la mod´lisation de probl`mes n´s de ces nouvelles sciences en terme de graphes. Une approche
        e                 e       e
historique se trouve dans l’introduction de [GM79], qui renvoie d’ailleurs ` un ouvrage historique
                                                                           a
complet sur la premi`re ´poque de la th´orie des graphes (1746-1936) [BLW76].
                       e e                e


1.2    Relations graphes et informatique
    Les relations entre graphes et informatique sont ` double sens :
                                                       a
   1. l’informatique, outil de r´solution de probl`mes de graphes
                                e                 e
   2. les graphes, outil de mod´lisation de probl`mes informatiques.
                                 e                e
    On aboutit donc, dans certaines situations, ` l’informatique comme outil de r´solution de ses
                                                a                                 e
propres probl`mes (via la mod´lisation en termes de graphes). Ce cours s’int´resse essentiellement
              e                e                                            e

                                            c IFSIC 2004
10                                                                      Introduction, exemples


` la partie 1. Outre la n´cessit´ qu’il y a, pour un informaticien, de connaˆ
a                         e      e                                          ıtre les algorithmes
adapt´s aux principaux types de probl`mes de graphe et la mani`re de les programmer, il faut
      e                                 e                           e
mettre l’accent sur un aspect essentiel : l’´tude des techniques de programmation d’algorithmes
                                            e
de graphe. Cette ´tude est enrichissante par elle- mˆme car elle donne l’occasion d’aborder sur
                  e                                    e
des exemples non triviaux des notions d’algorithmique aussi fondamentales que les structures de
donn´es et l’ad´quation de la repr´sentation au probl`me trait´, les niveaux de programmation
     e          e                  e                     e       e
(types abstraits et mise en oeuvre), la complexit´, etc..
                                                   e
    Cependant la mod´lisation de probl`mes en terme de graphes ne doit pas ˆtre n´glig´e. Nous
                      e                  e                                   e     e    e
donnons dans la section suivante trois exemples de situations– d’origine informatique ou non –
qui se prˆtent ` une telle mod´lisation.
         e     a               e


1.3     Exemples
1.3.1    Le probl`me du chou, de la ch`vre et du loup
                 e                    e
L’´nonc´
   e     e
     Un passeur, disposant d’une barque, doit faire traverser une rivi`re ` un chou, une ch`vre
                                                                      e a                   e
et un loup. Outre le passeur, la barque peut contenir au plus une des trois unit´s qui doivent
                                                                                  e
traverser. D’autre part, pour des raisons de s´curit´, le passeur ne doit jamais laisser seuls la
                                              e     e
ch`vre et le chou, ou le loup et la ch`vre. (Par contre, le loup ne mangera pas le chou... et
   e                                   e
r´ciproquement). Comment le passeur doit-il s’y prendre?
 e

Mod´lisation
      e
    Il s’agit d’une situation tr`s classique d’un syst`me ` ´tats poss´dant un ´tat initial, un ´tat
                                e                     e     ae         e         e               e
final, et des transitions autoris´es. Chaque ´tat se traduit par un sommet, ou point. Chaque
                                   e            e
transition autoris´e d’un ´tat ` un autre se traduit par un arc, allant du premier ´tat vers le
                   e        e     a                                                      e
second. Dans cet exemple, un ´tat est une configuration possible sur la rive de d´part. D´signons
                                e                                                  e        e
par P le passeur, L le loup, X la ch`vre, C le chou. Une configuration sera alors d´sign´e par
                                       e                                                 e    e
l’ensemble des pr´sents sur la rive de d´part. L’´tat initial est PLXC et l’´tat final ∅. Chaque
                   e                        e        e                         e
arc, repr´sentant une transition possible, sera libell´ –pour la clart´ de la mod´lisation– par la
          e                                             e               e          e
description de l’action entreprise (A signifie : aller , R signifie retour. On obtient alors le graphe
suivant :
Probl`mee

    Chaque solution correspond ` un chemin dans le graphe, de PLXC ` ∅ et alternant les ´tiquettes
                                a                                  a                    e
A et R. Un chemin correspond ` une s´quence d’actions enchaˆ
                              a      e                       ınables les unes aux autres (l’´tat
                                                                                              e
initial d’une action est ´gal ` l’´tat final de la pr´c´dente).
                         e    a e                   e e

R´solution
 e

Pour l’instant, ”` la main” (ou ”au pif”, comme on veut !), on trouve deux solutions :
                 a
soit 7 travers´es simples, quelle que soit la solution. Laissons au lecteur le soin de fournir au
              e
passeur, en langage naturel, les explications n´cessaires ` l’accomplissement de sa mission.
                                               e          a

                                             c IFSIC 2004
1.3. Exemples                                                                                     11


                                               PLX              A(PX)                L
                                                                R(PX)
                             A(PX)
                                                  R(PL)                  R(PC)
                        PX
                                                      A(PC)
                                 R(P)
                                                                           A(PL)

 PXLC      A(PX)                               PLC                                   X        ∅
                                                           R(PL)

                                                       A(PL)             A(PC)
                        LC        R(P)
                                               R(PC)

                                                                A(PX)
                                               PXC                               C
                                                                 R(PX)



                                     Fig. 1.1 – graphe des transitions


                                                  L                PLX

 PLXC              LC                PLC                                             X   PX       ∅

                                                  C                PXC

                            Fig. 1.2 – Solution du probl`me des travers´es
                                                        e              e


1.3.2    Blocage mutuel dans un partage de ressources
    3 philosophes chinois A, B, C poss`dent, ` eux trois, trois baguettes R, S, T. Pour manger,
                                        e      a
chacun a besoin de 2 baguettes. Lorsqu’un des philosophes d´sire manger, il requiert deux
                                                                   e
baguettes et ne les lib`re que lorsqu’il a fini son repas 1 . Par contre, tant qu’il n’a pas obtenu
                       e
les deux baguettes, il ne peut rien faire qu’attendre : mˆme s’il a eu la chance d’obtenir une
                                                            e
baguette, il ne la rend pas tant qu’il n’a pas pu aller au bout de son repas.
    Consid´rons alors la situation suivante : les 3 philosophes ont envie de manger exactement
           e
au mˆme moment, et chacun se pr´cipite sur les baguettes... mais chacun n’en obtient qu’une.
      e                             e
Pour fixer les id´es :
                 e


        A poss`de R et requiert S
              e

  1. apr`s les avoir soigneusement lav´es!
        e                             e


                                                 c IFSIC 2004
12                                                                          Introduction, exemples


        B poss`de S et requiert T
              e
        C poss`de T et requiert R
              e

    Bigre ! Il va bien falloir faire preuve de patience... et de philosophie. Ils ne peuvent pas sortir
de ce blocage mutuel, et vont donc mourir de faim, sauf si quelqu’un (c’est-`-dire l’un d’eux,
                                                                                     a
ou un personnage ext´rieur) se rend compte de la situation et intervient autoritairement, par
                         e
exemple en lib´rant de force une des baguettes pour l’attribuer ` un des deux autres.
                 e                                                    a
    Cette situation est un exemple de ce qui peut se passer dans les syst`mes informatiques
                                                                                   e
complexes, o` plusieurs entit´s (processeurs, p´riph´riques,etc.) se partagent des ressources.
               u                   e                 e     e
Les entit´s en question ´tant a priori moins intelligentes que les philosophes chinois, il faut
          e                  e
pallier cette lacune en ´tant capable de d´tecter automatiquement les situations d’interblocage.
                          e                  e
Quel que soit le nombre d’entit´s et de ressources, les configurations de possession/requˆte des
                                     e                                                         e
ressources par les entit´s peuvent ˆtre mod´lis´es par un graphe de la mani`re suivante :
                          e            e        e e                                e
. chaque entit´ est repr´sent´ par un sommet
                e          e    e
. un arc existe, depuis le sommet X vers le sommet Y si X requiert une ressource que poss`de Y.e
Ainsi, dans l’exemple des philosophes et des baguettes, on obtient le graphe dessin´ figure 1.3 :
                                                                                          e
                                   B
                    (S)
                                                        Le libell´ sur l’arc d´signe
                                                                 e            e
           A                           (T)              la ressource demand´e (par
                                                                           e
                                                        l’origine) et poss´d´e (par
                                                                          e e
                                                        l’extr´mit´)
                                                              e e
                    (R)
                                   C

                                   Fig. 1.3 – graphe des attentes

    Un tel graphe est dynamique dans la mesure o` les ressources sont lib´r´es et r´-allou´es au
                                                      u                        ee       e      e
cours du temps. Mais ` chaque instant, il y a un graphe et un seul et de plus, si une situation
                         a
d’interblocage apparaˆ le graphe n’´volue plus. Maintenant, il est clair que l’interblocage entre
                        ıt,           e
plusieurs entit´s se produit si et seulement si les sommets correspondants sont situ´s sur un
                 e                                                                          e
circuit, c’est ` dire un chemin dont l’extr´mit´ co¨
               a                            e    e ıncide avec l’origine. C’est donc un algorithme
de d´tection de circuit qui permettra, ici, de r´soudre le probl`me de d´tection de l’interblocage.
    e                                           e                e         e
    Le probl`me pr´sent´ (interblocage) est un exemple d’un type de situation tr`s courant
              e       e     e                                                             e
mettant en jeu des objets (les entit´s) et des relations entre ces objets (la requˆte d’une ressource
                                    e                                             e
poss´d´e par un autre).
     e e

1.3.3    Fiabilit´ dans les r´seaux
                 e           e
    Un r´seau est un syst`me de communication dans lequel des sites communiquent entre eux
         e                   e
soit directement, soit par l’interm´diaire d’autres sites, en envoyant des messages qui circulent
                                     e
le long de lignes de communication. La repr´sentation de tels r´seaux par des graphes est ici
                                                e                  e
´vidente, les sites et les lignes correspondant trivialement aux sommets et aux arcs. Mais selon
e

                                              c IFSIC 2004
1.3. Exemples                                                                                  13


le genre d’´tudes que l’on souhaite effectuer, le graphe mod´lisant le r´seau devra ˆtre pr´cis´;
           e                                               e           e           e      e e
par exemple :
   – les communications sont-elles uni- ou bidirectionnelles?
   – Un message ´mis parvient-il sˆrement ou de mani`re al´atoire ` destination?
                  e                u                   e      e   a
   – Les lignes de communication peuvent-elles acheminer une quantit´ illimit´e ou non d’in-
                                                                     e        e
     formations par unit´ de temps? (d´bit d’une ligne)
                        e              e

   etc...
   Autant de probl`mes, autant de solutions que l’on cherche ` exprimer en termes d’algorithmes
                   e                                         a
de graphe. A titre d’exemple, nous montrons deux probl`mes li´s ` des ´tudes de fiabilit´.
                                                        e       e a     e                e


                                                   C



                                     A                           B



                                                   D


                                         Fig. 1.4 – r´seau 1
                                                     e

                                         C               F




                            A            D                           B




                                         E                   G


                                         Fig. 1.5 – r´seau 2
                                                     e

Exemple 1. R´sistance aux pannes Dans un r´seau, il peut se produire qu’une ligne de
                 e                                      e
communication soit coup´e, ne transmettant plus aucun message. Il en est de mˆme pour un site
                          e                                                      e
dont la panne peut ˆtre assimil´e ` la coupure de toutes les lignes qui y aboutissent ou qui en
                      e           e a
partent. Supposons que, dans un r´seau, on achemine des informations d’un sommet A vers un
                                     e
sommet B, ´ventuellement via des sites interm´diaires servant de relais. De telles informations
           e                                     e
doivent emprunter des chemins allant de A ` B. Ainsi, une information issue de A parviendra ` B si
                                            a                                                a
et seulement si au moins un chemin est valide (c’est ` dire la s´quence d’arcs qui le constitue ne
                                                       a        e
comporte que des arcs non d´t´rior´s). Le probl`me pos´ est alors le suivant : quel est le nombre
                              ee     e            e       e
maximum de pannes auquel cet acheminement peut r´sister? Autrement dit, quel est le nombre
                                                        e
maximum de chemins ind´pendants existant entre A et B? (deux chemins sont ind´pendants si
                           e                                                          e
et seulement si ils sont disjoints au sens des arcs et des sommets interm´diaires).
                                                                         e

                                              c IFSIC 2004
14                                                                     Introduction, exemples


    Dans le r´seau 1, ce nombre est ´gal ` 2 car, s’il n’y a qu’une panne, quelle que soit sa loca-
              e                        e    a
lisation (site ou ligne) il reste toujours un chemin valide. Par contre il existe des configurations
a
` 2 pannes (lignes AC et DB par exemple) auxquelles l’acheminement ne r´siste pas.
                                                                             e
    Dans le r´seau 2, ce nombre est ´gal ` 3 (sites D, F, G).
              e                        e    a

Exemple 2. Routage de fiabilit´ maximale Dans ce mod`le, chaque ligne (arc) est munie
                                    e                          e
d’une valeur, ´gale ` la probabilit´ qu’un message ´mis ` l’origine parvienne sans alt´ration `
               e     a             e                e    a                            e       a
l’extr´mit´. Un ´metteur A ´met vers un r´cepteur B, plusieurs parcours d’acheminement ´tant
      e    e     e          e              e                                              e
possibles. Si on suppose que les alt´rations des messages sont des ´v`nements ind´pendants, la
                                    e                              e e           e
probabilit´ de non alt´ration le long d’un chemin est donc ´gale au produit des probabilit´s de
           e           e                                    e                             e
chaque arc le constituant. On cherche donc ` d´terminer un routage de fiabilit´ maximale de A `
                                            a e                               e               a
B (c’est ` dire un chemin de A ` B de probabilit´ maximale), repr´sent´ de la mani`re suivante :
         a                     a                e                e     e          e
a
` chaque sommet de ce chemin, on associe le sommet suivant.




                                            c IFSIC 2004
Chapitre 2

Graphes : un mod`le math´matique
                e       e

2.1       D´finitions math´matiques et notations
           e             e
2.1.1     L’objet math´matique
                      e
2.1.1.1    Vision ensembliste


   D´finition 2.1 Un graphe est un doublet G = (X,Γ), o`
    e                                                   u
       X = ensemble –en g´n´ral fini– appel´ ensemble des sommets
                         e e                e
       Γ=ensemble de couples (x,y) ∈ X 2 , appel´ ensemble des arcs.
                                                e

Ainsi, Γ ⊆ X 2 . Par d´finition d’un ensemble, entre deux sommets donn´s il existe au plus un
                       e                                                e
arc; on peut toutefois, dans certains cas, consid´rer des multi-graphes dans lesquels plusieurs
                                                 e
arcs distincts existent entre deux sommets, mais il faut alors adopter une d´finition diff´rente
                                                                            e            e
pour Γ.

Exemple : graphe G1
  X = {1,2,3,4,5,6,7,8,9}

   Γ = {(1,2),(1,3),(2,5),(3,3),(3,4),(3,6),(4,2),(4,5),(5,6),(5,7),(5,8),(6,3),(8,7)}

2.1.1.2    Vision fonctionnelle


   D´finition 2.2 Un graphe est un doublet G = (X,Γ), o`
    e                                                  u
       X = ensemble des sommets
       Γ= fonction de X dans l’ensemble 2X des parties de X.

Ainsi, ` tout sommet x est associ´ l’ensemble Γ(x) ⊆ X. La notation 2X pour d´signer l’ensemble
       a                         e                                           e
des parties de X vient du fait que, si X est de cardinal fini |X|, le nombre de sous-ensembles

                                              c IFSIC 2004
16                                                            Graphes : un mod`le math´matique
                                                                              e       e


(parties) de X est ´gal ` 2|X| . En effet, si X = {x1 ,x2 , . . . ,xn } la construction d’un sous-ensemble
                   e    a
de X revient ` d´cider, pour chaque xi , si cet ´l´ment fait partie ou non du sous-ensemble. Il y a
              a e                                ee
donc n d´cisions binaires ind´pendantes, soit 2 × 2 × . . . × 2 = 2n = 2|X| constructions possibles.
         e                      e

Exemple : graphe G1
  X = {1,2,3,4,5,6,7,8,9}

      Γ(1) = {2,3} ;   Γ(2) = {5} ;        Γ(3) = {3,4,6} ;
      Γ(4) = {2,5} ;   Γ(5) = {6,7,8} ;    Γ(6) = {3} ;
      Γ(7) = ∅ ;       Γ(8) = {7} ;        Γ(9) = ∅

2.1.1.3    Vision relationnelle

    A tout graphe G = (X,Γ) est associ´e une relation binaire R sur X, et r´ciproquement, par
                                      e                                    e
l’´quivalence suivante :
  e

       xRy ⇐⇒ (x,y) ∈ Γ

   Nous verrons ult´rieurement qu’` chaque propri´t´ des relations binaires correspond une
                     e            a              ee
propri´t´ du graphe.
      ee

´
Equivalences et ordres Parmi les relations binaires, celles qui v´rifient les propri´t´s de
                                                                         e                ee
r´flexivit´ et transitivit´ sont particuli`rement importantes. On les appelle des pr´-ordres, car
 e        e              e               e                                           e
elles elles expriment en particulier les relations de classement avec ex-aequo.
Exemple de pr´-ordre Soit E un ensemble d’´l´ments. Chaque ´l´ment x est muni d’une
                   e                                 ee                 ee
estampille enti`re n(x). Il est facile de voir que la relation x ∼ y ⇔ n(x) ≤ n(y) est un pr´-
                 e                                                                             e
ordre. Deux ´l´ments distincts x et y sont ex-aequo si n(x) = n(y). La figure 2.1.a montre le
               ee
graphe d’une telle relation.
    Un pr´-ordre est sp´cialis´ en ´quivalence ou en ordre selon qu’il est sym´trique ou anti-
            e             e    e     e                                            e
sym´trique. Ainsi, la relation d’ex-aequo est une ´quivalence car elle est sym´trique (la figure
     e                                               e                           e
2.1.b en montre le graphe) tandis que la relation x        y ⇔ x = y ∨ n(x) < n(y) est un ordre
car elle est antisym´trique (figure 2.1.c). Rappellons qun ordre est dit total si pour tout couple
                     e
d’´l´ments x et y, on a toujours xRy ou yRx. Un ordre non complet est dit partiel. C’est le cas
  ee
notamment de l’exemple de la figure 2.1.c), car certains ´l´ments ne sont pas comparables.
                                                            ee


2.1.2     Vocabulaire
     Pour un arc (x,y) ∈ Γ, x est l’origine et y est l’extr´mit´ de l’arc
                                                           e   e
     On dit aussi que y est successeur de x, ou que x est pr´d´cesseur de y.
                                                             e e
     On note :
       Γ(x) = {y ∈ X | (x,y) ∈ Γ} l’ensemble des successeurs de x

       Γ−1 (x) = {z ∈ X | (z,x) ∈ Γ} l’ensemble des pr´d´cesseurs de x
                                                      e e

                                               c IFSIC 2004
2.1. D´finitions math´matiques et notations
      e             e                                                                                  17




     ´e
     El´ment     a        b   c       d   e   f   g   h     i     j    k
    Estampille   10       5   4       5   7   7   3   4     5     2    10

j          g          c           b           e       a         a) preordre
                                                                 (sans les consequences transitives
                                                                 ni les boucles de reflexivite)
                      h           d           f       k


                                  i


j          g          c           b           e       a         b) equivalence
                                                                 (sans les boucles de reflexivite)
                      h           d           f       k


                                  i



j          g          c           b           e       a         c) ordre
                                                                  (sans les consequences transitives
                                                                  ni les boucles de reflexivite)
                      h           d           f       k


                                  i

                                      Fig. 2.1 – Pr´-ordre, ´quivalence et ordre
                                                   e        e




                                                          c IFSIC 2004
18                                                              Graphes : un mod`le math´matique
                                                                                e       e


     Si A ⊂ X :

       Γ(A) =         Γ(x)
                x∈A


       Γ−1 (A) =         Γ−1 (x)
                   x∈A


                                      1
       d+ (x) = card(Γ(x)) est le       degr´ ext´rieur de x
                                            e    e
                                      2


                                        1
       d− (x) = card(Γ−1 (x)) est le      degr´ int´rieur de x
                                              e    e
                                        2



       d(x) = d+ (x) + d− (x) est le degr´ de x
                                         e



2.1.3     Propri´t´s de graphes
                e e
    On montre, pour quelques propri´t´ des relations binaires, une propri´t´ caract´ristique du
                                    ee                                   ee        e
graphe correspondant. La caract´risation de la transitivit´ ne sera abord´e qu’au chapitre 5
                                 e                        e                e
(fermeture transitive).
    Dans ce qui suit, on pose ∆ = {(x,x)|x ∈ X} (ensemble des “boucles”).


R´flexivit´
 e       e                   ∀x ∈ X : (x,x) ∈ Γ.
                             Boucle sur chaque sommet .
                             ∆⊂Γ

Anti-r´flexivit´
      e       e              ∀x ∈ X : (x,x) ∈ Γ.
                             Graphe sans boucle .
                             ∆∩Γ=∅

Sym´trie
   e                         ∀x ∈ X,∀y ∈ X : (x,y) ∈ Γ =⇒ (y,x) ∈ Γ.
                             L’existence d’un arc implique l’existence de l’arc oppos´.
                                                                                     e
                             Γ=Γ   −1


Anti-sym´trie
        e                    ∀x ∈ X,∀y ∈ X : (x,y) ∈ Γ ∧ (y,x) ∈ Γ =⇒ x = y .
                             L’existence d’un arc interdit l’existence de l’arc oppos´, sauf
                                                                                     e
                             dans le cas d’une boucle.
                             Γ ∩ Γ−1 ⊂ ∆

                                                 c IFSIC 2004
2.2. Notion de chemin                                                                         19


2.2    Notion de chemin

      D´finition 2.3 Un chemin de G est une suite de sommets
        e
             [xi1 ,xi2 , . . . ,xik ]
      telle que :
             (xi1 ,xi2 ) ∈ Γ, (xi2 ,xi3 ) ∈ Γ, . . . , (xik−1 ,xik ) ∈ Γ
      xi1 en est l’origine, xik l’extr´mit´ et les xij (2 ≤ j ≤ k − 1), s’ils
                                          e   e
      existent, les sommets interm´diaires.
                                        e

Un chemin allant de x ` y, dont on ne pr´cise pas les sommets interm´diaires, sera not´ :
                        a                 e                            e                  e
      u = [x ∗ y]
Si l’on souhaite d´signer des sommets interm´diaires, on utilisera la notation telle que :
                  e                          e
      u = [x1 ∗ xp ∗ xq ∗ xk ]
y est alors un descendant de x et x un ascendant de y.

La longueur du chemin u , ou |u|, est le nombre d’arcs qui le composent.
u · v d´signe la concat´nation de deux chemins tels que
        e                e
    extr´mit´ de u = origine de v ; on a alors |u · v| = |u| + |v|.
         e e
Un circuit est un chemin dont l’extr´mit´ co¨
                                      e   e ıncide avec l’origine.
Un chemin (resp. circuit) ´l´mentaire est d´fini par une suite de sommets sans r´p´tition (sauf
                            ee              e                                  e e
l’origine et l’extr´mit´ pour un circuit)
                   e   e


2.3    Repr´sentations de l’objet math´matique
           e                          e
    On s’int´resse aux repr´sentations visuelles, destin´es au traitement ”` la main”. On peut
            e              e                            e                  a
utiliser :

a)- le graphique (diagramme sagittal) Exemple : graphe G1


                                   2             4          9




                       1           3             5          7           8




                                                 6



                                Fig. 2.2 – Diagramme Sagittal

                                            c IFSIC 2004
20                                                           Graphes : un mod`le math´matique
                                                                             e       e


    Cette repr´sentation pose des probl`mes de topologie (croisements d’arcs) et de lisibilit´
               e                       e                                                     e
lorsqu’il y a beaucoup de sommets et/ou d’arcs. Leurs attributs sont port´s sur le graphique,
                                                                          e
ce qui peut aussi ˆtre source d’ambigu¨ e. Elle n’est adapt´e en g´n´ral que pour les ”petits”
                  e                   ıt´                  e      e e
graphes (card(X) ≤ 10).

b)- un tableau d’attribution des arcs. S’il s’agit de repr´senter l’existence des arcs, ce ta-
                                                          e
bleau sera une matrice bool´enne.
                           e
             extr´mit´s →
                 e   e
                                1   2     3    4         5     6   7    8   9
             origines ↓
                  1                 1     1
                  2                                      1
                  3                       1    1               1
                  4                 1                    1
                  5                                            1   1    1
                  6                       1
                  7
                  8                                                1
                  9

     c)-   dictionnaire des successeurs            resp. des pr´d´cesseurs
                                                               e e
      1     2, 3                                    1 /
      2     5                                       2 1, 4
      3     3, 4, 6                                 3 1, 3, 6
      4     2, 5                                    4 3
      5     6, 7, 8                                 5 2, 4
      6     3                                       6 3, 5
      7     /                                       7 5, 8
      8     7                                       8 5
      9     /                                       9 /
Un seul de ces deux tableaux suffit ` sp´cifier compl`tement le graphe.
                                  a e             e




                                          c IFSIC 2004
Chapitre 3

Aspect algorithmique : un type de
donn´es abstrait
    e

   Dans ce chapitre on donne d’abord trois exemples de repr´sentation algorithmique. Puis
                                                                 e
on fait abstraction des repr´sentations particuli`res en d´finissant le type de donn´es abstrait
                            e                    e        e                        e
GRAPHE. Le probl`me est de repr´senter, ` l’aide de structures de donn´es algorithmiques, le
                  e              e        a                               e
doublet math´matique (X,Γ) avec Γ ⊆ X 2 .
              e


3.1     Les sommets et les arcs
    La d´finition des types Sommet et Arc est utilis´e dans toutes les repr´sentations de graphes.
         e                                         e                      e
Elle est pr´sent´e ci-dessous.
           e    e

3.1.1   Le type Sommet
   Tout sommet est identifi´ par un num´ro (entier), qui sera d´sign´ par num. En g´n´ral, on
                          e             e                       e  e              e e
suppose que num≥ 1. La notation algorithmique est la suivante :

          ENT SOMMET::num ;
signifiant que les objets de type SOMMET ont un attribut de nom num et de type entier. L’expression
x.num d´signe alors le num´ro du sommet x.
       e                    e

3.1.2   Le type Arc
   Tout arc poss`de deux sommets (son origine et son extr´mit´).
                e                                        e   e

          SOMMET ARC::ori ;
          SOMMET ARC::ext ;
    Si γ est un objet de type arc, l’expression γ .ori (resp. γ .ext) d´signe le sommet origine
                                                                         e
(resp. extr´mit´) de l’arc γ, et γ .ori.num (resp. γ .ext.num) le num´ro du sommet origine (resp.
           e e                                                       e
extr´mit´) de γ.
    e e

                                            c IFSIC 2004
22                                        Aspect algorithmique : un type de donn´es abstrait
                                                                                e


 i                            j


   Dans une repr´sentation graphique on utilisera souvent le sch´ma ci-dessous pour indiquer
                   e                                              e
que l’arc dessin´ relie le sommet de num´ro i au sommet de num´ro j.
                e                        e                       e
   Par commodit´ de notation, on d´signera souvent par (x,y) l’arc γ tel que γ .ori=x et γ .ext=y,
                  e                  e
ou par (i,j) l’arc γ tel que γ .ori.num=i et γ .ext.num=j.



3.2     Trois exemples de repr´sentation concr`te
                              e               e

   Ces exemples utilisent les structures de donn´es suppos´es connues TABLEAU[G], TABLEAU2[G],
                                                e         e
LISTE[G]. La premi`re d´crit les tableaux ` une dimension, la deuxi`me les tableaux ` deux
                   e     e                   a                         e                a
dimensions et la troisi`me les listes chaˆ ees. L’identificateur G d´signe le type des ´l´ments
                       e                  ın´                      e                  ee
contenus dans ces structures (type g´n´rique formel).
                                    e e



3.2.1   Repr´sentation par tableaux
            e


         ENT GRAPHE::nmax ;
          -- num´ro maximum de sommet. On repr´sente les graphes dont les sommets peuvent ˆtre num´
                  e                                e                                      e
         TABLEAU[BOOL] GRAPHE::vs ;
            -- G.vs[i] indique l’existence du sommet de num´ro i, 1 ≤ i ≤ G.nmax
                                                              e
         TABLEAU2[BOOL] GRAPHE::m ;
            -- G.m[i,j] indique l’existence de l’arc (i,j), 1 ≤ i, j ≤ G.nmax


On a toujours l’implication ∀i ∀j : G.m[i,j] ⇒ G.vs[i] ∧ G.vs[j] (un arc ne peut relier que des
sommets existants).
    Dans cette repr´sentation de G = (X,Γ), les ensembles X et Γ sont repr´sent´s de la mani`re
                   e                                                      e    e            e
suivante :
    x ∈ X ⇔ G.vs[x.num]
    (x,y) ∈ Γ ⇔ G.m[x.num,y.num]



Exemple : Graphe G1 nmax = 10 ;

          1   2   3   4   5       6   7   8   9   10
vs
          v   v   v   v   v       v   v   v   v    f



                                                  c IFSIC 2004
3.2. Trois exemples de repr´sentation concr`te
                           e               e                                                                23

                  1       2   3       4       5       6       7     8        9   10
         1                v   v
         2                                    v
         3                    v       v               v
         4                v                   v
m        5                                            v       v     v                 les cases vides ont
         6                    v                                                       des valeurs faux
         7
         8                                                    v
         9
        10

3.2.2    Repr´sentation par tableaux et listes
             e
     Les attributs nmax et vs sont d´finis comme pr´c´demment.
                                    e             e e

         TABLEAU[LISTE[SOMMET]] GRAPHE::ts ;
             -- G.ts[i] d´signe la liste des successeurs du sommet
                         e
         de num´ro i, 1 ≤ i ≤ G.nmax.
                e
On a toujours : si G.vs[i] est faux, alors G.ts[i] est n´cessairement vide (en fait, cette liste
                                                        e
n’est mˆme pas d´finie). Dans cette repr´sentation de G = (X,Γ), les ensembles X et Γ sont
        e         e                       e
repr´sent´s de la mani`re suivante :
     e    e           e
    x ∈ X ⇔ G.vs[x.num]
    (x,y) ∈ Γ ⇔ G.ts[x.num].contient(y)

Exemple : Graphe G1 nmax = 10 ;

              1       2   3   4   5       6   7   8       9   10
vs
              v       v   v   v   v       v   v   v       v    f

3.2.3    Repr´sentation d´centralis´e par listes
             e           e         e
   Le type SOMMET est enrichi : chaque sommet a maintenant comme attribut la liste de ses
successeurs. Le graphe se r´duit alors ` la liste de ses sommets.
                           e           a

         ENT SOMMET::num ; -- comme pr´c´demment
                                         e e
         LISTE[SOMMET] SOMMET::ls ;
            -- x.ls est la liste des sommets successeurs de x.

             LISTE[SOMMET] GRAPHE::lsom ;
                -- G.lsom est la liste des sommets du graphe G.
Dans cette repr´sentation du graphe G = (X,Γ), les ensembles X et Γ sont repr´sent´s de la
               e                                                             e    e
mani`re suivante :
    e
   x ∈ X ⇔ G.lsom.contient(x)

                                                              c IFSIC 2004
24                                             Aspect algorithmique : un type de donn´es abstrait
                                                                                     e

ts        1            [ 2; 3 ]

          2            [5]

          3           [ 3; 4; 6 ]

          4           [ 2; 5 ]

          5           [ 6; 7; 8 ]

          6           [3]

          7           []

          8           [7 ]

          9           [9]

          10



      (x,y) ∈ Γ ⇔ G.lsom.contient(x) et G.lsom.contient(y) et x.ls.contient(y)


          lsom
                 1           2         3          4           5         6       7    8      9
     G1


      x.ls        [ 2; 3 ]       [5]   [ 3; 4; 6 ] [ 2; 5 ]   [ 6; 7; 8 ] 3 ]
                                                                        [       []   [7 ]   [9]

Exemple : Graphe G1


3.3           Le type abstrait Graphe : les m´thodes
                                             e
    La plupart des algorithmes de r´solution de probl`mes mod´lis´s par des graphes peuvent ˆtre
                                    e                 e         e e                            e
d´crits ` l’aide de traitements plus ou moins ´l´mentaires sur le graphe mod´lisant le probl`me.
  e     a                                      ee                              e              e
Cette description –enchaˆ   ınement contrˆl´ des actions– est ´videmment, ` un certain niveau,
                                         oe                    e             a
intrins`que, c’est ` dire ind´pendante de la repr´sentation choisie pour le graphe.
       e           a           e                   e
    Par exemple, l’algorithme de saisie ci-apr`s construit un graphe ` partir de donn´es lues dans
                                              e                      a                e
un fichier. Le format de pr´sentation des donn´es est le suivant :
                              e                  e
    – S´quence des arcs, chaque arc ´tant donn´ comme un couple d’entiers (num´ro d’origine,
        e                             e           e                                  e
      num´ro d’extr´mit´), termin´e par (0,0);
           e          e    e        e
    – s´quence des num´ros des sommets isol´s, termin´e par 0.
       e                  e                    e         e
Exprim´ en faisant abstraction d’une repr´sentation concr`te particuli`re, on obtient le texte:
         e                                  e                e           e


GRAPHE construction c’est
    local ENT i, j ;

                                                         c IFSIC 2004
3.3. Le type abstrait Graphe : les m´thodes
                                    e                                                        25


              GRAPHE G ;
    d´but
     e
   --    initialisation au graphe vide
   G. creer ;

   --    lecture de la liste des arcs
    depuis i ← lire ; j ← lire
    jusqu a i=0 et j=0
    faire
        G. ajoutarc(i, j) ;
        i ← lire ; j ← lire
    fait ;

   --    lecture de la liste des sommets isol´s
                                             e
    depuis i ← lire
    jusqua i=0
    faire
        G. ajout sommet(i) ;
        i ← lire
    fait ;
   Result ← G
     -- Result est une variable exprimant le r´sultat d’une fonction
                                                e
 fin

    L’algorithme, pr´sent´ sous cette forme, peut s’appliquer ` n’importe quelle repr´sentation
                    e    e                                    a                       e
interne du graphe : il suffit, dans chaque cas, de ”traduire” convenablement les op´rations in-
                                                                                    e
diqu´s en italique.
     e
    Dans ce texte, le type GRAPHE n’est pas d´fini concr`tement : on l’appelle type abstrait.
                                               e         e
Cela signifie, qu’` ce niveau d’expression, on n’a pas besoin d’en savoir plus sur les structures
                 a
de donn´es qui seront effectivement utilis´es pour repr´senter concr`tement l’objet G.
         e                                e            e            e
    Les traitements ´l´mentaires en italique ont ´t´ d´nomm´s. On les appelle des m´thodes du
                    ee                           ee e       e                        e
type abstrait GRAPHE, et tout ce que l’on a besoin de connaˆıtre est leur s´mantique. Ainsi, on
                                                                           e
aura d´fini une fois pour toutes que :
       e

 creer : proc´dure qui initialise le graphe courant au graphe vide (∅,∅).
             e
 ajoutarc(ENT i; ENT j) : ajout au graphe courant de l’arc (i, j) (et au besoin des
                          sommets de num´ro i et j)
                                          e
 ajout sommet(ENT i) : ajout au graphe courant du sommet de num´ro i
                                                                 e

   La liste compl`te des acc`s, avec leur s´mantique, est donn´e en Annexe.
                  e           e            e                   e
   On peut poursuivre cette d´marche. En effet, les structures de donn´es utilis´s dans les
                                  e                                         e       e
repr´sentations ”concr`tes” des graphes peuvent ˆtre elles aussi consid´r´es comme des types de
    e                  e                          e                    ee
donn´es abstraits (c’est le cas par exemple du type g´n´rique LISTE[T]). Ces types de donn´es
     e                                                e e                                   e
abstraits peuvent ` leur tour ˆtre manipul´s ` travers leurs m´thodes, et mis en oeuvre selon
                   a            e           e a                 e
diverses repr´sentations concr`tes, etc. Dans le cas du type LISTE[T], par exemple, la m´thode
             e                  e                                                        e

                                            c IFSIC 2004
26                                     Aspect algorithmique : un type de donn´es abstrait
                                                                             e


BOOL contient(T x) est telle que .contient(x) renvoie vrai si et seulement si la liste         contient
un ´l´ment de type T, de valeur x.
   ee
    Nous ne d´taillerons pas ici ces repr´sentations, qui sont ´tudi´es dans les cours de tech-
                e                          e                       e     e
niques de programmation ou structures de donn´es. Il faut n´anmoins mettre l’accent sur le
                                                     e             e
fait essentiel que la d´marche est absolument identique dans le cas des graphes, des listes, etc... :
                        e
s´parer la partie intrins`que d’un algorithme des d´tails de mise en oeuvre, ou d’impl´mentation.
 e                        e                          e                                    e
On peut toujours d´finir de nouveaux niveaux d’abstraction, ` condition de bien pr´ciser les
                       e                                            a                        e
types abstraits manipul´s et leurs m´thodes. Remarquons enfin que les types pr´d´finis, mˆme
                           e           e                                               e e          e
´l´mentaires (r´el, entier, caract`re, bool´en) utilis´s dans les langages de haut niveau sont
ee               e                   e          e           e
eux aussi des types abstraits par rapport ` la machine, leur impl´mentation concr`te en m´moire
                                           a                       e                   e         e
d´pendant du mat´riel utilis´ ; les m´thodes sont alors, dans un langage donn´, les op´rations
  e                  e        e         e                                            e         e
pr´d´finies du langage telles que : lecture/´criture, op´rations arithm´tiques ou logiques, com-
   e e                                        e           e                e
paraisons, etc...
    Cette d´marche de programmation par abstractions successives est r´alis´e, notamment,
             e                                                                   e e
dans les langages dits de “programmation par objets”, appel´s encore, improprement, “langages
                                                                e
orient´s objets”. Citons, parmi les plus connus, Eiffel, Java, C++, dans une moindre mesure
       e
Turbo-Pascal (` partir de la version 6) ou encore, plus anciens, Simula et Smalltalk. Dans
                    a
ces langages, les types sont d´crits dans des classes, contenant tout ` la fois les valeurs des objets
                              e                                        a
du type (appel´s attributs) et les m´thodes permettant de manipuler ces valeurs (en lecture ou
                 e                    e
en ´criture). Nous renvoyons, pour plus de d´tail, aux cours de programmation s’appuyant sur
    e                                           e
la d´marche par objets. Dans la suite de ce polycopi´, les notations utilis´es dans la description
     e                                                  e                      e
des algorithmes seront proches de celles utilis´es dans de tels langages, sans pour autant ˆtre li´e
                                                e                                              e      e
a
` l’un d’entre eux en particulier. Le . est l’op´rateur d’application de m´thode ou d’attribut `
                                                  e                            e                       a
l’objet d´sign´. Par exemple, G.ajout arc(i,j) est une instruction, signifiant que l’on applique
          e    e
l’op´ration ajout arc, avec les deux param`tres effectifs i et j ` l’objet de type GRAPHE d´sign´ par
     e                                      e                    a                          e      e
G. De mˆme, G.valid arc(i,j) est une expression dont l’´valuation renvoie une valeur bool´enne,
         e                                                  e                                    e
valant vrai si et seulement si l’objet de type GRAPHE d´sign´ par G poss`de l’arc (i, j).
                                                          e   e              e


3.4     Notations
    L’approche objet interdit en g´n´ral d’acc´der directement aux attributs d’un objet distant,
                                  e e          e
que ce soit en ´criture (c’est-`-dire pour affecter directement sa valeur) ou mˆme en lecture
                e              a                                                   e
(pour obtenir sa valeur). Dans ce cas, des ´critures telles que
                                            e
    x.att := valeur (affectation ”` distance”, c’est-`-dire via x, de l’attribut att), ou mˆme
                                  a                  a                                    e
    v:=x.att (lecture ”` distance”, c’est-`-dire via x de l’attribut att)
                       a                  a
    sont souvent interdites; de telles op´rations ne peuvent en effet ˆtre r´alis´es que par des
                                         e                               e    e e
m´thodes (proc´dures ou fonctions) ´quipant le type de l’objet d´sign´ par x.
  e             e                     e                             e     e
    Par exemple, avec la d´claration
                           e

REEL SOMMET::lambda ;
la mise ` jour de l’attribut lambda d’un objet de type SOMMET d´sign´ par x ne pourra se faire
         a                                                     e    e
que si le type SOMMET poss`de une m´thode
                           e        e


                                               c IFSIC 2004
3.4. Notations                                                                                     27


affecter lambda(REEL v)
 post lambda=v
qui effectue, de mani`re interne, l’affectation lambda:=v. L’instruction externe r´alisant une telle
                      e                                                         e
mise ` jour s’´crira alors :
     a        e
   x.affecter lambda(4.18)
    Toutefois, afin d’all´ger l’´criture des algorithmes et d’en faciliter la lecture, nous utiliserons
                         e      e
le symbole ← ayant la signification suivante:
    x.lambda ←4.18 suppose que le type SOMMET est ´quip´ d’une m´thode r´alisant cette affecta-
                                                       e     e         e         e
tion.     L’´criture
            e            ci-dessus    est    alors     ´quivalente
                                                       e               `
                                                                       a     l’instruction    d’appel
x.affecter lambda(4.18). Dans un mˆme souci de simplification, une expression telle x.lambda
                                        e
d´livre la valeur de l’attribut lambda de l’objet d´sign´ par x, en supposant que le type de x est
  e                                                 e     e
´quip´ d’une m´thode permettant cette lecture (certains langages, comme Eiffel, permettent de
e      e         e
telles lectures directes, ` condition que l’attribut soit ”exportable”).
                          a
    Enfin, toujours pour all´ger le formalisme, si a et b d´signent deux objets de mˆme type,
                              e                                e                            e
l’´criture a ←b d´note l’instruction de copie de l’objet d´sign´ par b dans l’objet d´sign´ par a
  e                e                                         e   e                        e    e
(affectation de valeurs).
    Finalement, dans les parties “math´matiques” (propri´t´s, d´monstrations, etc.) nous utilise-
                                         e                   ee e
rons des notations fonctionnelles plus classiques telles que λ(x) ou pred(x) (au lieu des notations
“algorithmiques” x.lambda ou x.pred). D’une mani`re g´n´rale, x d´signant un objet d’un type
                                                       e    e e          e
C, et att un attribut de ce type, les deux notations att(x) et x.att seront consid´r´es comme
                                                                                         ee
ayant la mˆme signification.
            e




                                              c IFSIC 2004
28   Aspect algorithmique : un type de donn´es abstrait
                                           e




           c IFSIC 2004
Chapitre 4

Relations et op´rateurs entre
               e
graphes

    Dans ce qui suit, nous d´signerons par G(X) l’ensemble des graphes ayant X comme ensemble
                            e
de sommets.
    Sur G(X), nous pouvons consid´rer un certain nombre de relations ou op´rations; dans ce
                                     e                                        e
chapitre, nous en ´tudions quelques unes. On note :
                  e

      G1 = (X,Γ1 ),G2 = (X,Γ2 )

   deux ´l´ments de G(X).
        ee


4.1    Relation d’ordre
   La relation
   G1 G2 ⇐⇒ Γ1 ⊂ Γ2 qui se lit : “G1 est un graphe partiel de G2 ”
   est une relation d’ordre partiel sur G(X). Pour cette relation,
      G(X) a un minimum : (X,∅)
                maximum : (X,X 2 )
    Toute partie de G(X) poss`de d’ailleurs au moins un minorant et un majorant, comme c’est
                               e
le cas de toute partie finie d’un ensemble ordonn´.
                                                e


4.2    Union
      G1 ∪ G2 = (X,Γ1 ∪ Γ2 )

   Cet op´rateur poss`de toutes les propri´t´s de l’union ensembliste.
         e           e                    ee

                                          c IFSIC 2004
30                                                      Relations et op´rateurs entre graphes
                                                                       e


4.3      Composition
4.3.1     D´finition
           e
       G3 = G1 ◦ G2 = (X,Γ3 )
est d´fini par :
     e
       Γ3 = {(x,y) | ∃z ∈ X : (x,z) ∈ Γ1 ∧ (z,y) ∈ Γ2 }
    L’op´rateur ◦ n’est pas commutatif. Toutefois, il est associatif et poss`de un ´l´ment neutre,
        e                                                                   e      ee
a
` savoir le graphe ”diagonal” :
       D = (X,∆) o` ∆ = {(x,x) | x ∈ X}
                  u
     En effet, ∀G ∈ G(X) : G ◦ D = D ◦ G = G.
     Par abus de notation, on ´crira parfois
                              e
       Γ3 = Γ1 ◦ Γ2 lorsque G3 = G1 ◦ G2


     Proposition 4.1 ◦ est distributif par rapport ` ∪
                                                   a
     Autrement dit :
          ∀G1 ,G2 ,G3 ∈ G(X) :

          (G1 ∪ G2 ) ◦ G3 = (G1 ◦ G3 ) ∪ (G2 ◦ G3 )
          G1 ◦ (G2 ∪ G3 ) = (G1 ◦ G2 ) ∪ (G1 ◦ G3 )



(D´monstration laiss´e au lecteur).
  e                 e
   Par contre, ∪ n’est pas distributif par rapport ` ◦ :
                                                   a
       (G1 ◦ G2 ) ∪ G3 = (G1 ∪ G3 ) ◦ (G2 ∪ G3 )
contre-exemple

G1 = G2                                                                                  2
                                                            2
G3 = D
                                              1                               1
G1 ◦ G2 = (X,∅)
(G1 ◦ G2 ) ∪ G3 = D
                                                            3                            3
D’autre part :                                     G1=G2                      D

(G1 ∪ D) ◦ (G2 ∪ D) = G1 ∪ D

     Proposition 4.2 L’op´rateur ◦ est compatible ` gauche et ` droite avec
                             e                    a           a
     la relation d’ordre d´finie en 3.1
                          e


                                             c IFSIC 2004
4.3. Composition                                                                                  31



D´monstration : Cet ´nonc´ signifie que
 e                  e    e
   ∀G1 ,G2 ,G3 ∈ G(X) : G1 G2 ⇒                (G1 ◦ G3            G2 ◦ G3 )
                                             ∧ (G3 ◦ G1            G3 ◦ G2 )
Si Gi = (X,Γi ) (i = 1,2,3), on a :


      (x,y) ∈ Γ1 ◦ Γ3 ⇒ ∃z ∈ X : (x,z) ∈ Γ1 ∧ (z,y) ∈ Γ3
                        ⇒ ∃z ∈ X : (x,z) ∈ Γ2 ∧ (z,y) ∈ Γ3
                        ⇒ (x,y) ∈ Γ2 ◦ Γ3

ce qui montre que G1 ◦ G3 G2 ◦ G3 .
    La deuxi`me in´galit´ se montre de mani`re analogue.P
            e     e     e                  e

4.3.2     Algorithme
   Nous donnons ci-dessous un algorithme de construction de G3 = G1 ◦ G2 , en supposant pour
simplifier que X = [1..n]

4.3.2.1    Analyse
    Pour tout couple (x,y) ∈ X 2 , il faut d´terminer si (x,y) est ou non un arc de G3 . Par
                                              e
d´finition,
 e
      (x,y) ∈ Γ3 ⇐⇒ ∃z (1 ≤ z ≤ n) ∧ ((x,z) ∈ Γ1 ) ∧ ((z,y) ∈ Γ2 )
    Notons P(z) la proposition : ((x,z) ∈ Γ1 ) ∧ ((z,y) ∈ Γ2 ). Il s’agit d’´valuer le pr´dicat :
                                                                            e            e
    ∃t 1 ≤ t ≤ n : P (t). Cette ´valuation est mise en œuvre par un calcul it´ratif. La figure
                                  e                                                  e
ci-dessous en d´termine l’invariant :
               e

                     zone deja examinee                     zone non encore examinee

              1                                z    z+ 1                               n


c’est-`-dire, plus formellement :
       a
       I ≡ (0 ≤ z ≤ n) ∧ (b = ∃t 1 ≤ t ≤ z : P (t))
    Le calcul sera termin´ lorsque :
                            e
       (z = n) ∨ b
et, lorsque ceci se produit :
    – si b alors (∃t 1 ≤ t ≤ z : P (t)) ∧ (z ≤ n), c’est-`-dire (∃t 1 ≤ t ≤ n : P (t)) (*succes*)
                                                         a
    – si ¬b alors (z = n) ∧ ¬(∃t 1 ≤ t ≤ n : P (t)) (* ´chec *)
                                                         e
Le r´sultat est donc ´gal ` b
     e                  e    a
    Si le calcul n’est pas termin´, on progresse en mettant ` jour les variables z et b de la mani`re
                                 e                           a                                    e
suivante :

      z←z + 1 ; b←P (z)

                                             c IFSIC 2004
32                                                       Relations et op´rateurs entre graphes
                                                                        e


     Les valeurs initiales doivent satisfaire l’invariant ; par exemple, on peut prendre :
       z←0 ; b←f alse
     De cette analyse d´coule le texte de l’algorithme.
                       e

4.3.2.2    Texte de l’algorithme
     Il est donn´ page 32.
                e



                               ALGORITHME DE CONSTRUCTION DE G1◦G2



GRAPHE composer(GRAPHE G1, G2) c’est
-- pr´ : G1 et G2 ont le mˆme ensemble de sommets :
       e                   e
--        G1.ens som=G2.ens som={1,...,n}
    local SOMMET x,y,z; BOOL b;
 d´but
  e
     Result.creer;
--    Result est une variable implicite de type GRAPHE, exprimant
le r´sultat de la fonction
    e
     pour tout x de G1.ens som
       pour tout y de G1.ens som
         depuis z ← 0 ; b ← false
         jusqua z ≥ n ou b
         faire
            z ← z+1;
            b ← G1.validarc(x,z) et G2.validarc(z,y)
         fait;
         si b alors Result.ajoutarc(x,y) fsi
       fpour
     fpour
 fin




4.3.3     Complexit´
                   e
    La boucle interne depuis ... jqa comporte au plus n pas , et elle est ex´cut´e exactement n2
                                                                            e e
fois. La complexit´ maximum est donc :
                  e

2n3 acc`s validarc
        e
n3 op´rations et
     e
n2 acc`s ajoutarc
      e

                                              c IFSIC 2004
4.4. Puissances d’un graphe                                                                    33


   On dit que c’est un algorithme en O(n3 ), en termes d’acc`s validarc.
                                                               e
Remarques
   1) La complexit´ de mise en œuvre de chacun des acc`s d´pend ´videmment de la repr´sentation
                   e                                     e e       e                      e
choisie pour chacun des 3 graphes G1, G2, Result.
   2) Si les graphes sont tous les trois repr´sent´s par leur matrice bool´enne, alors il est facile
                                             e    e                       e
de voir que

       M3 = M1 · M2 o` le · d´signe le produit matriciel bool´en de deux matrices :
                     u       e                               e
                                 n
       ∀1 ≤ i,j ≤ n : m3ij =         (m1ik ∧ m2kj )
                               k=1


4.4      Puissances d’un graphe
    On d´finit par r´currence sur p ∈ N le graphe G[p] = (X,Γ[p] ) de la mani`re suivante :
        e          e                                                        e


   D´finition 4.3
    e

                     G[0] = D


          ∀p ≥ 1 : G[p] = G[p−1] ◦ G = G ◦ G[p−1]


propri´t´s : G[k] ◦ G[l] = G[k+l]
      e e

(G[k] )[l] = G[kl]

(identiques aux puissances des nombres r´els)
                                        e

    Nous allons interpr´ter les puissances d’un graphe.
                       e


   Proposition 4.4 Soit G[p] = (X,Γ[p] ) la puissance peme d’un graphe
                                                          `

   G = (X,Γ). Alors, (x,y) ∈ Γ[p] si et seulement si il existe, dans G, un

   chemin de longueur p, allant de x ` y (ce chemin est un circuit si x =
                                      a
   y).

D´monstration Par r´currence sur p :
 e                    e
   – Pour p= 1, le r´sultat est ´vident : G[1] = (X,Γ) et les arcs sont les chemins de longueur 1.
                    e           e
   – Supposons d´montr´ jusqu’` p-1.
                 e       e        a


                 (x,y) ∈ Γ[p] = Γ[p−1] ◦ Γ
         ⇐⇒ ∃z ∈ X : (x,z) ∈ Γ[p−1] ∧ (z,y) ∈ Γ

                                                c IFSIC 2004
34                                                     Relations et op´rateurs entre graphes
                                                                      e


         ⇐⇒ ∃z ∈ X : ∃u = [x ∗ z], | u |= p − 1 ∧ ∃v = [zy], | v |= 1
         ⇐⇒ ∃w = u.v = [x ∗ y], | w |=| u | + | v |= p

     ce qui d´montre le r´sultat pour p P
             e           e


4.5      Graphe transpos´
                        e


     D´finition 4.5 Le graphe transpos´ de G = (X,Γ) est :
      e                              e

          Gt = (X,Γt ) avec

          (x,y) ∈ Γt ⇐⇒ (y,x) ∈ Γ



    C’est donc le graphe d´duit de G par inversion du sens de tous les arcs. On utilise parfois
                             e
la notation Γ  −1 , lorsqu’on veut exprimer le fait que l’application multivoque associ´e ` Gt
                                                                                       e a
est l’inverse de l’application multivoque Γ li´e ` G. Remarquons toutefois que les relations
                                               e a
Γ ◦ Γ−1 = ∆ ou Γ−1 ◦ Γ = ∆ ne sont en g´n´ral pas v´rifi´es. Ainsi, Γ−1 ne doit pas ˆtre
                                              e e          e e                             e
consid´r´ comme la ”puissance moins un” du graphe, mais bien comme une notation d´signant
       ee                                                                              e
l’ensemble des arcs du graphe transpos´.e


4.6      Sous-graphe
    Dans ce paragraphe, les graphes consid´r´s ne sont pas tous construits sur le mˆme ensemble
                                            ee                                     e
de sommets. En effet, si nous avons un graphe G = (X,Γ), certaines op´rations sur G peuvent
                                                                          e
amener ` supprimer des sommets. Or, si un sommet est ˆt´ du graphe, il va de soi que les
        a                                                     oe
´ventuels arcs adjacents ` X doivent aussi ˆtre supprim´s : la suppression d’un objet entraˆ la
e                        a                  e             e                                ıne
suppression de toutes les relations relatives ` cet objet ! Cette remarque pr´liminaire conduit `
                                              a                              e                  a
la d´finition suivante :
    e


     D´finition 4.6 Soit G = (X,Γ) ∈ G(X) et A ⊂ X.
       e
     Le sous-graphe engendr´ par A est d´fini par :
                           e            e

          GA = (A,ΓA ) ∈ G(A),avec

          ΓA = {(x,y) | x ∈ A,y ∈ A,(x,y) ∈ Γ}


On peut donner un algorithme de construction du sous-graphe engendr´ par A :
                                                                   e

sous graphe(ENS[SOMMET] A) c’est
  local SOMMET z

                                            c IFSIC 2004
4.6. Sous-graphe                                    35


 d´but
  e
    pourtout z de ens som faire
       si z ∈ A alors oter sommet(z) fsi
    fpourtout
 fin




                                     c IFSIC 2004
36              Relations et op´rateurs entre graphes
                               e




     c IFSIC 2004
Chapitre 5

Fermeture transitive

    Le probl`me ´tudi´ dans ce chapitre est celui de l’existence des chemins entre tous les couples
             e    e   e
de sommets. Plus pr´cis´ment :
                     e e
     ´
    Etant donn´ un graphe G = (X,Γ), construire le graphe G+ = (X,Γ+ ) tel que (x,y) ∈ Γ+ ⇔
                e
il existe un chemin de G allant de x ` y. G+ s’appelle la fermeture transitive de G.
                                     a
    Nous allons voir successivement les bases th´oriques, puis deux algorithmes permettant de
                                                  e
r´soudre le probl`me, et enfin des exemples d’application.
 e                e


5.1     Retour sur la transitivit´
                                 e
   Un graphe est transitif si la relation binaire qui lui est associ´e est transitive. En d’autres
                                                                    e
termes :

   ∀x,y,z ∈ X : (x,y) ∈ Γ ∧ (y,z) ∈ Γ =⇒ (x,z) ∈ Γ.
   Voici une propri´t´ caract´ristique des graphes transitifs:
                   ee        e


   Proposition 5.1 Un graphe G est transitif si et seulement si tout che-
   min de longueur deux est sous-tendu par un arc, c’est-`-dire : Γ[2] ⊂ Γ
                                                         a

D´monstration
  e
1. Supposons G transitif.
     G transitif ⇒ ∀x∀y∀z ((x,y) ∈ Γ ∧ (y,z) ∈ Γ ⇒ (x,z) ∈ Γ)
                 ⇒ ∀x∀z (∃y ((x,y) ∈ Γ ∧ (y,z) ∈ Γ) ⇒ (x,z) ∈ Γ)
                 ⇒ ∀x∀z (x,z) ∈ Γ[2] ⇒ (x,z) ∈ Γ
                 ⇒ Γ[2] ⊆ Γ
2. R´ciproquement, supposons Γ[2] ⊆ Γ.
    e
     (x,z) ∈ Γ ∧ (z,y) ∈ Γ ⇒ (x,y) ∈ Γ[2]
                           ⇒ (x,y) ∈ Γ                                                           P
                           ⇒ G est transitif

   Cette propri´t´ admet un corollaire ´vident:
               ee                      e

                                            c IFSIC 2004
38                                                                          Fermeture transitive



     Corollaire 5.2 Un graphe G est transitif si et seulement si tout chemin
     est sous-tendu par un arc, c’est-`-dire : ∀k ≥ 2 : Γ[k] ⊂ Γ
                                      a

D´monstration Par r´currence sur k :
 e                     e
   – vrai pour k = 2, d’apr`s la proposition pr´c´dente.
                           e                   e e
   – Hypoth`se de r´currence : Γ
            e       e            [k−1] ⊆ Γ. Cela signifie: G[k−1]       G. On a alors :
               [k]        [k−1]
             G       = G          ◦G
                        G ◦ G(hypoth`se de r´currence et proposition 4.2)
                                    e       e
                        G[2]
                        G (proposition 5.1)
                                                                                                    P

    L’interpr´tation “concr`te” de ce corollaire est la suivante : dans un graphe transitif, la notion
             e             e
de chemin se confond avec la notion d’arc.

Nous allons maintenant aborder les caract´risations et les algorithmes de calcul de la fermeture
                                          e
transitive. Le terme de fermeture transitive provient du fait que, d’une part, G+ est transitif
(par construction!), et d’autre part, G+ est le plus petit graphe transitif sup´rieur ou ´gal ` G
                                                                               e         e    a
(au sens de la relation ). Plus pr´cis´ment :
                                   e e
    – G + est transitif,

    – G G+
    – Si H est transitif et G H, alors G+ H
Intuitivement, on obtient G+ ` partir de G en rajoutant “juste ce qu’il faut” d’arcs pour rendre
                                a
le graphe transitif. La d´monstration de ces propri´t´s ne pr´sente aucune difficult´. Elle est
                          e                          ee         e                      e
laiss´e en exercice au lecteur.
     e


5.2      Caract´risation du graphe G+
               e

        Proposition 5.3 G+ = G ∪ G[2] ∪ . . . ∪ G[k] ∪ . . .

D´monstration Posons G+ = (X,Γ+ ) et, ∀k ≥ 1, G[k] = (X,Γ[k] ). Par d´finition,
 e                                                                   e

       (x,y) ∈ Γ+ ⇔ ∃u = [x y] dans G
                     ⇔ (x,y) ∈ Γ[k] ,o` k = |u|
                                      u
                     ⇔ (x,y) ∈ Γ ∪ Γ[2] ∪ . . . ∪ Γ[k] ∪ . . .

                                                                                                    P

     La proposition suivante montre que le probl`me se r´duit ` l’existence des chemins ´l´mentaires.
                                                e       e     a                         ee

                                                 c IFSIC 2004
5.2. Caract´risation du graphe G+
           e                                                                                        39



   Proposition 5.4 Les deux propositions suivantes sont ´quivalentes :
                                                          e
   i) Dans le graphe G, il existe un chemin de x ` y,
                                                 a
   ii) Dans le graphe G, il existe un chemin ´l´mentaire de x ` y
                                             ee               a

 e                      ´
D´monstration ii) ⇒ i). Evident puisque tout chemin ´l´mentaire est un chemin.
                                                    ee

i) ⇒ ii). Supposons qu’il existe un chemin u = [x ∗ y]. S’il est ´l´mentaire, la d´monstration est
                                                                 ee               e
termin´e; sinon, la suite de sommets le d´finissant comporte au moins une r´p´tition :
       e                                 e                                      e e
         u = [x ∗ z ∗ z ∗ y] (´ventuellement, z = x ou z = y)
                              e
On a donc :
         u = u1 · u2 · u3
avec u1 = [x ∗ z],u2 = [z ∗ z],u3 = [z ∗ y] et u’ = u1 · u3 est un chemin de x ` y, obtenu `
                                                                                    a             a
partir de u en ”court-circuitant” le circuit [z ∗ z]. En it´rant ce raisonnement tant qu’il y a des
                                                           e
r´p´titions (circuits contenus dans le chemin), on obtient n´cessairement un chemin ´l´mentaire
 e e                                                          e                        ee
reliant x ` y.
          a                                                                                      P

   Des deux propositions pr´c´dentes r´sulte la caract´risation suivante :
                           e e        e               e


   Corollaire 5.5 Soit G = (X,Γ) et n =| X |. On a :

               G+ = G ∪ G[2] ∪ . . . ∪ G[n]

D´monstration Le r´sultat d´coule des deux propositions pr´c´dentes et du fait que tout
  e                    e        e                              e e
chemin ´l´mentaire est de longueur ≤ n (et mˆme ≤ n − 1 si ce n’est pas un circuit).
       ee                                   e                                        P

   On peut encore ˆtre plus pr´cis :
                  e           e


   Proposition 5.6 Soit k                     la   longueur   maximum   des   chemins
   ´l´mentaires de G. Alors :
   ee
   i) k ≤ n,
           k              k+1
   ii)          G[j] =          G[j]
       j=1             j=1
   iii) G+       =G   ∪ G[2]      ∪ . . . ∪ G[k]

D´monstration i) : par d´finition des chemins ´l´mentaires (longueur ≤ n)
 e                      e                    ee
                   k+1
ii) Si (x,y) ∈            G[j] alors il existe dans G un chemin u de longueur ≤ k + 1, allant de x ` y.
                                                                                                   a
                    j=1
D’apr`s la proposition 5.4, il existe dans G un chemin ´l´mentaire allant de x ` y; autrement dit,
     e                                                 ee                      a

                                                        c IFSIC 2004
40                                                                                               Fermeture transitive

                                                                              k                           k                  k+1
                                                                                       [j]                         [j]
il existe un entier     ≤ k tel que (x,y) ∈   G[ ] .   Comme      G[ ]   ⊆         G         on a bien         G         =         G[j] .
                                                                             j=1                         j=1                 j=1

iii) Imm´diat D’apr`s le point pr´c´dent et le corollaire 5.5
        e          e             e e                                                                                                  P



5.3      Algorithme des puissances
   L’algorithme des puissances calcule G+ en se basant sur la proposition 5.6. Il est construit
en maintenant invariante la proposition ci-dessous :

       (G+ = G ∪ ... ∪ G[k] ) ∧ (H = G ∪ ... ∪ G[k−1] ) ∧ (1 ≤ k ≤ n)

     Le calcul sera donc termin´ lorsque H = G+
                                 e
     Si le calcul n’est pas termin´, la progression consiste ` mettre ` jour les variables H,G+ :
                                   e                         a        a

        H ← G+ ;
       G+ ← G ∪ (G+ ◦ G)

En effet :

                  k
       si G+ =         G[j] alors
                 j=1


                  k+1
       G+ ◦ G =         G[j] (distributivit´ de ◦ par rapport ` ∪) d’o`
                                           e                  a       u
                  j=2


                          k+1
       G ∪ (G+ ◦ G) =            G[j]
                           j=1


   Les valeurs initiales doivent v´rifier l’invariant et ˆtre faciles ` ´valuer en fonction des
                                  e                     e            a e
donn´es :
    e

       G+ ← G, H arbitraire (mais = G+ , par exemple : H ← (∅,∅)).

     Le texte de l’algorithme en d´coule.
                                  e


5.3.1     Texte de l’algorithme
     Il est donn´ page 41
                e

                                                   c IFSIC 2004
5.4. Algorithme de Roy-Warshall                                                                 41


                         FERMETURE TRANSITIVE : PUISSANCES


GRAPHE fermeture-transitive-puissance(GRAPHE G) c’est
   local GRAPHE H
   d´but
    e
     depuis Result ← G ; H.creer
     jusqua H=Result
     faire
       H ← Result ;
       Result ← G ∪(G ◦ Result)
     fait
   fin



5.3.2    Complexit´
                  e
   Au maximum, n pas d’it´ration sont effectu´s. A chaque pas, sont effectu´s :
                         e                  e                            e

• 2 affectations de graphe,            en O(n2 ) acc`s ´l´mentaires,
                                                   e ee

• 1 comparaison de 2 graphes,         en O(n2 ) acc`s ´l´mentaires,
                                                   e ee

• 1 op´ration ◦,
      e                               en O(n3 ) acc`s ´l´mentaires (chapitre 4, section4.3.3)
                                                   e ee

• 1 op´ration ∪,
      e                            en O(n2 ) acc`s ´l´mentaires.
                                                e ee
C’est donc un algorithme en O(n4 ) acc`s ´l´mentaires.
                                      e ee

De plus, l’espace utilis´ est de 3 graphes.
                        e


5.4     Algorithme de Roy-Warshall
   Par rapport ` l’ algorithme pr´c´dent, bas´ sur les calculs de puissances, celui-ci pr´sente les
                a                  e e        e                                          e
avantages suivants :
   – sa complexit´ est en O(n3 ) acc`s,
                   e                   e
   – l’espace utilis´ n’est que de 1 graphe,
                    e
   – il offre la possibilit´ de calculer des routages, c’est ` dire d’obtenir le trac´ de chemins
                          e                                 a                        e
     ´l´mentaires.
     ee

5.4.1    Principe de l’algorithme
   L’algorithme est bas´ sur l’op´ration ´l´mentaire Θ suivante :
                       e         e       ee

                                              c IFSIC 2004
42                                                                        Fermeture transitive



     D´finition 5.7 Soit x ∈ X. Si G = (X,Γ) ∈ G(X), alors Θx (G) ∈
       e
     G(X) a pour ensemble d’arcs :

           Θx (Γ) = Γ ∪ {(y,z) | (y,x) ∈ Γ ∧ (x,z) ∈ Γ}

Autrement dit, Θx enrichit le graphe en lui ajoutant les arcs reliant les pr´d´cesseurs de x aux
                                                                            e e
successeurs de x.
L’algorithme est bas´ sur une nouvelle caract´risation de la fermeture transitive :
                    e                        e

        G+ =         Θx (G)
               x∈X

    o`
     u    d´signe le produit (composition) des op´rations Θx , c’est ` dire, si X = {1,2, . . . ,n}
           e                                     e                   a
est une num´rotation des sommets :
             e

        G+ = Θn (Θn−1 (. . . (Θ1 (G)) . . .))



     Lemme 5.8 Soit Vi l’ensemble des couples (y,z) ∈ X 2 tels qu’il existe
     dans G un chemin ´l´mentaire de longueur 1 ou dont tous les sommets
                        ee
     interm´diaires sont de num´ro inf´rieur ou ´gal ` i. On a alors :
           e                   e      e         e    a

           ∀1 ≤ i ≤ n : Θi · Θi−1 · . . . · Θ1 (Γ) = Vi

D´monstration Par r´currence sur i :
 e                 e
   • Pour i= 1,
        Θ1 (Γ) = Γ ∪ {(y,z) | (y,1) ∈ Γ ∧ (1,z) ∈ Γ}
Γ est l’ensemble des couples reli´s par un chemin de longueur 1, {(y,z) | (y,1) ∈ Γ∧(1,z) ∈ Γ} est
                                 e
l’ensemble des couples reli´s par un chemin ´l´mentaire de longueur 2 de sommet interm´diaire
                           e                  ee                                           e
num´ro 1. La propri´t´ est donc v´rifi´e.
     e               ee             e e
    • Supposons la vraie pour i-1 et montrons qu’elle est vraie pour i.

Hypoth`se : Θi−1 · . . . · Θ1 (Γ) = Vi−1
      e

Il faut montrer : Θi · Θi−1 · . . . · Θ1 (Γ) = Vi .

D’apr`s l’hypoth`se de r´currence, cela revient ` montrer que :Θi (Vi−1 ) = Vi .
     e           e      e                       a
   Mais, par d´finition de Θi :
               e
        Θi (Vi−1 ) = Vi−1 ∪ {(y,z) | (y,i) ∈ Vi−1 ∧ (i,z) ∈ Vi−1 }
     Soit (y,z) ∈ Θi (Vi−1 ). Il y a deux possibilit´s:
                                                    e
     1. Si (y,z) ∈ Vi−1 alors (y,z) ∈ Vi (car Vi−1 ⊆ Vi )

                                                  c IFSIC 2004
5.4. Algorithme de Roy-Warshall                                                               43


  2. Si (y,i) ∈ Vi−1 ∧ (i,z) ∈ Vi−1 alors il existe un chemin de y ` z dont tous les sommets
                                                                   a
     interm´diaires sont de num´ro inf´rieur ou ´gal ` i, donc (proposition 5.4) il existe un
            e                      e        e      e    a
     chemin ´l´mentaire de y ` z dont tous les sommets interm´diaires sont de num´ro inf´rieur
              ee                a                             e                  e      e
     ou ´gal ` i, c’est-`-dire (y,z) ∈ Vi .
        e     a         a
On a donc montr´ Θi (Vi−1 ) ⊆ Vi .
               e

R´ciproquement, soit (y,z) ∈ Vi . Il existe donc un chemin ´l´mentaire u de y ` z, dont tous les
  e                                                        ee                  a
sommets interm´diaires sont de num´ro inf´rieur ou ´gal ` i. Il y a deux cas :
              e                       e      e        e   a
  1. u ne passe pas par le sommet i. Dans ce cas, tous les sommets interm´diaires sont de
                                                                         e
     num´ro inf´rieur ou ´gal ` i − 1 donc (y,z) ∈ Vi−1 ⊆ Θi (Vi−1 )
         e     e         e    a
  2. u passe par le sommet i. Comme il est ´l´mentaire, il se d´compose en deux chemins u1
                                            ee                 e
     et u2 , avec u1 ∈ Vi−1 et u2 ∈ Vi−1 . Par cons´quent, (y,i) ∈ Vi−1 et (i,z) ∈ Vi−1 d’o`
                                                   e                                       u
     (y,z) ∈ Θi (Vi−1 ).
On a donc montr´ Vi ⊆ Θi (Vi−1 ).
               e                                                                               P



   Proposition 5.9           G+ = Θn · Θn−1 · . . . · Θ1 (G)

D´monstration Tout chemin de G est de longueur 1, ou poss`de des sommets interm´diaires
  e                                                              e                e
∈ {x1 , . . . ,xn } = X. Le th´or`me d´coule donc du lemme pr´c´dent, avec i = n.
                              e e     e                      e e                     P



5.4.2   Texte de l’algorithme

   Il est donn´ page 44
              e


5.4.3   Complexit´
                 e

   Pour chaque op´ration Θ, il y a au plus :
                 e
   – n + n2 acc`s validarc
               e
   – n2 acc`s ajoutarc
           e
   soit, globalement :
   – au plus n2 + n3 acc`s validarc
                        e
   – au plus n3 acc`s ajoutarc
                   e
d’o` un algorithme en O(n3 ) en termes d’acc`s ´l´mentaires.
   u                                        e ee

De plus, l’espace m´moire n’est que de 1 graphe (le graphe courant Result). En effet, le graphe
                    e
donn´ G n’est utilis´ que pour “initialiser” Result, il est donc inutile de le garder en m´moire.
    e               e                                                                     e

                                             c IFSIC 2004
44                                                                         Fermeture transitive


                              ALGORITHME DE ROY-WARSHALL


GRAPHE roy-warshall(GRAPHE G) c’est
   local SOMMET x,y,z ; ENS[SOMMET] X;
 d´but
  e

  Result ← G ; X ← G.lst som ;
   pour tout x de X
      pour tout y de X
         si Result.validarc(y,x) alors
            pour tout z de X
               si Result.validarc(x,z)
                  alors Result.ajoutarc(y,z)
                  fsi
               fpourtout
           fsi
        fpourtout
      fpourtout
 fin




5.4.4     Routage
5.4.4.1    D´finition
            e

    L’id´e du routage est la suivante: si l’on calcule la fermeture transitive G+ d’un graphe G,
        e
on est capable de r´pondre ` la question : quels que soient les sommets x et y, existe-t-il dans G
                    e        a
un chemin de x ` y? Une information de routage doit permettre de compl´ter cette r´ponse, en
                 a                                                            e         e
fournissant le trac´ d’un tel chemin (lorsque celui-ci existe). Il y a plusieurs mani`res d’obtenir
                   e                                                                 e
un routage. Nous en d´crivons une, bas´e sur la notion de table. Rappelons qu’une table est une
                       e                 e
structure de donn´es mettant en oeuvre une correspondance entre un ensemble de clefs et un
                   e
ensemble de valeurs. Le type abstrait TABLE[K,E] d´crit les tables dont l’ensemble des clefs est K
                                                     e
et l’ensemble des valeurs E (math´matiquement, ce sont les applications de K dans E). Une table
                                  e
est d´clar´e TABLE[K,E] T; elle est alors acc´d´e par les op´rations suivantes :
      e   e                                  e e             e
     – T[x] : d´livre la valeur v de type E correspondant ` la clef x (de type K).
               e                                          a
     – T[x] ←v affecte la valeur v de type E ` l’´l´ment correspondant ` la clef x (de type K).
                                            a ee                      a

Les objets de type SOMMET sont alors munis d’une table, selon la d´claration ci-dessous :
                                                                  e

TABLE[SOMMET,SOMMET] SOMMET::R
avec la signification suivante:

                                              c IFSIC 2004
5.4. Algorithme de Roy-Warshall                                                                45


   Pour tout sommet y, pour tout sommet z,
              
               nil si z ∈ Γ+ (y) o` nil signif ie pas de successeur
                                  u
              
     y.R[z] =
               successeur de y sur un chemin de y ` z dans G si
                                                       a
              
                z ∈ Γ+ (y)
     La connaissance des sommets y.R[z] permet-elle de d´terminer le trac´ d’un chemin de y `
                                                          e                 e                    a
z, ` partir de n’importe quel y? La r´ponse n’est pas toujours positive ! En effet, l’algorithme de
   a                                  e
trac´ a l’allure suivante (si y.R[z] = nil) :
     e




d´but
 e
   local SOMMET somcour;
   depuis ecrire ← y ; somcour ← y.R[z];
   jusqua somcour = z
   faire
      ecrire ← somcour ;
     somcour ← somcour.R[z];
   fait;
   ecrire ← z
fin


   Mais rien ne prouve que cet algorithme se termine ; par exemple :

         1           2           4                                  y   y.R[4]
                                                                    1   2
                                                  avec, pour R[4] : 2   3
                                                                    3   2
                     3                                              4   nil

    A partir des sommets 1, 2 ou 3, l’algorithme boucle, et pourtant les valeurs R[4] sont bien
conformes ` la d´finition.
             a     e
    Nous allons donc renforcer la d´finition, afin d’´viter cette difficult´, en imposant ` y.R[z],
                                      e              e                 e                a
si z ∈ Γ  + (y), d’ˆtre le successeur de y sur un chemin ´l´mentaire de y ` z. Il est alors facile
                   e                                     ee                a
de v´rifier que l’algorithme de trac´ se termine, puisque les valeurs successives de la variable
     e                                 e
somcour sont distinctes. (Sauf ´ventuellement y = z pour un circuit ´l´mentaire).
                                 e                                   ee
    Pour tout sommet y, pour tout sommet z,
                 
                  nil si z ∈ Γ+ (y)
                 
                 
       y.R[z] =
                  successeur de y sur un chemin ´l´mentaire de y ` z
                                                   ee               a
                 
                     dans G si z ∈ Γ+ (y)
   Dans l’exemple pr´c´dent, les valeurs y.R[4] deviennent :
                    e e

                                            c IFSIC 2004
46                                                                        Fermeture transitive



 y     y.R[4]
 1     2
 2     4
 3     2
 4     nil
et l’algorithme de trac´ vers le sommet 4, ex´cut´ ` partir de y=1, affiche 1 2 4.
                       e                     e ea

5.4.4.2      Construction des routages par l’algorithme de Roy-Warshall
    ∀y ∈ X, on consid`re les valeurs initiales de la table y.R :
                       e
                             nil si (y,z) ∈ Γ
      ∀z ∈ X : y.R[z] =
                             z si (y,z) ∈ Γ
    C’est donc l’attribut de routage vers z lorsqu’on se restreint aux chemins de longueur 1. On
modifie alors les op´rations Θx , afin qu’elles mettent ` jour les valeurs des tables R : dans le cas
                    e                                   a
o` Θx rajoute un arc entre y et z, alors y.R[z] ←y.R[x]. En effet, le chemin ´l´mentaire de y
 u                                                                                ee
a
` z qui vient d’ˆtre rep´r´ passe par x : pour aller de y ` z, on doit d’abord se diriger vers x.
                e        ee                               a
    D’o` le texte de l’algorithme, modifi´ routage :
       u                                   e

                    ALGORITHME DE ROY-WARSHALL avec ROUTAGE


GRAPHE roy-warshall(GRAPHE G) c’est
   local SOMMET x,y,z ; ENS[SOMMET] X;
 d´but
  e

     Result ← G ; X ← G.lst som ;
     -- initialisation des tables de routage
      pour tout y de X
         pour tout z de X
             si Result.validarc(y,z) alors y.R[z] ← z sinon y.R[z] ← nil fsi
         fpourtout
      fpourtout ;
     -- op´rations Θ avec gestion des tables de routage
            e
      pour tout x de X
         pour tout y de X
            si Result.validarc(y,x) alors
               pour tout z de X
                  si Result.validarc(x,z)
                     alors
                       si non Result.valid arc(y,z)
                           alors Result.ajoutarc(y,z);
                                       y.R[z] ← y.R[x]
                       fsi

                                            c IFSIC 2004
5.4. Algorithme de Roy-Warshall                                                                  47


                   fsi
                fpourtout
           fsi
        fpourtout
      fpourtout
 fin



5.4.4.3       Exemple d’ex´cution
                          e

   A la main, la repr´sentation la mieux adapt´e est matricielle. Pour g´rer le routage, au lieu
                       e                          e                       e
d’utiliser la matrice bool´enne, nous utilisons la matrice de routage R, telle que
                          e

                               y.R[z] si (y,z) ∈ Γ
       ∀y ∀z : R[y,z] =
                               0 si (y,z) ∈ Γ

Nous traitons l’exemple suivant (les cases de valeur 0 sont laiss´es vides):
                                                                 e

      1   2    3   4   5   6   7   8   9
 1                         6
 2
 3        2                    7   8
 4    1                5
 5                             7
 6                 4
 7                                 8
 8             3
 9    1   2

Op´ration θ1 : il s’agit de parcourir la colonne num´ro 1, et de s’arrˆter sur toute ligne de valeur
   e                                                e                 e
= 0 (correspondant ` Result.validarc(y,1)). Pour une telle ligne, on effectue la “recopie” des
                     a
´l´ments non nuls de la ligne 1 sur la ligne y, en mettant la valeur R[y,1] en toute case nulle
ee
R[y,z] telle que R[1,z] = 0 (ce qui correspond `:
                                                a


si Result.validarc(1,z)
        alors
           si non Result.valid arc(y,1)
                  alors Result.ajoutarc(y,z);
                          y.R[z] ← y.R[1]
           fsi
fsi

L’application de θ1 ne modifie que les lignes 4 et 9, et donne le tableau suivant :

                                                 c IFSIC 2004
48                                                                       Fermeture transitive



      1   2    3   4   5   6   7   8   9
 1                         6
 2
 3        2                    7   8
 4    1                5   1
 5                             7
 6                 4
 7                                 8
 8             3
 9    1   2                1
Le d´tail des diff´rentes ´tapes serait trop long; notons cependant que θ2 ne rajoute aucun arc
      e            e     e
(le sommet 2 est un point de sortie, c’est-`-dire un sommet sans successeur); de mˆme θ9 , car le
                                           a                                      e
sommet 9 est un point d’entr´e (c’est-`-dire un sommet sans pr´d´cesseur). On donne ci-dessous
                             e         a                       e e
le r´sultat final :
    e

      1   2    3   4   5   6   7   8   9
 1    6   6    6   6   6   6   6   6
 2
 3        2    8               7   8
 4    1   5    5   1   5   1   5   5
 5        7    7               7   7
 6    4   4    4   4   4   4   4   4
 7        8    8               8   8
 8        3    3               3   3
 9    1   2    1   1   1   1   1   1
A titre d’exemple, on va chercher le trac´ d’un chemin du sommet 1 au sommet 2; on obtient
                                           e
successivement:
   R[1,2] = 6; R[6,2] = 4; R[4,2] = 5; R[5,2] = 7; R[7,2] = 8; R[8,2] = 3; R[3,2] = 2
   d’o` le chemin : [1,6,4,5,7,8,3,2]
       u

5.4.4.4       Preuve
     Pour d´montrer la validit´ de cet algorithme, nous ´tablissons les lemmes suivants :
           e                  e                         e


     Lemme 5.10 Si pour un couple (y, z) on a, ` l’issue de l’algorithme,
                                                     a
     y.R[z] = nil, alors y.R[z] est successeur de y sur le premier chemin
     allant de y ` z rencontr´ au cours de l’algorithme.
                 a           e

D´monstration Pour tout y et tout z, la valeur y.R[z] est mise ` jour au plus une fois. En effet,
  e                                                             a
si (y,z)     ∈     Γ, cette affectation a lieu ` l’initialisation, et de plus:
                                                          a
Result.validarc(y,z) est v´rifi´. Si (y,z) ∈ Γ, la pr´condition de cette affectation implique :
                          e e                       e
    ¬ Result.validarc(y,z), et sa postcondition implique Result.validarc(y,z)                 P

                                            c IFSIC 2004
5.5. τ -minimalit´
                 e                                                                                  49



   Lemme 5.11 Si z ∈ Γ+ (y) alors le premier chemin allant de y ` z
                                                                 a
   rencontr´ au cours de l’algorithme est un chemin ´l´mentaire.
           e                                        ee

D´monstration Si (y,z) ∈ Γ, ce chemin est un arc et donc il est ´l´mentaire. Supposons
  e                                                                             ee
que tous les chemins rep´r´s jusqu’` l’op´ration Θi−1 incluse soient ´l´mentaires. Soit alors
                               ee        a      e                              ee
u = [y ∗ xi ] · [xi ∗ z] un chemin rep´r´ par l’op´ration Θi , c’est-`-dire tel que l’affectation y.R[z]
                                      ee          e                  a
←y.R[xi ] ait lieu ; si u n’est pas ´l´mentaire, il existe j < i tel que
                                     ee

      u = [y ∗ xj ∗ xi ] · [xi ∗ xj ∗ z]

et tous les autres sommets interm´diaires sont dans {x1 , . . . ,xi−1 } et diff´rents de xj , d’apr`s
                                  e                                           e                   e
l’hypoth`se de r´currence. Mais cela signifie qu’il existe un chemin
         e      e

      u’ = [y ∗ xj ] · [xj ∗ z] avec ∗ ∈ {x1 , . . . ,xi−1 }

et donc
      ∃ ≤ i − 1 : (y,z) ∈ V
Au cours du pas d’it´ration no l’affectation y.R[z] ←y.R[x ] a donc lieu, et cela contredit
                      e
l’affectation de y.R[z] lors du pas no i > .                                             P

   De ces deux lemmes on d´duit le r´sultat :
                          e         e


   Th´or`me 5.12 A l’issue de l’algorithme,
     e e

          ∀z ∈ X : les valeurs R[z] d´finissent un routage vers z
                                     e



5.5       τ -minimalit´
                      e
    La τ -minimalit´ constitue une notion int´ressante du point de vue des possibilit´s de che-
                   e                         e                                       e
minement. Il s’agit de mettre en ´vidence un graphe partiel de G, ayant la mˆme fermeture
                                  e                                            e
transitive que G – donc les mˆmes possibilit´s de cheminement – mais minimal au sens o`
                                e              e                                             u
la suppression d’un arc quelconque de ce graphe partiel supprime au moins une possibilit´ de
                                                                                           e
cheminement. Il n’y a en g´n´ral pas unicit´ de la solution.
                           e e             e


   D´finition 5.13 La relation binaire sur G(X) :
    e

          Gτ G ⇔ G+ = G +

   est une relation d’´quivalence, appel´e τ -´quivalence.
                      e                 e     e
   La classe de G sera not´e : τ (G)
                           e


                                                    c IFSIC 2004
50                                                                      Fermeture transitive



     D´finition 5.14 On appelle graphe τ -minimal de G un ´l´ment mini-
      e                                                      ee
     mal du sous-ensemble τ (G), vis-`-vis de l’ordre (chapitre 4).
                                     a

Nous verrons au chapitre 7 des techniques pour d´terminer un graphe τ -minimal de G, soit de
                                                    e
mani`re algorithmique si G est sans circuit, soit de mani`re mi-heuristique, mi-algorithmique, en
      e                                                  e
utilisant la d´composition de G en composantes fortement connexes, si G poss`de des circuits.
              e                                                                  e




                                           c IFSIC 2004
Chapitre 6

M´thodes d’exploration
 e

6.1     D´veloppement arborescent issu d’un sommet donn´
         e                                             e


      D´finition 6.1 On appelle arborescence un graphe
       e
          A = (S,Θ) tel que :

      i) ∃ un sommet s0 ∈ S et un seul tel que Θ−1 (s0 ) = ∅.
      ii) ∀s = s0 : Θ−1 (s) poss`de un seul ´l´ment.
                                e           ee
      iii) A est sans circuit.

s0 s’appelle racine de A, et tout sommet s sans successeur s’appelle une feuille de l’arborescence.
Un chemin de la racine ` une feuille s’appelle branche de l’arborescence.
                         a
    Soit maintenant G = (X,Γ) un graphe, et x ∈ X. On construit une arborescence Ax de la
mani`re suivante :
      e

   – x est la racine ,
   – It´rativement sur k ≥ 1 : ∀y ∈ Γ[k] (x) : Θ(y) = Γ(y)
       e

    Ax s’appelle d´veloppement arborescent issu d’un sommet donn´ ; chaque branche de l’arbo-
                  e                                              e
rescence correspond ` un chemin issu de x (certaines branches peuvent ˆtre infinies).
                     a                                                e




                                            c IFSIC 2004
52                                                                        M´thodes d’exploration
                                                                           e




                Exemple 5.1

                               2          6               7



                   1           4          3


               G
                               5




                                                 1
               A
                   1

                               2                                      4



                       3           6                                  2



                   4       6       7                          3             6



                   2       7       2                  4           6          7


                                                                  7
                                                                             2
                           2


                                                                  2



     Fig. 6.1 – Un graphe et son d´veloppement arborescent issu du sommet 1
                                  e




                                       c IFSIC 2004
6.2. Exploration de la descendance de x                                                       53


   Les probl`mes de cheminement issus de x que nous allons voir correspondent tous ` des
            e                                                                             a
parcours d’une partie de l’arborescence Ax , selon diff´rentes strat´gies. De tels parcours sont
                                                      e            e
encore connus sous le nom d’exploration de la descendance de x


6.2      Exploration de la descendance de x
6.2.1     Sp´cification du r´sultat
            e              e
     Explorer la descendance d’un sommet x, c’est effectuer un parcours du graphe Gx = (Γ∗ (x),Γx )
o`
 u
    Γ∗ (x) est l’ensemble des descendants de x (rappelons que x ∈ Γ∗ (x)) et
    Γx = {(y,z) | (y,z) ∈ Γ ∧ y ∈ Γ∗ (x)}.
    (Remarquons que (y,z) ∈ Γx ⇒ z ∈ Γ∗ (x)).
    Ce parcours doit permettre de visiter au moins une fois chaque sommet y ∈ Γ∗ (x) et
exactement une fois chaque arc (y,z) ∈ Γx .
    A chaque sommet (resp. arc) on attribue un bool´en sommet visit´ (resp. arc visit´) : y.sommet visit´
                                                       e              e                 e               e
(resp. (y,z).arc visit´) est vrai si et seulement si le sommet y (resp. l’arc (y,z)) a ´t´ visit´. La
                      e                                                                ee       e
coh´rence des ´tats visit´s est exprim´e par les axiomes suivants :
    e            e        e              e


(1) x.sommet visit´ e
(2) ∀z = x : z.sommet visit´ ⇒ ∃y (y,z).arc visit´ ∧ z ∈ Γ∗ (x)
                              e                   e
(3) ∀y ∀z : (y,z).arc visit´ ⇒ y.sommet visit´ ∧ z.sommet visit´ ∧ (y,z) ∈ Γx
                           e                 e                  e

   Dans l’´tat initial, on a
           e
 x.sommet visit´ e
 ∀z = x ¬z.sommet visit´    e
 ∀y ∀z : ¬(y,z).arc visit´e
   et dans l’´tat final, on doit avoir :
             e
 ∀z : z.sommet visit´ ⇔ z ∈ Γ∗ (x)
                      e
 ∀y ∀z : (y,z)z.arc visit´ ⇔ (y,z) ∈ Γx
                          e

6.2.2     Principe des m´thodes d’exploration
                        e
Invariant. Au cours d’une exploration issue de x,
    – tout sommet y ∈ X est dans l’un des trois ´tats suivants :
                                                    e
      dehors : ¬y.visit´ e
      en attente : y.visit´ ∧ ∃z (y,z) ∈ Γ ∧ ¬(y,z).visit´
                             e                           e
      termin´ y.visit´ ∧ ∀z (y,z) ∈ Γ ⇒ (y,z).arc visit´.
              e        e                                 e
    – tout arc est dans l’´tat visit´ ou non visit´
                           e        e             e
Si l’on d´signe par D (resp. A, T ) l’ensemble des sommets d’´tat dehors (resp en attente,
         e                                                        e
termin´) et V l’ensemble des arcs d’´tat visit´, les axiomes se traduisent par :
       e                               e        e
A1 x ∈ A ∪ T

                                            c IFSIC 2004
54                                                                        M´thodes d’exploration
                                                                           e


A2 ∀z = x : z ∈ A ∪ T ⇒ (∃y(y,z) ∈ V ) ∧ z ∈ Γ∗ (x)
A3 ∀y ∀z (y,z) ∈ V ⇒ y ∈ A ∪ T ∧ z ∈ A ∪ T ∧ (y,z) ∈ Γx

Condition d’arrˆt
               e
     Proposition 6.2 A = ∅ ⇔ (T = Γ∗ (x) ∧ V = Γx )

D´monstration
  e
i) Supposons A = ∅. Montrons que T = Γ∗ (x) et V = Γx .
    – Comme A ∪ T ⊆ Γ∗ (x), on a T ⊆ Γ∗ (x).
    – Soit y ∈ Γ∗ (x). Il existe un chemin u = [x,z1 , . . . ,zk ,y](k ≥ 0). Mais x ∈ T ⇒ arc visit´(x,z1 ) ⇒
                                                                                                   e
      sommet visit´(z1 ) ⇒ z1 ∈ A ∪ T = T . En r´p´tant ce raisonnement, on obtient zk ∈ T ⇒
                     e                               e e
      arc visit´(zk ,y) ⇒ sommet visit´(y) ⇒ y ∈ A ∪ T = T . Donc Γ∗ (x) ⊆ T .
               e                          e
    – V ⊆ Γx , par construction.
    – Soit (y,z) ∈ Γx . On a donc y ∈ Γ∗ (x), c’est-`-dire y ∈ T d’o` arc visit´(y,z) soit (y,z) ∈ V .
                                                    a                    u           e
      Donc, Γx ⊆ V .

ii) R´ciproquement, supposons T = Γ∗ (x) ∧ V = Γx ). Si A = ∅, il existe y ∈ A. On a donc
     e
y ∈ Γ∗ (x) (car A ⊆ Γ∗ (x)) et ∃z (y,z) ∈ Γ, (y,z) ∈ V . Mais y ∈ Γ∗ (x) ⇒ (y,z) ∈ Γx = V .
Contradiction. Donc A = ∅.                                                               P


Progression (* A = ∅ *)
    Soit y un sommet de A
    Soit S un ensemble de successeurs de y tel que ∀z ∈ S : (y,z) ∈ V .
    Pour tout z ∈ S, l’´tat de (y,z) devient visit´
                         e                         e
    si z est dans l’´tat dehors
                    e
         alors (premi`re visite de z)
                       e
               si Γ(z) = ∅
                  alors z passe dans l’´tat termin´
                                        e            e
                  sinon z passe dans l’´tat en attente
                                         e
               fsi
         sinon
               z a d´j` ´t´ visit´ ` partir d’un autre de
                      eaee       ea
               ses pr´decesseurs
                      e
    fsi
    si ∀z ∈ Γ(y) l’´tat de (y,z) est visit´ alors l’´tat de y devient termin´ fsi
                   e                      e         e                       e

Valeurs initiales
       D = X  {x}
       A =     si Γ(x) = ∅ alors ∅ sinon {x}
       T   =   si Γ(x) = ∅ alors {x} sinon ∅
       V   = ∅

                                               c IFSIC 2004
6.2. Exploration de la descendance de x                                                        55


6.2.3    Preuve


    Proposition 6.3 Les valeurs initiales satisfont l’invariant

D´monstration
 e
A1 x ∈ A ∪ T
A2 Si z = x on a z ∈ D donc z ∈ A ∪ T .
A3 V = ∅
P


    Proposition 6.4 La progression maintient l’invariant

D´monstration Soit D, A , T , V les valeurs au d´but d’une ´tape de l’it´ration, y le sommet
  e                                                 e           e          e
et S l’ensemble des successeurs de y s´lectionn´s au d´but de cette ´tape; par hypoth`se, ces
                                       e         e     e              e                e
valeurs satisfont (A1) ` (A3). Soit D , A , T , V les valeurs ` la fin du pas. Prouvons qu’elles
                        a                                     a
v´rifient les trois axiomes.
 e
A1 A ∪ T ⊆ A ∪ T donc x ∈ A ∪ T
A2 Soit z = x. Si z ∈ A ∪ T . Il y a deux cas :
    1) z ∈ A∪T . Comme (A2) est satisfait au d´but de l’´tape, on a (∃y(y,z) ∈ V )∧z ∈ Γ∗ (x).
                                                   e         e
    Comme V ⊆ V , on a bien (∃y(y,z) ∈ V ) ∧ z ∈ Γ∗ (x).
    2) z ∈ D. Alors z a ´t´ visit´ ` partir de y ∈ A ∪ T , donc (y,z) a ´t´ visit´ lors de cette
                           ee     ea                                       ee     e
    ´tape : V = V ∪ {(y,z). De plus, d’apr`s (A2) au d´but de l’´tape, y ∈ Γ∗ (x) ce qui
    e                                            e             e         e
    implique z ∈ Γ∗ (x). Donc on a bien (∃y(y,z) ∈ V ) ∧ z ∈ Γ∗ (x).
A3 Soit (y,z) ∈ V . Il y a deux cas :
    1) (y,z) ∈ V . Comme (A3) est satisfait au d´but de l’´tape, on a y ∈ A ∪ T ∧ z ∈
                                                        e          e
    A ∪ T ∧ (y,z) ∈ Γx . Comme A ∪ T ⊆ A ∪ T , on a aussi y ∈ A ∪ T ∧ z ∈ A ∪ T ∧ (y,z) ∈ Γx .
    2) (y,z) ∈ V . Cet arc a donc ´t´ visit´ lors de cette ´tape, donc y ∈ A ⊆ A ∪ T et, ` l’issue
                                  ee       e               e                             a
    de la visite, z ∈ A ∪ T . De plus, (A2) ´tant vrai au d´but de l’´tape, y ∈ A ⇒ y ∈ Γ∗ (x)
                                               e               e        e
    et donc (y,z) ∈ Γx . On a donc bien y ∈ A ∪ T ∧ z ∈ A ∪ T ∧ (y,z) ∈ Γx .
                                                                                                P



    Proposition 6.5 L’invariant et la condition d’arrˆt impliquent le
                                                     e
    r´sultat
     e

D´monstration D’apr`s la proposition 6.2
 e                 e                                                                            P



    Proposition 6.6 L’algorithme s’arrˆte apr`s un nombre fini d’´tapes
                                      e      e                  e


                                            c IFSIC 2004
56                                                                        M´thodes d’exploration
                                                                           e



D´monstration La r`gle de progression fait d´croˆ strictement la quantit´ enti`re card(Γ)-
  e                    e                      e ıtre                    e     e
card(V ) et cette quantit´ est minor´e par 0.
                         e          e                                                   P


6.2.4    Texte de l’algorithme g´n´ral d’exploration
                                e e
    L’´tat des sommets est mis en œuvre ` l’aide des trois ensembles D, A, T et celui des arcs `
       e                                    a                                                    a
l’aide de l’ensemble V ; en outre, ` chaque sommet de y ∈ A est associ´ un ensemble de sommets
                                    a                                  e
a visiter contenant les successeurs z de y tels que (y,z) ∈ V (si y ∈ D, a visiter n’est pas d´fini
                                                                                              e
et, si y ∈ T , on a a visiter = ∅).
    La fonction sous ensemble, appliqu´e ` un ensemble non vide, d´livre un sous-ensemble de cet
                                         e a                        e
ensemble. La fonction ´l´ment, appliqu´e ` un ensemble non vide, d´livre un ´l´ment quelconque
                        ee               e a                         e        ee
de cet ensemble (sans le retirer).
    Le texte de l’algorithme est donn´ page 57
                                       e

6.2.5    Complexit´
                  e
    Chaque sommet de Γ∗ (x) passe une fois et une seule dans l’´tat en attente. Lorsqu’un sommet
                                                                  e
z passe de l’´tat dehors ` l’´tat en attente, l’ensemble a visiter(z) est ´tabli, par l’appel de l’acc`s
              e          a e                                              e                           e
lst succ. Il y a donc
      card(Γ∗ (x)) appels de l’acc`s lst succ
                                    e
et, chaque acc`s ´tant, selon sa mise en œuvre, au pire en O(n), on a un algorithme en O(n2 )
                e e
(en termes d’op´rations du type validarc)
                  e


6.3     Strat´gies d’exploration particuli`res : largeur et profondeur
             e                            e
    Les strat´gies d’exploration que nous allons maintenant d´velopper d´pendent de la gestion
              e                                                 e          e
de l’ensemble A, du crit`re de choix d’un ´l´ment y dans cet ensemble (celui ` partir duquel on
                         e                  ee                                  a
tente de prolonger l’exploration lors d’un pas d’it´ration) et du choix de l’ensemble S. Nous en
                                                    e
d´veloppons deux, appel´es respectivement :
 e                        e
   1. recherche en largeur d’abord (breadth-first ou width first search)
   2. recherche en profondeur d’abord (depth-first search)
    D’autre part, le canevas d’exploration de la descendance d’un sommet x peut ˆtre utilis´
                                                                                        e         e
pour effectuer un calcul particulier sur le graphe, par exemple :
    – Ensemble des descendants de x
      ´
    – Enum´ration des chemins et circuits ´l´mentaires issus de x
             e                                ee
    – d´veloppement arborescent de hauteur minimum issu de x
        e
    – Arborescence de chemins de valeur optimum issus de x dans un graphe valu´ (ce probl`me
                                                                                    e          e
      sera trait´ au chapitre 8)
                e
    – etc.
    Dans la suite de ce chapitre, les deux premiers exemples seront examin´s; la strat´gie d’explo-
                                                                           e          e
ration en largeur et une expression r´cursive de la strat´gie d’exploration en profondeur seront
                                        e                 e
explicit´es sur le premier d’entre eux, et l’exploration en profondeur sur le second.
        e

                                               c IFSIC 2004
6.3. Strat´gies d’exploration particuli`res : largeur et profondeur
          e                            e                              57


                    ALGORITHME GENERAL D’EXPLORATION


ENS[SOMMET] D, T; ENS[ARC] V ;
exploration-generale(GRAPHE G; SOMMET x) c’est
   local ENS[SOMMET] A, S;
        ENS[SOMMET] SOMMET::a visiter ;
        SOMMET y, z ;
d´but
 e
  depuis D ← G.lst som{x} ; V ← ∅ ;
        x.a visiter ← G.lst succ(x) ;
         si x.a visiter = ∅
             alors A ← ∅ ; T ← {x}
             sinon A ← {x} ; T ← ∅
         fsi
  jusqua A = ∅
  faire
    y ← A.element ;
    S ← y.a visiter.sous ensemble;
      -- mise ` jour du statut de y
                 a
    y.a visiter ← y.a visiter S;
     si y.a visiter=∅ alors A ← A{y} ; T ← T ∪ {y} fsi ;
     pour tout z de S
        V ← V ∪ {(y,z)} ;
        -- mise ` jour du statut de z
                   a
         si z ∈ D alors D ← D{z} ;
                           z.a visiter ← lst succ(G,z) ;
                            si z.a visiter = ∅
                                alors T ← T ∪ {z}
                                sinon A ← A ∪ {z}
                            fsi
         fsi
     fpourtout
  fait
 -- exploration termin´e : Γ∗ (x) = T , Γx = V
                        e
fin




                                      c IFSIC 2004
58                                                                           M´thodes d’exploration
                                                                              e


6.3.1     Exploration en largeur d’abord
6.3.1.1     Une structure de donn´es : la file
                                 e
    Cette strat´gie consiste ` s´lectionner dans A le sommet y le plus anciennement ajout´ et `
                e            a e                                                              e a
choisir S = Γ(y). Au niveau de l’arborescence, cela revient ` effectuer un parcours en largeur (
                                                               a
niveau par niveau) : x est visit´, puis tous les arcs issus de x; ensuite, tous les successeurs de x
                                e
et les arcs qui en sont issus, puis tous les sommets de Γ[2] (x) – qui n’ont pas ´t´ visit´s – , et
                                                                                    ee      e
ainsi de suite. L’algorithme qui r´sulte de cette strat´gie visite donc les ´l´ments de Γ∗ (x) dans
                                   e                    e                   ee
l’ordre suivant :
                                                                  k−1
       x; Γ(x)  {x}; Γ[2] (x)  Γ(x)  {x}; . . . ; Γ[k] (x)          Γ[j] (x); . . .
                                                                  j=0

Pour cette raison, il est parfois qualifi´ de ”concentrique”.
                                        e
   Nous allons mettre en oeuvre cette technique avec une structure de donn´es qui s’appelle
                                                                                 e
une file. Une file est une liste sur laquelle les seules modifications possibles sont :

     1. ajout d’un ´l´ment en queue (mettreenfile)
                     ee
     2. retrait de l’´l´ment de tˆte (oterdefile)
                     ee          e

   On dit encore que cette liste est g´r´e selon la discipline P.A.P.S. (Premier Arriv´ Premier
                                      ee                                              e
Sorti) ou F.I.F.O. (First In First Out).
   Nous consid´rons une file comme un type abstrait et la d´claration
               e                                                e
FILE[E] f d´clare un objet f de type file d’objets de type E.
            e
   Les primitives d’acc`s sont :
                       e
creer                      cr´e une nouvelle file, vide
                              e
BOOL filevide              pr´dicat ` valeur vrai si et seulement si la file courante est vide
                              e       a
mettreenfile(E v)          ajoute l’objet d´sign´ par v en queue de file
                                             e    e
E oterdefile               d´livre le premier ´l´ment et l’enl`ve de la file.
                             e                 ee               e

Le principe de mise en œuvre est alors le suivant : pour le sommet y en tˆte de file, on examine
                                                                                e
s´quentiellement tous les successeurs et chacun d’eux est imm´diatement ajout´ en queue de file
 e                                                                  e                e
s’il n’a pas encore ´t´ visit´; puis y est ˆt´ de la file puisqu’il ne peut plus apporter d’information
                    ee       e             oe
nouvelle. Il est donc inutile, avec cette strat´gie, de g´rer les ensembles de successeurs a visiter,
                                                 e         e
puisque tous les arcs issus du sommet s´lectionn´ (tˆte de file) sont visit´s lors du mˆme pas
                                             e          e e                       e            e
d’it´ration.
     e

6.3.1.2     Texte de l’algorithme
     Le texte de l’algorithme est donn´ ci-apr`s, page 59.
                                      e       e

6.3.1.3     Exemple d’ex´cution
                        e
    La figure 6.2 montre le r´sultat de l’exploration en largeur d’abord issue du sommet 1 dans
                            e
le graphe de la figure 6.1

                                              c IFSIC 2004
6.3. Strat´gies d’exploration particuli`res : largeur et profondeur
          e                            e                                                        59


                            EXPLORATION LARGEUR D’ABORD


ENS[SOMMET] D, T;
ENS[ARC] V;

exploration-largeur(GRAPHE G; SOMMET x) c’est
 local ENS[SOMMET] S; -- ensemble des successeurs de la tˆte de file
                                                         e
      FILE[SOMMET] A;
      SOMMET y, z;
 d´but
  e
    depuis D ← G.lst som{x} ;
          A.creer ; A.mettreenfile(x) ;
          T ← ∅; V ← ∅;
    jusqua A.filevide
    faire
      y ← A.oterdefile ; T ← T ∪ {y} ;
      S ← G.lst succ(y) ;
      pour tout z de S
          V ← V ∪ {(y,z)} ;
           si z ∈ D
               alors D ← D{z} ; A.mettreenfile(z)
           fsi
      fpourtout
    fait
-- exploration termin´ee
 fin



6.3.2     Recherche en profondeur d’abord
6.3.2.1    Une structure de donn´es : la pile
                                e
    Cette recherche consiste ` s´lectionner dans A le sommet y le plus r´cemment ajout´, et pour
                               a e                                         e              e
S un arc non visit´ issu de y. Au niveau de l’arborescence, cela revient ` effectuer un parcours
                    e                                                        a
en descendant le plus loin possible sur chaque branche. Lorsqu’un sommet est rencontr´ :    e
   – s’il est dans l’´tat dehors, il devient en attente
                      e
   – s’il n’est pas dans l’´tat dehors, il marque l’arrˆt de la descente, et la recherche reprend `
                             e                          e                                         a
      partir de son pr´d´cesseur dans l’arborescence.
                        e e
Pour mettre en oeuvre cette technique, on utilise une structure de donn´es qui s’appelle une
                                                                               e
pile; il s’agit d’une liste sur laquelle les seules modifications possibles sont :
  1. ajout d’un ´l´ment en queue de liste (empiler)
                 ee
  2. retrait du dernier ´l´ment de la liste (d´piler).
                        ee                    e

                                            c IFSIC 2004
60                                                                         M´thodes d’exploration
                                                                            e


file              D                    R                               arborescence
1               2, 3, 4, 5, 6, 7   ∅                                      1

2, 4            3, 5, 6, 7         1                                  2              4
4, 3, 6         5, 7               1, 2                           3        6

3, 6            5, 7               1, 2, 4                                           2

6               5, 7               1, 2, 4, 3               4         6

7               5                  1, 2, 4, 3, 6                           7

                5                  1, 2, 4, 3, 6, 7                        2


R = Γ (1) = {1,2,3,4,6,7} = X  {5}

V = Γ1 = {(1,2),(1,4),(2,3),(2,6),(3,4),(3,6),(4,2),(6,7),(7,2)} = Γ  {(5,4)}


                                   Fig. 6.2 – exploration en largeur


L’´l´ment de queue de cette liste est aussi d´sign´ sous le nom de sommet de pile.
  ee                                          e    e
    On dit encore que cette liste est g´r´e selon la discipline DAPS (Dernier Arriv´ Premier
                                        ee                                            e
Sorti) ou encore LIFO (Last In First Out).
    Nous consid´rons donc une pile comme un type abstrait, et la d´claration
                e                                                     e
    PILE[E] d´clare une liste d’objets de type E g´r´s en pile.
                e                                    ee
    Les op´rations sur les piles sont alors :
          e
creer                 cr´e une nouvelle pile vide
                         e
BOOL pilevide         pr´dicat ` valeur vrai si et seulement si la pile est vide
                         e      a
empiler(E z)          ajout de z en queue
d´piler
 e                    retrait de l’´l´ment de queue (erreur si la pile est vide)
                                   ee
E sommetpile          d´livre la valeur du sommet de pile (consultation sans d´piler)
                        e                                                        e


6.3.2.2    Texte de l’algorithme

     Il est donn´ ci-apr`s, page 61
                e       e


6.3.2.3    Exemple d’ex´cution
                       e

   La figure 6.3 montre le r´sultat de l’exploration en profondeur d’abord issue du sommet 1
                             e
dans le graphe de la figure 6.1

                                                   c IFSIC 2004
6.3. Strat´gies d’exploration particuli`res : largeur et profondeur
          e                            e                              61


                       EXPLORATION PROFONDEUR D’ABORD


ENS[SOMMET] D, T;
ENS[ARC] V;

recherche-profondeur(GRAPHE G; SOMMET x) c’est
 local PILE[SOMMET] A;
      ENS[SOMMET] SOMMET::a visiter ;
      SOMMET y; -- sommet de pile
      SOMMET z; -- sommet courant
 d´but
  e
    depuis
        D ← G.lst som{x} ; V ← ∅
        A.creer ; x.a visiter ← G.lst succ(x) ;
         si x.a visiter = ∅
             alors T ← {x}
             sinon A.empiler(x); T ← ∅
         fsi ;
    jusqua A.pilevide
    faire
      y ← A.sommetpile ;
       si y.a visiter = ∅
           alors
               z ← (y.a visiter).element ;
               y.a visiter ← y.a visiter{z} ;
               V ← V ∪ {(y,z)} ;
                si z ∈ D alors
                   D ← D{z} ;
                   z.a visiter ← G.lst succ(z) ;
                    si z.a visiter = ∅
                        alors T ← T ∪ {z}
                        sinon A.empiler(z)
                    fsi
                fsi
           sinon T ← T ∪ {y} ; A.depiler
       fsi
    fait
-- exploration termin´e   e
 fin




                                         c IFSIC 2004
62                                                                               M´thodes d’exploration
                                                                                  e

     pile            D                   R                                   arborescence
     1               2, 3, 4, 5, 6, 7   ∅                                            1

     1, 2            3, 4, 5, 6, 7      ∅                                    2

     1, 2, 3         4, 5, 6, 7         ∅                                3

     1, 2, 3, 4      5, 6, 7            ∅                            4

     1, 2, 3, 4      5, 6, 7            ∅                        2

     1, 2, 3         5, 5, 7            4

     1, 2, 3, 6      5, 7               4                                        6

     1, 2, 3, 6, 7   5                  4                                        7
     1, 2, 3, 6, 7   5                  4                                    2
     1, 2, 3, 6      5                  4, 7

     1, 2, 3         5                  4, 7, 6

     1, 2            5                  4, 7, 6, 3                                        6

     1, 2            5                  4, 7, 6, 3

     1               5                  4, 7, 6, 3, 2                                            4

     1               5                  4, 7, 6, 3, 2

                     5                  4, 7, 6, 3, 2, 1

                                  Fig. 6.3 – exploration en profondeur


6.4         Exemple d’application : calcul de l’ensemble des descendants
    L’algorithme g´n´ral de recherche permet d’obtenir l’ensemble des descendants du sommet
                   e e
de d´part : en effet, cet ensemble est ´gal, ` l’issue de l’algorithme, ` T . Toutefois, l’exploration
     e                                e     a                          a
peut ˆtre simplifi´e, dans la mesure o` l’on ne cherche pas ` calculer l’ensemble V des arcs
       e          e                     u                         a
du graphe Gx , mais seulement l’ensemble Γ∗ (x) de ses sommets. Quelle que soit la strat´gie     e
d’exploration retenue, la simplification est la suivante :
     – Suppression de la variable V
     – Le statut des sommets peut ˆtre m´moris´ ` l’aide de 2 ensembles seulement :A et DESC,
                                  e     e     ea

                                                  c IFSIC 2004
6.4. Exemple d’application : calcul de l’ensemble des descendants                            63


       ce dernier contenant ` tout instant du calcul l’ensemble des sommets reconnus comme
                             a
       descendants de x, c’est-`-dire A ∪ T . En effet,
                               a
         – y ∈ D ⇔ y ∈ DESC
         – y ∈ T ⇔ y ∈ A ∧ y ∈ DESC

6.4.1    Cas de la recherche en largeur
    Nous donnons le texte de l’algorithme simplifi´ dans le cas de l’exploration en largeur (page
                                                 e
63).


                  CALCUL DES DESCENDANTS : LARGEUR D’ABORD


ENS[SOMMET] DESC;

descendants-largeur(GRAPHE G;SOMMET x) c’est
 local ENS[SOMMET] S;
       FILE[SOMMET] A;
       SOMMET y, z ;
 d´but
  e
    depuis
        DESC ← {x} ; A.creer ; A.mettreenfile(x)
      jusqua A.filevide
      faire
        y ← A.oterdefile ;
        S ← G.lst succ(y) ;
         pour tout z de S
             si z ∈ DESC
                alors
                   DESC ← DESC ∪ {z} ;
                     A.mettreenfile(z)
             fsi
         fpourtout
      fait
 fin



    La figure 6.4 montre, ` titre de comparaison avec l’exploration compl`te (figure 6.2), le
                           a                                               e
r´sultat de la recherche des descendants du sommet 1 dans le graphe de la figure 6.1
 e

6.4.2    Cas de la recherche en profondeur : expression r´cursive
                                                         e
   Le texte de cet algorithme est donn´ page 65
                                      e

                                           c IFSIC 2004
64                                                                          M´thodes d’exploration
                                                                             e

              file           DESC                                    arborescence
              1               1                                         1

              2, 4            1, 2, 4                               2              4
              4, 3, 6         1, 2, 4, 3, 6                     3             6
              3, 6            1, 2, 4, 3, 6

              6               1, 2, 4, 3, 6

              7               1, 2, 4, 3, 6, 7                                7

                              1, 2, 4, 3, 6, 7


              DESC = Γ (1) = {1,2,3,4,6,7} = X  {5}

                           Fig. 6.4 – calcul des descendants (largeur)


    On peut alors v´rifier que le mode de recherche correspond ` une recherche profondeur
                      e                                             a
d’abord. Dans une expression it´rative de cet algorithme r´cursif, la manipulation de la pile
                                   e                         e
serait alors explicite, via la variable A (cette manipulation correspond ` la m´morisation des
                                                                         a     e
contextes de retour des diff´rents appels de la proc´dure desc local).
                              e                     e


6.5      ´
         Enum´ration des chemins ´l´mentaires issus de x
             e                   ee
    Le probl`me pos´ ici est plus complexe, puisqu’il s’agit d’obtenir les trac´s de tous les chemins
            e       e                                                           e
´l´mentaires issus du sommet x. Il faut donc parcourir une sous-arborescence plus importante,
ee
puisqu’un mˆme sommet peut apparaˆ plusieurs fois (comme extr´mit´ de plusieurs chemins
             e                          ıtre                             e    e
distincts de G). En fait, les chemins ´l´mentaires issus de x sont les branches de l’arborescence,
                                       ee
parcourues jusqu’` trouver une r´p´tition dans la suite des sommets situ´s sur une branche.
                  a                 e e                                           e
Dans l’exemple de la figure 6.1, il s’agit de l’arborescence repr´sent´e graphiquement.
                                                                  e    e
    Le choix d’une exploration en profondeur s’explique par la propri´t´ suivante :
                                                                          ee


     Proposition 6.7 Lors d’une exploration en profondeur, l’´tat de la pile
                                                               e
     est un chemin ´l´mentaire d’origine x et d’extr´mit´ le sommet de pile.
                   ee                               e e

D´monstration Elle se fait par induction sur l’´tat de la pile.
 e                                             e
     – Le premier ´tat non vide de la pile est x, donc v´rifie la propri´t´.
                  e                                     e              ee
     – Supposons la propri´t´ v´rifi´e au d´but d’un pas d’it´ration,
                              ee      e e             e                     e               et   soit

                                                 c IFSIC 2004
´
6.5. Enum´ration des chemins ´l´mentaires issus de x
         e                   ee                                                                  65


               CALCUL DES DESCENDANTS : FORMULATION RECURSIVE


ENS[SOMMET] DESC;

desc local (SOMMET y) c’est
 local ENS[SOMMET] S;
       SOMMET z;
 d´but
  e
      DESC ← DESC ∪ {y} ;
      S ← G.lst succ(y) ;
       pour tout z de S faire
          si z ∈ DESC alors desc local(z) fsi
      fpourtout
 fin


descendants-recursif(GRAPHE G; SOMMET x) c’est
 d´but
  e
   DESC ← ∅ ; desc local(x)
 fin



       x . . . t y l’´tat de la pile. Montrons qu’elle reste v´rifi´e ` la fin du pas.
                     e                                        e e a
       cas 1 Le pas courant ne modifie pas l’´tat de la pile. Ce cas est trivial;
                                                e
       cas 2 Le pas courant effectue une op´ration d´piler; le r´sultat est ´vident puisqu’un
                                                 e       e          e             e
            chemin ´l´mentaire priv´ de son dernier sommet reste un chemin ´l´mentaire; ici, le
                     ee               e                                           ee
            chemin obtenu va de x ` t, ce dernier sommet ´tant le sommet de pile;
                                     a                      e
       cas 3 Le pas courant effectue une op´ration empiler. Soit z le sommet empil´. Par construc-
                                             e                                       e
            tion, z est un successeur de y, donc le nouvel ´tat de la pile x . . . t y z est bien un
                                                            e
            chemin de x au sommet de pile z. De plus le sommet z ´tant empil´ ` cette ´tape, il
                                                                      e            ea       e
            appartenait ` D, donc ne figurait pas dans la pile au d´but du pas; par cons´quent,
                          a                                          e                       e
            l’´tat de la pile ` la fin du pas est un chemin ´l´mentaire.
              e               a                            ee
                                                                                                  P


Par rapport ` l’algorithme d’exploration vu au §6.3.2, il faut consid´rer toutes les occurrences
              a                                                         e
possibles d’un sommet dans l’arborescence d’exploration : chacune d’elles, provenant d’un pr´d´cesseur
                                                                                                e e
diff´rent, engendre un nouvel ensemble de chemins via sa descendance. Ainsi, la progression doit
   e
ˆtre modifi´e de la mani`re suivante :
e           e            e
Progression Soit y le sommet de la pile; s´lectionner un successeur de y, non encore visit´. S’il
                                             e                                                 e
      n’y en a pas, alors d´piler y, qui passe dans l’´tat termin´; s’il y en a un soit z ; si z ∈ A
                           e                          e          e

                                              c IFSIC 2004
66                                                                     M´thodes d’exploration
                                                                        e


      alors il ne d´finit pas de nouveau chemin (sauf si z = x : circuit ´l´mentaire); si z ∈ D, on
                    e                                                     ee
      l’empile (c’est la premi`re fois qu’il est visit´), et donc tous ses arcs sortants deviennent
                               e                      e
      ` visiter (a visiter(z) ←lst succ(G,z)); si z ∈ T (il est d´j` pass´ dans la pile puis en est
      a                                                            ea      e
      ressorti), il faut proc´der de mˆme puisque l’´tat de la pile est un chemin ´l´mentaire de
                             e         e               e                              ee
      x ` z, et tous les chemins ´l´mentaires ayant cet ´tat de pile comme pr´fixe vont alors ˆtre
         a                       ee                       e                     e              e
      reconnus.
Un exemple d’ex´cution est donn´ page 67. Le texte de l’algorithme est donn´ page 68, et
                    e                e                                                e
une version r´cursive page 69. N.B. : l’acc`s ecrirechemin permet d’afficher l’´tat d’une pile,
               e                              e                                     e
qui correspond alors ` un chemin ´l´mentaire issu de x. Un circuit ´l´mentaire passant par un
                        a            ee                                 ee
sommet z pr´sent dans la pile est obtenu par l’acc`s ecrirecircuit(z) qui affiche l’´tat de la
               e                                        e                                 e
pile depuis le sommet z, suivi du sommet z. Ces acc`s permettent d’ailleurs d’incorporer des
                                                          e
restrictions sur la nature des chemins que l’on souhaite ´num´rer : conditions sur la longueur,
                                                              e    e
sur les sommets travers´s, etc.
                          e

6.5.1    Algorithmes gloutons et non gloutons
    Les algorithmes d’exploration pr´sent´s dans ce chapitre se classent en gloutons et non glou-
                                      e     e
tons. L’exploration de la descendance rentre dans la cat´gorie des gloutons, ce qui signifie que
                                                           e
certains r´sultats sont d´finitivement acquis avant la fin de l’ex´cution de l’algorithme : c’est le
            e              e                                      e
cas, ici, lorsqu’un sommet passe de l’´tat en attente ` l’´tat termin´ : on enregistre ainsi le fait
                                        e               a e           e
que toute l’information que l’on peut obtenir ` partir de ce sommet a ´t´ obtenue.
                                                 a                       ee
    Au contraire, l’´num´ration des chemins ´l´mentaires est un algorithme non glouton, car
                     e      e                    ee
aucun r´sultat ne peut ˆtre consid´r´ comme d´finitif avant d’avoir rencontr´ la condition d’arrˆt;
         e              e           ee           e                           e                   e
ce qui se traduit, ici, par le fait que le statut termin´ d’un sommet peut ˆtre remis en cause -
                                                        e                    e
lorsque ce sommet est ` nouveau visit´ ` partir d’un nouveau pr´d´cesseur, toute l’exploration
                         a               ea                         e e
issue de ce sommet doit ˆtre refaite, et donc le sommet “r´gresse” dans l’´tat o` il ´tait lors de
                           e                                 e              e     u e
son passage dehors → en attente.
    Nous retrouverons au chapitre 8 cette distinction entre algorithmes gloutons et non gloutons,
a
` l’occasion des calculs de chemins de valeur optimale.




                                             c IFSIC 2004
´
6.5. Enum´ration des chemins ´l´mentaires issus de x
         e                   ee                                                    67

               e          ´
Exemple d’ex´cution Enum´ration des chemins et circuits ´l´mentaires issus du sommet 1
                                e                       ee
dans le graphe de la figure 6.1 :
 pile          chemin       circuit
 1
 1,2           1,2
 1,2,3         1,2,3
 1,2,3,4       1,2,3,4
 1,2,3,4,2                  2,3,4,2
 1,2,3,4
 1,2,3
 1,2,3,6       1,2,3,6
 1,2,3,6,7     1,2,3,6,7
 1,2,3,6,7,2                2,3,6,7,2
 1,2,3,6,7
 1,2,3,6
 1,2,3
 1,2
 1,2,6         1,2,6
 1,2,6,7       1,2,6,7
 1,2,6,7,2                  2,6,7,2
 1,2,6,7
 1,2,6
 1,2
 1
 1,4           1,4
 1,4,2         1,4,2
 1,4,2,3       1,4,2,3
 1,4,2,3,6     1,4,2,3,6
 1,4,2,3,6,7   1,4,2,3,6,7
 1,4,2,3,6,7,2              2,3,6,7,2
 1,4,2,3,6,7
 1,4,2,3,6
 1,4,2,3
 1,4,2,3,4                  4,2,3,4
 1,4,2,3
 1,4,2
 1,4,2,6       1,4,2,6
 1,4,2,6,7     1,4,2,6,7
 1,4,2,6,7,2                2,6,7,2
 1,4,2,6,7
 1,4,2,6
 1,4,2
 1,4
 1

                                       c IFSIC 2004
68                                                       M´thodes d’exploration
                                                          e




                      ENUMERATION DES CHEMINS ELEMENTAIRES


ENS[SOMMET] D, T
ENS[ARC] V;

enumeration-chemins(GRAPHE G; SOMMET x) c’est
 local PILE[SOMMET] A;
       ENS[SOMMET] SOMMET.a visiter ;
       SOMMET y; -- sommet de pile
       SOMMET z; -- sommet courant
d´but
 e
   depuis
    D ← G.lst som{x} ;
      A.creer;
      x.a visiter ← G.lst succ(x){x} ;
       si x.a visiter = ∅ alors A.empiler(x) fsi
     jusqua A.pilevide
     faire
       y ← A.sommetpile ;
        si y.a visiter = ∅
           alors
             z ← (y.a visiter).element ;
             y.a visiter ← y.a visiter{z} ;
              si z ∈ A
                 alors
                    si z ∈ D alors D← D{z} fsi ;
                   z.a visiter ← G.lst succ(z) ;
                     A.empiler(z) ;
                     A.ecrirechemin
                   sinon A.ecrirecircuit(z)
                 fsi
              sinon T ← T ∪ {y} ; A.depiler
        fsi
     fait
fin




                                          c IFSIC 2004
´
6.5. Enum´ration des chemins ´l´mentaires issus de x
         e                   ee                                        69




       ENUMERATION DES CHEMINS ELEMENTAIRES : VERSION RECURSIVE


ENUM[dehors, en attente, termin´] SOMMET::etat ;--
                               e                        type ´num´r´
                                                             e   e e
PILE[SOMMET] chemin courant ;

enumerer(SOMMET y) c’est
-- pre : y.etat=en attente
    local SOMMET z
 d´but
  e
   pour tout z de G.lst succ(y)
   -- y est le p`re de z dans l’arborescence d’exploration
                 e
     cas
       z.etat= dehors,termin´ →
                            e
           chemin courant.empiler(z) ;
           chemin courant.ecrirechemin ;
           z.etat ← en attente ;
           enumerer(z)
         z.etat=en attente →
           chemin courant.ecrirecircuit(z)
      fcas
   fpourtout;
  chemin courant.depiler ;
   -- le sommet y est d´pil´
                        e e
  y.etat ← termin´e
 fin -- enumerer

enumeration-recursive(GRAPHE G; SOMMET x) c’est
 d´but
  e
  chemin courant.creer ;
   pour tout y de G.lst som
     y.etat ← dehors
   fpourtout ;
  x.etat ← en attente ;
  chemin courant.empiler(x);
  enumerer(x)
 fin




                                         c IFSIC 2004
70                  M´thodes d’exploration
                     e




     c IFSIC 2004
Chapitre 7

Circuits. Composantes fortement
connexes

7.1     D´termination de l’existence de circuits
         e
7.1.1   Principe
    Dans de nombreuses applications, on souhaite savoir si un graphe donn´ poss`de ou non des
                                                                              e     e
circuits (cf. exemple de l’interblocage). Certains des algorithmes que nous avons vus pr´c´demment
                                                                                        e e
(Roy-Warshall, descendants) pourraient ˆtre utilis´s :
                                                  e         e

£ avec Roy-Warshall on obtient l’ensemble des sommets situ´s sur un circuit, puisque de tels
                                                                 e
     sommets v´rifient (x,x) ∈ G
                e                 + .

£ si on se restreint ` l’existence de circuits situ´s dans le sous-graphe engendr´ par Γ∗ (x), x
                     a                             e                             e
     ´tant un sommet donn´, on peut utiliser l’ algorithme de recherche des descendants de x
     e                        e
     en profondeur, sachant qu’un circuit existe d`s lors qu’on trouve un sommet successeur du
                                                    e
     sommet de pile, et appartenant d´j` ` desc.
                                        eaa

    Mais, avec Roy-Warshall, la complexit´ est ´lev´e (cet algorithme r´sout le probl`me plus
                                               e    e e                    e             e
g´n´ral de la fermeture transitive), et avec la recherche des descendants de x, on ne d´tecte que
 e e                                                                                   e
les circuits passant par les sommets de Γ∗ (x). Nous allons voir un algorithme sp´cifique, appel´
                                                                                  e             e
algorithme de Marimont, permettant de r´soudre le probl`me avec une complexit´ moindre
                                               e               e                       e
que celle de Roy-Warshall. Cet algorithme est fond´ sur la propri´t´ suivante :
                                                        e             ee


   Proposition 7.1 Les propositions suivantes sont ´quivalentes :
                                                     e
   i) G est sans circuit,
   ii) G et tous ses sous-graphes poss`dent au moins un point d’entr´e
                                      e                               e
   (sommet sans pr´d´cesseur) et un point de sortie (sommet sans succes-
                    e e
   seur).

D´monstration. i) ⇒ ii) Supposons G = (X,Γ) sans circuit, et que G n’a pas de point de
 e

                                           c IFSIC 2004
72                                                  Circuits. Composantes fortement connexes


sortie. Alors :

       ∀x ∈ X,∃y ∈ X : y ∈ Γ(x)

     Autrement dit, partant d’un sommet xi quelconque, on peut construire un chemin
xi ,xi1 ,xi2 , . . . ,xik , . . . de longueur aussi grande que l’on veut ; et d`s que la longueur est > n, on
                                                                               e
obtient un circuit. D’o` contradiction avec l’hypoth`se. On montre de mani`re identique que G
                                   u                            e                         e
a au moins un point d’entr´e. Enfin, si G est sans circuit, tout sous-graphe engendr´ par une
                                        e                                                          e
partie de X est aussi sans circuit, ce qui montre la premi`re partie de la proposition.
                                                                      e
ii) ⇒ i) Supposons que G ait un circuit γ et soit Gγ le sous-graphe engendr´ par les sommetse
de ce circuit. Par construction, Gγ n’a ni point d’entr´e ni point de sortie, ce qui contredit
                                                                     e
l’hypoth`se. P
           e
     Le principe de l’algorithme est alors tr`s simple : si G ne poss`de pas de points d’entr´e ou
                                                       e                       e                        e
de points de sortie, on peut conclure que G a des circuits. Sinon, on ˆte les points d’entr´e et les
                                                                                  o                   e
points de sortie, et on recommence sur le sous-graphe engendr´. Si on aboutit au graphe vide
                                                                             e
(tous les sommets de G ont ´t´ ˆt´s), on conclut que G est sans circuit. Remarquons que cet
                                          eeoe
algorithme peut ˆtre mis en oeuvre uniquement ` partir des points d’entr´e, ou des points de
                          e                                  a                           e
sortie, ou ` partir des deux. Nous ne donnons, ci-dessous, que cette derni`re variante.
               a                                                                       e


7.1.2     Algorithme de Marimont
7.1.2.1    Analyse


Invariant :                 H sous-graphe de G ;
                            E = ensemble des points d’entr´e de H ;
                                                          e
                            S = ensemble des points de sortie de H.

Arrˆt :
   e                        H vide ou E = ∅ ou S = ∅
                            Traitement de sortie :
                                il y a des circuits si et seulement si H est non vide.

Progression : ( H non vide et E = ∅ et S = ∅ )
                      H ←ˆter de H les points d’entr´e et les points de sortie.
                           o                        e

Valeurs initiales :         H ←G

Pour am´liorer l’efficacit´ au niveau de la programmation, nous m´morisons dans une variable
        e                e                                     e
bool´enne h vide le r´sultat du test vide(H)
    e                e


7.1.2.2    Texte de l’algorithme

     Il est donn´ page 73
                e

                                                 c IFSIC 2004
7.1. D´termination de l’existence de circuits
      e                                                                                   73


                            EXISTENCE DE CIRCUITS : MARIMONT


BOOL marimont(GRAPHE G) c’est
    local GRAPHE H ; -- graphe de travail
         ENS[SOMMET] E, S; -- points d’entr´e, de sortie
                                           e
         BOOL h vide ;
 d´but
  e
    depuis
      H ← G ; h vide ← H.vide ;
       si non h vide alors
            E ← H.points entree ;
            S ← H.points sortie
       fsi ;
    jusqua h vide ou E= ∅ ou S =∅
    faire
      H ← H.sous graphe(G.lst som  E ∪ S) ; h vide ← H.vide ;
       si non h vide alors
           E ← H.points entree;
           S ← H.points sortie
       fsi
    fait ;
  -- ici, h vide ou E = ∅ ou S = ∅
   Result ← non h vide
 fin




7.1.2.3     Complexit´
                     e

    Dans le cas le pire (tous les sommets de G sont ˆt´s, et seulement 2 sommets ` chaque pas
                                                     oe                          a
d’it´ration), il y a n/2 pas d’ it´ration. Le pas n
    e                              e               o k n´cessite
                                                        e
1 acc`s points entr´e
      e             e
1 acc`s points sortie
      e
sur un sous-graphe ` n − 2(k − 1) sommets, soit :
                     a
   n − 2k + 2 acc`s lst pred
                 e
   n − 2k + 2 acc`s lst succ
                 e
   Au total, il y a donc au pire :


      n/2
            (n − 2k + 2) acc`s lst pred et autant d’acc`s lst succ.
                            e                          e
      k=1

                                              c IFSIC 2004
74                                                         Circuits. Composantes fortement connexes


Mais :
         n/2                       n(n+2)
                                      4        si n est pair,
               (n − 2k + 2) =      (n+1)2
         k=1                          4        si n est impair

     soit O(n2 ) acc`s lst pred, lst succ.
                    e


7.2       Application des graphes sans circuit : fonction ordinale


         D´finition 7.2 On appelle fonction ordinale d’un graphe G = (X,Γ)
           e
         une fonction f : X → N telle que

                 (x,y) ∈ Γ ⇒ f (x) < f (y)


On peut aussi d´finir une fonction ordinale inverse f t , qui n’est autre qu’une fonction ordinale
               e
du graphe transpos´ :
                  e
     (x,y) ∈ Γ ⇒ f t (x) > f t (y)

     Th´or`me 7.3 Un graphe poss`de une fonction ordinale si et seulement
         e e                    e
     si il est sans circuit.

D´monstration. Supposons que G poss`de une fonction ordinale, et qu’il ait un circuit :
 e                                      e
      γ = [xi1 ,xi2 , . . . ,xik ,xi1 ]
On a :

       f (xi1 ) < f (xi2 ) < . . . < f (xik ) < f (xi1 )

d’o`, par transitivit´ :
   u                 e

       f (xi1 ) < f (xi1 )

ce qui est absurde.
    R´ciproquement supposons G sans circuit et consid´rons l’algorithme de Marimont ne
     e                                                   e
prenant en compte que les points d’entr´e. Au pas d’it´ration no k, le sous-graphe courant a des
                                        e             e
points d’entr´e E. On pose alors, par d´finition :
             e                         e

       ∀x ∈ E : f (x) = k (k = 1,2, . . . ,p)

o` p est le nombre de pas, major´ par n.
 u                                 e
    f d´finit bien une fonction ordinale : si (y,z) ∈ Γ alors le sommet y est ˆt´ avant le sommet
       e                                                                     oe
z, car z ne peut pas ˆtre point d’entr´e d’un sous-graphe poss´dant le sommet y ; donc : (y,z) ∈
                     e                e                          e
Γ ⇒ f (y) < f (z).
    De plus, tous les sommets ´tant ˆt´s, f est bien d´finie sur X. P
                               e     oe                e

                                                     c IFSIC 2004
7.2. Application des graphes sans circuit : fonction ordinale                               75


    La d´monstration du th´or`me montre que l’on peut obtenir une fonction ordinale en ap-
        e                    e e
pliquant l’algorithme de Marimont ` partir des points d’entr´e, ` condition d’introduire un
                                        a                         e a
compteur de marquage des sommets. Nous laissons au lecteur le soin de r´-´crire l’algorithme.
                                                                          ee
    Remarquons qu’une fonction ordinale inverse peut aussi ˆtre obtenue en op´rant ` partir des
                                                               e              e     a
points de sortie.
    Enfin, ces deux fonctions ordinales s’interpr`tent concr`tement comme suit :
                                                  e          e
 • ` partir des points d’entr´e :
   a                              e
       ∀x ∈ X : f (x) = 1 + longueur maximum des chemins issus d’un point
                              d’entr´e et aboutissant ` x
                                     e                a
 La relation suivante est v´rifi´e :
                           e e
                            1                        si Γ−1 (x) = ∅
       ∀x ∈ X : f (x) =
                            maxy∈Γ−1 (x) (f (y)) + 1 si Γ−1 (x) = ∅
 • ` partir des points de sortie :
   a
       ∀x ∈ X : f t (x) = 1 + longueur maximum des chemins issus de x et
                               aboutissant ` un point de sortie
                                           a
 La relation suivante est v´rifi´e :
                           e e
                   t         1                      si Γ(x) = ∅
       ∀x ∈ X : f (x) =
                             maxy∈Γ(x) (f (y)) + 1 si Γ(x) = ∅
Une fonction ordinale n’est pas n´cessairement injective : deux sommets distincts x = y peuvent
                                   e
avoir une mˆme image f (x) = f (y). Une fonction non injective ne convient donc pas pour
             e
num´roter les sommets. C’est pourquoi l’on introduit la notion de num´rotation conforme, qui
     e                                                                  e
n’est autre qu’une fonction ordinale injective.


      D´finition 7.4 Soit G = (X,Γ) avec card(X) = n. On appelle
        e
      num´rotation conforme de X une injection
            e
             num : X ⇒ N
      telle que (x,y) ∈ Γ ⇒ num(x) < num(y)


      Th´or`me 7.5 Un graphe G poss`de une num´rotation conforme si et
         e e                            e     e
      seulement si il est sans circuit.

D´monstration. On peut d´montrer ce th´or`me comme corollaire du th´or`me pr´c´dent 7.3.
   e                          e              e e                           e e     e e
Toutefois, nous pr´f´rons en donner une d´monstration directe: celle-ci montre comment obtenir
                  ee                       e
une telle num´rotation ` partir d’une exploration en profondeur.
              e          a
i) Si G poss`de une num´rotation conforme, il est clairement sans circuit.
            e             e
ii) Pour montrer la r´ciproque, on suppose le graphe sans circuit, et on utilise l’algorithme
                       e
suivant, bas´ sur l’ exploration en profondeur: partant d’un sommet quelconque, on explore la
            e
descendance de ce sommet, en num´rotant les sommets visit´s de mani`re d´croissante lors de
                                     e                       e           e    e
leur sortie de la pile. Tant qu’il reste des sommets non num´rot´s, on r´it`re le proc´d´, en
                                                               e e          e e        e e
se limitant au sous-graphe engendr´ par les sommets non encore num´rot´s. L’analyse de cet
                                     e                                  e e
algorithme est donn´e ci-dessous:
                     e

Invariant :

                                           c IFSIC 2004
76                                            Circuits. Composantes fortement connexes


     T =ensemble des sommets d´j` num´rot´s, D = X  T
                               ea      e e
     Le sous-graphe engendr´ par T poss`de une num´rotation conforme,
                           e           e          e
     der num=plus petit num´ro de sommet dans T (dernier num´ro attribu´).
                             e                                 e       e

Arrˆt : D = ∅.
   e

Progression : Soit x ∈ D. Explorer en num´rotant la descendance de x (voir d´tail de ce
                                         e                                  e
traitement ci-apr`s).
                 e

Valeurs initiales : D = X, T = ∅, der num=une valeur quelconque telle que der num >
n(= card(X)).

Explorer en num´rotant: effectuer l’exploration en profondeur de la descendance de x dans
                    e
le sous-graphe engendr´ par les sommets de D (non encore num´rot´s). La num´rotation des nou-
                       e                                           e e            e
veaux sommets visit´s se fait lors de leur sortie de pile, en faisant d´croˆ le compteur der num.
                     e                                                  e ıtre
Ce traitement se termine lorsque l’exploration est finie. A ce moment, tous les descendants de
x dans le graphe sont num´rot´s, et cette num´rotation est conforme.
                           e e                    e
    Avant de d´montrer que cet algorithme permet bien d’obtenir une num´rotation conforme,
               e                                                                e
nous en donnons un exemple afin de faciliter la compr´hension.
                                                           e
    1. sommet de d´part: h (choix arbitraire)
                    e                               3. sommet de d´part: c
                                                                      e
       pile                                            pile
       h                                               c
       hk                                              ce
       hkl                                             cef
       hklo                                            ce       num(f)=6
       hkl        num(o)=15                            cei
       hk         num(l)=14                            ce       num(i)=5
       hkm                                             c        num(e)=4
       hk         num(m)=13                            ε        num(c)=3
       hkn                                          fin de la troisi`me ´tape; der num = 3
                                                                    e    e
       hk         num(n)=12
       h          num(k)=11                         4. sommet de d´part: a
                                                                      e
       ε          num(h)=10                            pile
    fin de la premi`re ´tape; der num = 10
                  e e                                  a
                                                       ε        num(a)=2
    2. sommet de d´part: d
                    e                               fin de la quatri`me ´tape; der num = 2
                                                                     e    e
       pile
       d                                            5. sommet de d´part: b
                                                                      e
       dg                                              pile
       dgj                                             b
       dg         num(j)=9                             ε        num(b)=1
       d          num(g)=8                          fin de la num´rotation
                                                                   e
       ε          num(d)=7
    fin de la deuxi`me ´tape; der num = 7
                  e    e

                                           c IFSIC 2004
7.3. Application : fermeture anti-transitive et τ -minimalit´
                                                            e                                   77

                   a                        f                          l

                                d           g              j

                   b                                                  m        o

                                e           h              k

                   c                        i                          n


                       Fig. 7.1 – Construction d’une num´rotation conforme
                                                        e

Preuve. Il faut montrer que (x,y) ∈ Γ ⇒ num(x) < num(y). pour cela, il suffit de montrer
que (x,y) ∈ Γ ⇒ y sort de la pile avant x.
    Soit donc (x,y) ∈ Γ. Lorsque y passe de l’´tat dehors ` l’´tat en attente, c’est-`-dire lorsque
                                                 e           a e                      a
y est empil´, trois cas sont ` consid´rer selon le statut de x:
             e                  a     e
   1. x est dehors. Cela veut dire que x n’a pas encore ´t´ empil´. Mais, par hypoth`se, le graphe
                                                          ee      e                    e
       est sans circuit, et comme (x,y) ∈ Γ, on a n´cessairement (y,x) ∈ Γ+ . Donc, x ne sera pas
                                                      e
       empil´ tant que y est dans la pile (les sommets empil´s pendant que y est dans la pile sont
             e                                                 e
       n´cessairement des descendants de y). Il en r´sulte que y sort de la pile avant que x soit
        e                                               e
       empil´, donc a fortiori avant que x soit d´pil´.
             e                                     e e
       Dans l’exemple, ce cas se produit notamment pour x=e, y=h.
   2. x est en attente. Cela veut dire que x est dans la pile lorsque y est empil´. D’apr`s les
                                                                                      e       e
       propri´t´s structurelles de la pile, y sera n´cessairement d´pil´ avant x.
              ee                                    e              e e
       Dans l’exemple, ce cas se produit notamment pour x=k, y=l ou m ou n.
   3. x est termin´ (c’est-`-dire d´j` num´rot´). Ce cas ne peut se produire, car il impliquerait
                    e         a      ea       e e
       que x ait ´t´ empil´, puis d´pil´, sans que son successeur y n’ait ´t´ visit´.
                 ee         e       e e                                    ee      e
P
Remarques.
1. Si, dans l’algorithme pr´c´dent, on avait num´rot´ les sommets dans l’ordre de leur sortie de
                              e e                   e e
pile (et non pas en d´croissant) on aurait obtenu une num´rotation conforme inverse c’est-`-dire
                      e                                      e                                a
une fonction ordinale inverse injective, v´rifiant
                                            e
       (x,y) ∈ Γ ⇒ num(x) > num(y)

2. Une num´rotation conforme peut aussi ˆtre obtenue pratiquement ` partir de la fonction
             e                              e                         a
ordinale des points d’entr´e, en num´rotant arbitrairement les sommets de niveau 1, puis ceux
                          e         e
de niveau 2, etc., avec une num´rotation strictement croissante.
                                e


7.3     Application : fermeture anti-transitive et τ -minimalit´
                                                               e
   A la section 5.5 nous avons mis en ´vidence la notion de τ -minimalit´, tout en faisant
                                       e                                   e
remarquer qu’un graphe donn´ pouvait poss´der plusieurs ´quivalents τ -minimaux.
                            e              e            e
   Par contre, comme va le montrer le th`or`me suivant, un graphe sans circuit G poss`de un
                                         e e                                         e
                                    ∨            ∨
seul ´quivalent τ -mimimal, not´ G. L’int´rˆt de G provient du fait que c’est le seul graphe offrant
     e                         e         ee
les mˆmes possibilit´s de cheminement que G, sans qu’aucun arc ne soit redondant.
      e              e

                                            c IFSIC 2004
78                                               Circuits. Composantes fortement connexes


     On pr´cise d’abord la notion de graphe fortement anti-transitif :
          e


     D´finition 7.6 Un graphe est fortement anti-transitif si (∃u = [x ∗ y] ∧
       e
     |u| ≥ 2) ⇒ (x,y) ∈ Γ.

   Autrement dit, aucun chemin de longueur sup´rieure ou ´gale ` 2 ne peut ˆtre sous-tendu
                                              e          e     a           e
par un arc.
   On a le r´sultat suivant :
            e


     Proposition 7.7 Soit G = (X,Γ) un graphe sans circuit. Il existe un
     seul graphe partiel de G τ -minimal τ -´quivalent ` G (D´f. 5.13 et 5.14).
                                            e          a     e
                ∨
     Ce graphe G est un ´l´ment maximal de l’ensemble des graphes partiels
                        ee
     de G fortement anti-transitifs.

D´monstration. Soit τ (G) la classe d’´quivalence de G. Si H ∈ τ (G), alors H est sans circuit.
  e                                     e
En effet, si H poss´dait un circuit passant par x, alors (x,x) serait une boucle de H + (= G+ ) et
                   e
G aurait un circuit passant par x.
    Supposons alors que τ (G) ait deux ´l´ments minimaux G1 = (X,Γ1 ) et G2 = (X,Γ2 ) et soit
                                       ee
(x,y) ∈ Γ1 et (x,y) ∈ Γ2
    On a donc (x,y) ∈ Γ+ = Γ+ d’o` :
                         1    2    u

       ∃z ∈ X,z = x,z = y : (x,z) ∈ Γ+ ∧ (z,y) ∈ Γ+
                                     2            2

     soit encore :

       (x,z) ∈ Γ+ ∧ (z,y) ∈ Γ+
                1            1

     Mais aucun chemin allant de x ` z dans G1 ne peut passer par y, sans quoi on aurait :
                                   a

        (y,z) ∈ Γ+ ∧ (z,y) ∈ Γ+ ⇒ (y,y) ∈ Γ+ donc G1 aurait un circuit.
                 1            1            1

     De mˆme, aucun chemin allant de z ` y dans G1 ne peut passer par x.
           e                              a
     Il existe donc, dans G1 , un chemin allant de x ` y, distinct de l’arc (x,y), ce qui contredit la
                                                     a
                                                                                                   ∨
τ -minimalit´ de G1 . L’hypoth`se (x,y) ∈ Γ1 et (x,y) ∈ Γ2 est donc absurde, d’o` G1 = G2 =G.
            e                 e                                                 u
    D’autre part on sait que dans une partie finie, l’unicit´ de l’´l´ment minimal en fait un
                                                             e      ee
                                                                                       ∨
minimum, c’est ` dire un ´l´ment comparable ` tous les ´l´ments de cette partie. G est donc un
                a        ee                 a          ee
graphe partiel de G.
                            ∨
    Enfin, montrons que G est un ´l´ment maximal de l’ensemble des graphes partiels de G,
                                   ee
                                                   ∨
fortement anti-transitifs. On remarque d’abord que G est le seul graphe fortement anti-transitif
de τ (G). En effet, soit H = (X,Σ), H ∈ τ (G) et H fortement anti-transitif. Alors : ∀H =
(X,Σ ) H, H’ est fortement anti-transitif. Soit (x,y) ∈ Σ et (x,y) ∈ Σ . Alors (x,y) ∈ Σ + et
                                                                                              ∨
par cons´quent, H ∈ τ (G) d’o` on conclut que H est minimal dans τ (G), et donc H = G.
        e                    u

                                              c IFSIC 2004
7.3. Application : fermeture anti-transitive et τ -minimalit´
                                                            e                                 79


    Enfin, si G’ est un graphe partiel de G, fortement anti-transitif, on a :

      G    G et donc :

      (1) G +       G+
                ∨               ∨+                           ∨+
Si par ailleurs G     G alors G        G + mais comme G = G+ on en d´duit :
                                                                    e

      (2) G+        G + . De (1) et (2) d´coule :
                                         e
                                       ∨
      G ∈ τ (G) c’est ` dire G =G
                      a

P
    Nous proposons ci-dessous (texte page 80) un algorithme, adapt´ de l’algorithme de Roy-
                                                                  e
                                           ∨
Warshall, permettant d’obtenir G. Il consiste ` construire la fermeture transitive de G et `
                                                  a                                             a
rep´rer les arcs nouveaux introduits par les op´rations Θ. On travaille sur deux copies de G, et
    e                                           e
` l’issue de l’algorithme on v´rifie, sur G+ , que G ´tait bien sans circuit. (On se place dans le
a                             e                     e
cas o` X = 1..n).
      u


                                               a                  b




                                  d                     c             f




                                               g                  e



                                     Fig. 7.2 – Un graphe sans circuit


Exemple Soit le graphe repr´sent´ figure 7.2. Les op´rations Θ successives produisent les
                                  e     e                   e
r´sultats suivants:
 e
     Op´ration ajout dans G2
        e                                   retrait dans G1
         Θa       (d,b)                     (c,b)
         Θb       (a,f),(d,f)               (c,f)
         Θc       (d,e),(g,a),(g,b),(g,f) (d,a)
         Θd                                 (g,c),(g,e)
         Θe
         Θf       (a,e),(b,e)               (c,e),(c,f)
         Θg
    D’o` la fermeture τ -minimale repr´sent´e figure 7.3
       u                                  e    e

                                                   c IFSIC 2004
80                                          Circuits. Composantes fortement connexes


                                     a                  b




                             d                c                  f




                                     g                  e



                              Fig. 7.3 – Fermeture τ -mininale



                        GRAPHE SANS CIRCUIT : τ -MINIMALITE


GRAPHE tau-minimalite(GRAPHE G) c’est
 local GRAPHE G1, G2 ;
       SOMMET x, y, z; ENS[SOMMET] X;
d´but
 e
  G1 ← G ; G2 ← G ; X ← G.lst som ;
   pour tout x de X
     pour tout y de X
        si G2.validarc(y, x) alors
           pour tout z de X
              si G2validarc(x, z) alors
                   G1.oter arc(y,z) ; G2.ajout arc(y,z)
                 fsi
              fpourtout
            fsi
         fpourtout
     fpourtout ;
     si existe x de G2.lst som telque G2.validarc(x, x)
         alors -- G a un circuit : pas de fermeture τ -minimale
         sinon Result ← G1
     fsi
fin




                                         c IFSIC 2004
7.4. Composantes fortement connexes                                                            81


7.4       Composantes fortement connexes

7.4.1     D´finition
           e


        D´finition 7.8 Soit G = (X,Γ) un graphe. On consid`re la relation
          e                                              e
        binaire sur X :

             xRy ≡ (x ∈ Γ∗ (y)) ∧ (y ∈ Γ∗ (x))

        C’est une relation d’´quivalence dont les classes s’appellent composantes
                             e
        fortement connexes de G (en abr´g´ : c.f.c.).
                                          e e


        Proposition 7.9 Deux sommets appartiennent ` la mˆme c.f.c. si et
                                                          a e
        seulement si ils sont situ´s sur un mˆme circuit.
                                  e          e


  e            ´
D´monstration. Evident, puisque (x ∈ Γ∗ (y))∧(y ∈ Γ∗ (x)) ⇔ x et y sont sur un mˆme circuit.
                                                                                e
P


   Proposition 7.10 Si deux sommets x et y appartiennent ` une mˆme
                                                               a       e
   c.f.c. C, alors tout chemin de x ` y est enti`rement inclus dans C.
                                    a           e


D´monstration. Soit u un chemin de x ` y (par hypoth`se, de tels chemins existent), et z un
  e                                         a              e
sommet de ce chemin. On a donc : u = u1 · u2 , avec u1 chemin de x ` z, et u2 chemin de z `
                                                                       a                         a
y.Par hypoth`se, on a aussi : il existe un chemin u de y ` x. Consid´rant u2 · u · u1 , on obtient
              e                                          a          e
un circuit de z ` z, passant par x et y. Donc z appartient ` la mˆme c.f.c. que x et y.
                a                                           a    e


   D´finition 7.11 Un graphe est fortement connexe s’il poss`de une seule
     e                                                     e
   composante fortement connexe.


On remarque donc que, si |X| = n, un graphe G ∈ G(X) poss`de
                                                         e
     - au plus n c.f.c.; ce cas extrˆme est obtenu si et seulement si G est sans circuit (chacune
                                    e
c.f.c. est alors r´duite ` un seul sommet),
                  e      a
   - au moins une c.f.c. : ce cas extrˆme est obtenu lorsque le graphe est fortement connexe
                                      e
(tous les sommets sont sur un mˆme circuit, ou encore, chaque couple de sommets est reli´ par
                                 e                                                      e
au moins un chemin).



                                             c IFSIC 2004
82                                               Circuits. Composantes fortement connexes


     D´finition 7.12 Soit R une relation d’´quivalence sur X. Le graphe
        e                                      e
     r´duit selon les classes de R est d´fini par :
      e                                 e

          GR = (X/R,ΓR ), o`
                           u

     X/R = ensemble des classes de la relation R (ensemble quotient)
     (Ci ,Cj ) ∈ ΓR ⇔ ∃x ∈ Ci ,∃y ∈ Cj : ((x,y) ∈ Γ) ∧ (Ci = Cj )

Autrement dit, tous les sommets situ´s dans une mˆme classe sont confondus en un seul sommet
                                       e               e
(on ne les distingue plus les uns des autres), et un arc relie une classe ` une autre chaque fois que,
                                                                          a
dans le graphe initial, un repr´sentant de la premi`re classe ´tait pr´d´cesseur d’un repr´sentant
                                e                    e          e       e e                  e
de la seconde classe. Si on prend pour R la relation ayant servi ` d´finir les composantes fortement
                                                                  a e
connexes, on obtient le graphe r´duit selon les c.f.c..
                                    e


     Proposition 7.13 Le graphe r´duit selon les composantes fortement
                                 e
     connexes est sans circuit.

D´monstration. Si il existait un circuit
  e
    Ci1 , . . . ,Cik ,Ci1 dans GR , alors il existerait un circuit
    xi1 ∗ . . . ∗ xik ∗ xi1 dans G, avec
    xi1 ∈ Ci1 , . . . ,xik ∈ Cik et ceci impliquerait
    Ci1 = . . . = Cik P
    La propri´t´ pr´c´dente signifie en particulier que, en suivant un chemin de G, si on sort
                  ee e e
d’une c.f.c. on ne peut plus y revenir.


     D´finition 7.14 On appelle composante fortement connexe terminale
       e
     de G un point de sortie du graphe r´duit.
                                        e

Autrement dit, si en parcourant un chemin de G on atteint une c.f.c. terminale, on ne peut plus
en sortir.


     Proposition 7.15 Soit C un sous-ensemble de sommets tel que, ∀x ∈
     C, ∀y ∈ C, (x ∈ Γ∗ (y)) ∧ (y ∈ Γ∗ (x)). Si C n’a pas d’arc sortant, alors
     C est une c.f.c. terminale.

D´monstration. Clairement, tous les sommets de C sont dans une mˆme c.f.c. C . On a donc
  e                                                                      e
C ⊆ C . Supposons que C = C . Cela signifie qu’il existe un sommet z, tel que z ∈ C et z ∈ C.
Puisque x ∈ C on a x ∈ C et donc il existe un chemin de x ` z. Comme x ∈ C et z ∈ C, ce
                                                                a
chemin comporte un arc sortant de C, ce qui contredit l’hypoth`se. Donc, C = C , c’est-`-dire
                                                                  e                       a
C est une c.f.c. Comme elle n’a pas d’arc sortant, elle est terminale. P
    Dans les sections suivantes, on donne trois algorithmes permettant de d´terminer les c.f.c.
                                                                              e
d’un graphe. Puis nous verrons quelles applications on peut tirer de cette d´composition.
                                                                            e

                                              c IFSIC 2004
7.4. Composantes fortement connexes                                                            83


7.4.2      Algorithme de FOULKES
   Cet algorithme s’applique ` la fermeture transitive G+ de G. (Il suppose donc celle-ci d´j`
                               a                                                           ea
d´termin´e). Il est bas´ directement sur la d´finition, qui peut s’´crire encore :
 e      e              e                     e                    e

        xRy ⇔ (x = y) ∨ (x,y) ∈ Γ+ ∧ (y,x) ∈ Γ+

7.4.2.1    Principe
   Il est tr`s simple, et s’appuie sur trois constatations :
            e
   –  un sommet appartient ` sa propre classe
                              a
   –  un sommet ne peut appartenir qu’` une seule classe
                                           a
   –  si un sommet n’est pas son propre descendant, il est seul dans sa classe (il n’est pas situ´
                                                                                                 e
      sur un circuit).
Les sommets sont examin´s s´quentiellement; soit x le sommet courant. Trois cas sont ` distin-
                            e e                                                           a
guer quant ` la situation de x :
            a
   1. x a d´j` ´t´ rang´ comme ´l´ment de la classe d’un sommet y examin´ avant lui (c’est-`-dire
           eae e       e         ee                                         e                a
      y ≤ x). Dans ce cas, cl(x) = cl(y) (d´j` calcul´e)
                                              ea      e
   2. x n’est pas encore class´ et n’est pas son propre descendant, c’est-`-dire (x,x) ∈ Γ+ . Dans
                              e                                            a
      ce cas, cl(x) = {x}.
   3. x n’est pas encore class´, et (x,x) ∈ Γ+ . Dans ce cas, les ´l´ments de cl(x), outre x lui-
                               e                                   ee
      mˆme, sont ` rechercher parmi les y tels que y > x; en effet, s’il existait y ≤ x avec
        e           a
      y ∈ cl(x), x aurait ´t´ class´ lors de l’examen de y, ant´rieur ` celui de x.
                           ee      e                           e      a
L’analyse de l’algorithme en d´coule imm´diatement :
                                e            e

Invariant             (1 ≤ x ≤ n) ∧
                      P RIS = {y | cl(y) est calcul´ } ∧
                                                   e
                      {1 .. x − 1} ⊆ P RIS

Condition d’arrˆt x = n
               e

Progression           cas x ∈ P RIS ⇒
                              cl(x)←cl(y)
                          (x ∈ P RIS) ∧ ((x,x) ∈ Γ+ ) ⇒
                              cl(x)←{x}
                          (x ∈ P RIS) ∧ ((x,x) ∈ Γ+ ) ⇒
                              cl(x)←{x};
                              pourtout y de [x + 1..n] faire
                                   si ((x,y) ∈ Γ+ ) ∧ ((y,x) ∈ Γ+ ) alors
                                      cl(x)←cl(x) ∪ {y} ;
                                   fsi
                              fpour
                          fcas ;
                      P RIS←P RIS ∪ cl(x) ;

                                            c IFSIC 2004
84                                              Circuits. Composantes fortement connexes


                      x←x + 1

Valeurs initiales     x←1 ; P RIS←∅


7.4.2.2    Texte de l’algorithme

     Il est donn´ page 84
                e


                                 ALGORITHME DE FOULKES


ENS[SOMMET] SOMMET::cl : ;

foulkes(GRAPHE G+ ) c’est
 local ENS[SOMMET] PRIS;
      SOMMET x, y;
 d´but
  e
     PRIS ← ∅ ;
      pour x depuis 1 jqa n faire
        si x ∈ PRIS alors
           x.cl ←{x} ;
            si G+ .validarc(x, x) alors
               -- x est sur un circuit ; recherche des sommets de sa classe
                pour y depuis x + 1 jqa n faire
                   si G+ .validarc(x, y) et G+ .validarc(y, x)
                      alors x.cl ← x.cl ∪{y}
                  fsi
               fpour ;
               pour tout y de x.cl faire y.cl ← x.cl fpourtout ;
              PRIS ← PRIS ∪ x.cl
           fsi
        fsi
      fpour
 fin




7.4.2.3    Complexit´
                    e

     – construction de la fermeture transitive : au moins O(n3 )
     – le nombre d’acc`s validarc est ≤ n2
                      e

                                             c IFSIC 2004
7.4. Composantes fortement connexes                                                               85


7.4.3     Algorithme descendants-ascendants
7.4.3.1   Principe
   Il op`re directement sur le graphe donn´ G, et utilise les algorithmes de recherche des ascen-
        e                                   e
dants et des descendants d’un sommet donn´.   e
   Si on d´signe par asc(x) (resp. desc(x)) la fonction d´livrant l’ensemble des ascendants (resp.
          e                                              e
descendants) de x, on peut ´crire :
                            e
      cl(x) = asc(x) ∩ desc(x)
En fait, lorsqu’on calcule la c.f.c. d’un sommet x, il n’est pas n´cessaire de calculer l’ensemble de
                                                                  e
tous les ascendants (resp. descendants) de x. En effet, comme le montre la proposition suivante,
lors de l’exploration de la descendance de x (calcul de desc(x)), si on rencontre un sommet y d´j` ea
class´, alors aucun descendant de y ne peut ˆtre dans la classe de x. (Mˆme chose en rempla¸ant
     e                                        e                             e                    c
descendant par ascendant).
    Par cons´quent, dans la proc´dure de recherche des descendants de x (resp. ascendants) on
              e                     e
peut se limiter au sous-graphe engendr´ par les sommets de G non encore class´s.
                                           e                                         e


   Proposition 7.16 Soit y ∈ desc(x); si y ∈ cl(x) alors (desc(y)∩cl(x) =
   ∅)
   Soit y ∈ asc(x); si y ∈ cl(x) alors (asc(y) ∩ cl(x) = ∅)


D´monstration. Soit y ∈ Γ∗ (x) ∧ y ∈ cl(x); supposons que z ∈ Γ∗ (y) ∩ cl(x). On a alors :
  e
       z ∈ Γ∗ (y) ∧ x ∈ Γ∗ (z) ⇒ x ∈ Γ∗ (y)
et comme y ∈ Γ∗ (x) ceci contredit y ∈ cl(x).
    On d´montre de mˆme la deuxi`me partie de la proposition (ascendants) P
          e             e            e
    Ici, on donne une version r´cursive du calcul des ascendants, mais les autres versions (largeur
                                e
ou profondeur it´ratives) conviendraient.
                  e

7.4.3.2   Texte de l’algorithme
   Le texte est donn´ page 86
                    e

7.4.3.3   Complexit´
                   e
   Chaque recherche de descendants-non-pris et ascendants-non-pris n´cessite exactement
                                                                       e
card(Γ∗ (x) ∩ (X  P RIS)) ≤ n − #(sommets class´s) acc`s lst succ
                                                     e      e
card (Γ−1 )∗ (x) ∩ (X  P RIS) ≤ n − #(sommets class´s) acc`s lst pred
                                                          e    e
   Or ` l’examen de x, il y a au moins x − 1 sommets class´s, et donc la complexit´ est, au
        a                                                      e                   e
plus :
       n(n + 1)
                 acc`s lst succ, autant d’acc`s lst pred, soit
                    e                        e
           2
          n2
       O( ) acc`s lst succ, lst pred
                  e
          2

                                             c IFSIC 2004
86                                           Circuits. Composantes fortement connexes



                      COMPOSANTES FORTEMENT CONNEXES :
                          ASCENDANTS-DESCENDANTS


ENS[SOMMET] SOMMET::cl : ;
ascendants-descendants(GRAPHE G) c’est
   local ENS[SOMMET] D, A, PRIS;
d´but
 e
 -- initialisation
  PRIS ← ∅ ;
 -- classement
  pour tout x de G.lst som
    si x ∈ PRIS alors
     A ← asc non pris(x) ; D ← desc non pris(x) ;
     x.cl ← A ∩ D ;
      pour tout y de x.cl faire y.cl ← x.cl fpourtout ;
     PRIS ← PRIS ∪ x.cl
    fsi
  fpourtout
fin

ENS[SOMMET] S;
ENS[SOMMET] asc non pris (SOMMET x) c’est
     d´but
      e
       S ← ∅ ; anp(x) ; Result ← S
     fin;

 anp(SOMMET y) c’est
     local ENS[SOMMET] E;
             SOMMET z;
     d´but
      e
       S ← S ∪{y} ; E ← G.lst pred(y) ;
       E ← E  PRIS ;
       pour tout z de E faire
          si z ∈ S alors anp(z) fsi
       fpourtout
     fin;;

ENS[SOMMET] desc non pris (SOMMET x) c’est ;
   -- identique ` asc non pris en rempla¸ant lst pred par lst succ
                 a                      c




                                          c IFSIC 2004
7.4. Composantes fortement connexes                                                                87


7.4.4     Algorithme de TARJAN
   Cet algorithme fournit non seulement la d´composition du graphe en composantes fortement
                                             e
connexes, mais de plus il d´livre les composantes avec une num´rotation conforme (par rapport
                           e                                  e
au graphe r´duit selon ses composantes fortement connexes).
           e

7.4.4.1    Principe de l’algorithme de TARJAN
    Cet algorithme g´n´ralise aux graphes quelconques l’algorithme de num´rotation conforme
                       e e                                                         e
des graphes sans circuit, bas´ sur l’exploration en profondeur, vu en 6.3.2. Il est bas´ sur l’ob-
                               e                                                             e
servation suivante : si le graphe ´tait sans circuit, les c.f.c. se confondraient avec les sommets, et
                                  e
l’algorithme de num´rotation conforme des sommets r´pond ` la question. Si le graphe poss`de
                      e                                    e         a                            e
des circuits, on se ram`ne ` un graphe sans circuit en consid´rant le graphe r´duit selon les c.f.c.,
                        e a                                       e               e
ce qui revient ` traiter des sous-ensembles de sommets situ´s sur un mˆme circuit comme un
                  a                                                 e          e
seul “macro-sommet”. Or, lors d’une exploration en profondeur, on est capable de d´terminer   e
des “segments” de pile dont tous les ´l´ments appartiennent ` un mˆme circuit : chaque fois
                                          ee                           a     e
que l’on visite un arc allant du sommet de pile y ` un sommet z appartenant ` la pile, tous les
                                                      a                              a
sommets situ´s dans la pile depuis z jusqu’` y sont sur un mˆme circuit (donc appartiennent `
               e                               a                     e                               a
une mˆme c.f.c.). De plus, d’apr`s la proposition 7.15, on saura qu’un tel ensemble de sommets
       e                          e
constitue une c.f.c. (terminale dans le sous-graphe engendr´ par les sommets non encore class´s)
                                                                 e                                 e
d`s que tous les arcs sortants de ce sous-ensemble sont visit´s.
  e                                                                e
    Pour mettre en oeuvre cette id´e, il suffit de remplacer les sommets par des sous-ensembles
                                     e
de sommets dans l’algorithme de num´rotation conforme. On va donc travailler sur un graphe
                                          e
qui, ` chaque ´tape, sera une r´duction du graphe initial selon des sous-ensembles de sommets
     a           e               e
reconnus comme faisant partie d’une mˆme c.f.c.
                                           e

Invariant
   – X est partitionn´ en C1 , . . . ,Ck :
                     e

                                X = C1 ∪ . . . Ck , et ∀i = j : Ci ∩ Cj = ∅

   – Chaque sous-ensemble C est dans l’un des trois ´tats suivants:
                                                    e
          – dehors, et dans ce cas, |C| = 1, et le sommet constituant C n’a pas ´t´ visit´;
                                                                                 ee      e
          – en attente (dans la pile): ∀y ∈ C, y est visit´ et au moins un arc sortant de C n’est
                                                          e
            pas visit´;
                     e
          – termin´: ∀y ∈ C, y est visit´ et tous les arcs sortants de C ont ´t´ visit´s. Dans ce
                   e                     e                                    ee      e
            cas, C est une c.f.c.

Arrˆt Pile vide (pas de sous-ensemble en attente). Ceux qui sont termin´s constituent les c.f.c.
     e                                                                     e
d´j` d´termin´es. S’il reste des sous-ensembles dehors, on recommence une exploration ` partir
 ea e         e                                                                       a
de l’un des ces sous-ensembles. Sinon, toutes les c.f.c. ont ´t´ obtenues.
                                                             ee

Initialement Soit {x} le sous-ensemble (` un sommet) dont est issu l’exploration
                                           a
   – X = {1} ∪ {2} ∪ . . . {n} (en supposant que les sommets sont num´rot´s de 1 ` n.
                                                                     e e         a

                                              c IFSIC 2004
88                                                Circuits. Composantes fortement connexes


     – num=num´ro initial de c.f.c
              e
     – {x} est empil´ si Γ(x) = ∅, termin´ sinon (dans ce cas, c’est la c.f.c. num´ro num).
                    e                    e                                        e
     – Tous les autres sous-ensembles sont dehors.
     – Aucun arc n’a ´t´ visit´.
                     ee       e

Cette situation initiale v´rifie bien l’invariant. En particulier, si Γ(x) = ∅, {x} = cf c(x) puisque
                          e
x est alors point de sortie.



Progression Soit C le sommet de pile.

     – Si C n’a pas d’arc sortant non visit´, alors
                                           e
          – A.depiler ; mettre C dans T , ensemble des sommets termin´s ;
                                                                     e
          – num ←num − 1 (C constitue une c.f.c, on lui attribue le num´ro num)
                                                                       e
     – Sinon, soit (y,z) un arc sortant de C, non visit´, et Cz le sous-ensemble contenant z (par
                                                         e
       construction, il y en a un et un seul, cf. invariant).
          – l’arc (y,z) devient visit´;
                                     e
              – Si Cz ∈ D (dans ce cas, Cz = {z}), alors A.empiler(Cz ); enlever Cz de D
              – Si Cz ∈ A, fusionner dans C tous les sous-ensembles qui sont dans la pile depuis
                Cz jusqu’` C (tous les sommets de ces sous-ensembles sont sur un mˆme circuit)
                         a                                                          e
              – Si Cz ∈ T , pas d’action
    Nous ne d´montrerons pas formellement que la progression maintient l’invariant, mais le
              e
lecteur peut ais´ment s’en convaincre.
                e



7.4.4.2    Exemple

     Nous allons d’abord montrer sur l’exemple de la figure 7.4 le fonctionnement de l’algorithme.


     n           k            a            d                  c     g            h            o




  m              l            b            f              e         i            j


                        Fig. 7.4 – Exemple pour l’ algorithme de TARJAN

                                               c IFSIC 2004
7.4. Composantes fortement connexes                                                                    89


    PILE
    {a}
    {a} {b}
    {a} {b} {d}
    {a} {b} {d} (b)                        Circuit d´tect´ vers b
                                                    e    e
    {a} {b, d}
    {a} {b, d} {c}
    {a} {b, d} {c} {g}
    {a} {b, d} {c} {g} {h}
    {a} {b, d} {c} {g} {h} {o}
    {a} {b, d} {c} {g} {h} {o} (h)         Circuit d´tect´ vers h
                                                    e    e
    {a} {b, d} {c} {g} {h, o}
    {a} {b, d} {c} {g} {h, o} (g)          Circuit d´tect´ vers g
                                                    e    e
    {a} {b, d} {c} {g, h, o}               Tous les arcs issus de o sont visit´s: on ”remonte” ` h
                                                                              e                a
    {a} {b, d} {c} {g, h, o} {i}
    {a} {b, d} {c} {g, h, o} {i} {j}
    {a} {b, d} {c} {g, h, o} {i} {j} (h)   Circuit d´tect´ vers h
                                                    e    e
                                           Tous les arcs issus de j sont visit´s: on ”remonte” ` i puis
                                                                              e                  a
    {a} {b, d} {c} {g, h, o, i, j}
                                           ` h puis ` g
                                           a        a
                                           Tous les arcs sortant de {g,h,o,i,j} sont visit´s: on d´pile
                                                                                           e       e
                                           ce sous-ensemble, qui est la c.f.c. C15 = {g,h,o,i,j}
    {a} {b, d} {c}
    {a} {b, d} {c} {f }
    {a} {b, d} {c} {f } {e}
                                           g est d´j` class´; tous les arcs sortant de {e} sont visit´s:
                                                  ea       e                                         e
    {a} {b, d} {c} {f } {e} (g)
                                           on d´pile cette c.f.c C14 = {e}
                                                e
    {a} {b, d} {c} {f } (d)                Circuit d´tect´ vers d
                                                    e    e
                                           Tous les arcs issus de f sont visit´s: on ”remonte” ` c puis
                                                                              e                a
    {a} {b, d, c, f }
                                           ` d puis ` b
                                           a        a
    {a} {b, d, c, f } (f )                  f appartient d´j` au sommet d e pile: pas de nouveau circuit.
                                                          ea
    {a} {b, d, c, f }                      Tous les arcs sortants de {b,d,c,f } sont visit´s :
                                                                                          e
                                           on d´pile cette c.f.c C13 = {b,d,c,f }
                                                e
    {a}
    {a} (d)                                d est d´j` class´; tous les arcs sortant de {a} sont visit´s:
                                                  ea       e                                         e
                                           on d´pile cette c.f.c C12 = {a}
                                                e
    ε                                      Pile vide : toute la descendance de f a a ´t´ class´e.
                                                                                      ee      e
                                                                                 ¯




                                              c IFSIC 2004
90                                                   Circuits. Composantes fortement connexes

                             Repartir d’un sommet non class´.
                                                           e
     {k}
     {k}       (a)           a est d´j` class´.
                                    ea       e
     {k}       {m}
     {k}       {m} {n}
     {k}       {m} {n} (m)   Circuit d´tect´ vers m
                                      e    e
     {k}       {m, n}        Tous les arcs issus de n sont visit´s: on ”remonte” ` m
                                                                e                a
                             Tous les arcs sortant de {m,n} sont visit´s:
                                                                        e
                             on d´pile cette c.f.c C11 = {m,n}
                                 e
     {k}                     Tous les arcs sortant de {k} sont visit´s:
                                                                     e
                             on d´pile cette c.f.c C10 = {k}
                                 e
     ε

     { }
     { } (b)                 b est d´j` class´.
                                    ea       e
     { } (m)                 m est d´j` class´.
                                     ea       e
                             Tous les arcs sortant de {l} sont visit´s:
                                                                    e
                             on d´pile cette c.f.c C9 = { }
                                  e
     ε                                                                      ´             ´
                             Pile vide et tous les sommets sont class´s : EXECUTION TERMINEE.
                                                                        e


    On a obtenu 7 c.f.c, num´rot´es de 9 ` 15. On effectue une translation de num´ros, en
                              e e         a                                            e
retranchant 8, pour avoir une num´rotation contigu¨ de 1 ` 7. On obtient alors le graphe r´duit
                                  e               e      a                                e
(figure 7.5) qui montre qu’on a bien une num´rotation conforme
                                            e

     (Ci ,Cj ) ∈ ΓR ⇒ i < j



                                                                     C5

         C1                                                        {b,c,d,f }            C7
         {k}                                                                           {g,h,o,i,j}




                               C3                       C4

                              {m,n}                     {a}


                                                                                C6
         C2
                                                                                {e}
      { }



                                Fig. 7.5 – Graphe r´duit de la figure 7.4
                                                   e


7.4.4.3        Mise en œuvre et texte de l’algorithme
    Pour r´aliser l’algorithme ci-dessus, en plus de la pile, on attache ` chaque sommet y ∈ X
           e                                                             a
les attributs suivants :

                                                  c IFSIC 2004
7.4. Composantes fortement connexes                                                       91


  ENT SOMMET::pospile         d´finit la position de y dans la pile (non d´fini si y n’a
                                e                                          e
                              pas encore ´t´ atteint).
                                           ee
  ENT SOMMET::marque          - 0 si y n’a pas encore ´t´ atteint,
                                                         ee
                              - y.pospile lorsque y est empil´,  e
                              - puis, ´ventuellement diminu´e lorsque y est rep´r´
                                       e                        e                   ee
                              comme appartenant ` la c.f.c. d’un sommet empil´
                                                       a                              e
                              avant lui.
  SOMMET SOMMET::pred         p`re du sommet y dans l’arborescence d’exploration.
                                e
  ENS[SOMMET] SOMMET::S       ensemble des successeurs de y, dans le sous- graphe
                              partiel des sommets non class´s, qui ne sont pas encore
                                                              e
                              empil´s (comme dans l’algorithme d’´num´ration des
                                     e                                e     e
                              chemins ´l´mentaires).
                                         ee
  ENT SOMMET::ncl             num´ro de la c.f.c. ` laquelle appartient y (ind´fini tant
                                   e              a                           e
                              que y n’est pas class´).
                                                     e
  Le texte de l’algorithme est donn´ page 92 et suivantes.
                                     e




                                           c IFSIC 2004
92                                       Circuits. Composantes fortement connexes


                            ALGORITHME DE TARJAN


tarjan(GRAPHE G) c’est
   local PILE[SOMMET] L;
        ENS[SOMMET] NC; -- sommets non class´s
                                            e
        SOMMET finchemin, z ;
        ENT compt ; -- compteur du num´ro de la cfc courante
                                      e


d´but
 e
   depuis NC ← G.lst som ; L.creer ; compt ← 0 ;
      pourtout y de NC y.marque ← 0 fpourtout ;
   jusqua NC = ∅
   faire
     finchemin ← ´l´ment(NC) ; L.empiler(finchemin) ;
                    ee
     finchemin.S ← G.lst succ(finchemin) ;
     finchemin.S ← finchemin.S ∩ NC ;
     finchemin.marque ← L.taille ;
     finchemin.pospile ← L.taille ;
      depuis
      jusqua L.vide
      faire
         si finchemin.S = ∅
            alors z ← ´l´ment(finchemin.S) ;
                         ee
                 si z.marque = 0
                    alors L.empiler(z) ;
                        z.S ← G.lst succ(z) ;
                        z.S ← z.S ∩ NC ;
                        z.marque ← L.taille ;
                        z.pospile ← L.taille ;
                        z.pred ← finchemin ;
                        finchemin ← z
                    sinon si finchemin.marque > z.marque
                                  alors finchemin.marque ← z.marque
                                fsi
                fsi
            sinon si finchemin.marque = finchemin.pospile
               alors z ← finchemin ;
                    finchemin ← z.pred ;
                    finchemin.marque ← z.marque
               sinon -- sortie d’une nouvelle cfc
                  depuis compt ← compt + 1 ;
                  jusqua L.taille < finchemin.pospile

                                      c IFSIC 2004
7.4. Composantes fortement connexes                                                            93


                        faire
                          z ← L.sommetpile ;
                          z.ncl ← compt ; NC ← NC  {z} ;
                       L.d´piler
                            e
                     fait ;
                    finchemin ← finchemin.pred
                  fsi
            fsi
         fait
      fait
 fin

7.4.4.4    Complexit´
                    e
   Elle est du mˆme ordre que l’algorithme de recherche profondeur d’abord, puisque chaque
                 e
sommet de X est empil´ exactement une fois, et l’acc`s lst succ est appel´ une fois pour chaque
                     e                              e                    e
sommet. C’est donc un algorithme en 0(n) acc`s lst succ.
                                              e

7.4.5      Applications
7.4.5.1     Recherche d’un graphe minimal dans τ (G)
   Nous avons pr´c´demment montr´ (§7.3) que, si G est sans circuit, il poss`de une fermeture
                e e             e                                           e
                           ∨
fortement anti-transitive G (´l´ment minimum de τ (G) ). Il n’en est pas n´cessairement de mˆme
                              ee                                           e                e
lorsque G poss`de des circuits. On peut cependant mettre en ´vidence un graphe minimal dans
                e                                               e
τ (G) , c’est ` dire un graphe G tel que :
              a
    – G + = G+ (mˆmes possibilit´s de cheminement)
                      e            e
    – la suppression d’un arc quelconque de G supprime une possibilit´ de cheminement.
                                                                         e
    Pour cela, on peut proc´der comme suit :
                             e
   1. D´terminer les c.f.c. de G, et construire le graphe r´duit GR .
        e                                                  e
                                                 ∨
  2. D´terminer la fermeture anti-transitive GR . Tout arc (Ci ,Cj ) ainsi supprim´ dans GR
       e                                                                           e
     entraˆ la suppression de tous les arcs (x,y) de G tels que x ∈ Ci et y ∈ Cj .
          ıne
                                  ∨
   3. Pour les couples (Ci ,Cj ) ∈GR , ne conserver qu’un seul arc (x,y) dans G, tel que x ∈ Ci
      et y ∈ Cj .
   4. A l’int´rieur de chaque c.f.c., on ordonne arbitrairement les sommets, ce qui d´finit un
             e                                                                            e
      ensemble d’arcs formant un circuit hamiltonien (passant une fois et une seule par chaque
      sommet).
Le lecteur v´rifiera qu’un graphe G ainsi obtenu v´rifie bien les propri´t´s voulues. Remarquer
            e                                        e                   ee
que G n’est pas n´cessairement un graphe partiel de G (` cause du point 4). Si l’on souhaite
                    e                                        a
en outre que G ≤ G, le traitement ` effectuer ` l’int´rieur de chaque c.f.c. est heuristique, et il
                                     a           a     e
est difficile d’assurer la τ -minimalit´. (Il faut obtenir un circuit passant par tous les sommets,
                                     e
en n’empruntant que des arcs de G).
Exemple voir figures 7.6 et 7.7

                                            c IFSIC 2004
94                                            Circuits. Composantes fortement connexes



               3           4                     1                  12


                                                                             14
                     5                           2

                                                                    13


               6           7                    8




                                                 9
               10         11



                                   Fig. 7.6 – Graphe donn´
                                                         e



               3           4                     1                  12


                                                                             14
                     5                           2

                                                                    13


               6           7                    8




                                                 9
               10         11



                          Fig. 7.7 – Graphe G , minimal dans τ (G)


7.4.5.2    Calcul rapide de la fermeture transitive

   Nous avons vu (§5.4) que l’algorithme de Roy-Warshall calcule la fermeture transitive d’un
graphe quelconque en O(n3 ). Dans le cas o` G est sans circuit, l’utilisation d’une num´rotation
                                          u                                             e
conforme (ou conforme inverse) r´duit la complexit´ ; l’algorithme simplifi´ est donn´ page 95.
                                 e                 e                        e         e

                                           c IFSIC 2004
7.4. Composantes fortement connexes                                                                        95


                     GRAPHE SANS CIRCUIT : ROY-WARSHALL SIMPLIFIE


 GRAPHE roy warshall conforme(GRAPHE G) c’est
    local SOMMET x, y, z
 d´but
  e
    Result ← G ;
     pour x depuis 2 jqa n-1
        pour y depuis 1 jqa x-1
           si Result.validarc(y, x) alors
              pour z depuis x+1 jqa n
                 si Result.validarc(x, z) alors Result.ajoutarc(y, z) fsi
                  fpour
            fsi
         fpour
      fpour
 fin



    Le nombre maximum d’op´rations est alors :
                          e
       n−1
                                  n(n − 1)(n − 2)        n3
             (x − 1)(n − x) =
                                         6               6
       x=2

en termes d’acc`s validarc, ajoutarc
                 e
    Consid´rons alors le proc´d´ suivant :
            e                 e e
   1. Appliquer l’algorithme de Tarjan pour obtenir le graphe r´duit GR , avec une num´rotation
                                                                       e                               e
      conforme inverse .
   2. Appliquer l’algorithme de Roy-Warshall am´lior´ au graphe GR
                                                           e e
                                        +
   3. Pour tout couple (Ci ,Cj ) ∈ GR tel que card(Ci ) > 1 ou card(Cj ) > 1 rajouter ` G tous        a
      les arcs (x,y) avec x ∈ Ci ,y ∈ Cj
   4. A l’int´rieur de chaque c.f.c., cr´er tous les arcs (x,y).
              e                            e
    S’il y a p composantes C1 ,C2 , . . . ,Cp , de cardinal respectif k1 ,k2 , . . . ,kp , et si on d´signe par
                                                                                                     e
m le nombre d’arcs de G, la complexit´ est en :
                                             e
    – O(n) acc`s lst succ pour le 1)
                e
        3
   – p6 pour le 2)
   – au plus
                     2 p−1
                 n                       n2 (p − 1)
                             (p − i) =
                 p                           2p
                      i=1
       pour le 3)
       [maximum obtenu lorsque k1 = k2 = . . . = kp = n ]
                                                      p

                                                      c IFSIC 2004
96                                           Circuits. Composantes fortement connexes


   – k1 + k2 + . . . + kp ≤ n2 pour le 4)
       2    2           2

   On peut observer que, lorsque p → 1 (graphe fortement connexe), la complexit´ est en O(n2 )
                                                                               e
(op´ration 4) pr´pond´rante), et lorsque p → n (graphe sans circuit) c’est l’op´ration 2) qui
   e            e       e                                                      e
                                           3
domine, et la complexit´ est alors en O( n ).
                          e               6




                                          c IFSIC 2004
Chapitre 8

  Chemins de valeur optimale

8.1       D´finitions et probl`mes pos´s
           e                 e       e
    Nous avons vu au chapitre 2 que les arcs d’un graphe peuvent ˆtre munis d’attributs de
                                                                        e
diff´rents types: pour un graphe non valu´, ces attributs sont de type bool´en (l’arc existe ou
    e                                       e                                  e
n’existe pas), pour un graphe mod´lisant des distances, ce seront des attributs de type num´rique,
                                   e                                                        e
etc. Les attributs peuvent ˆtre statiques (donn´s avec le graphe) ou dynamiques (calcul´s lors de
                            e                  e                                          e
l’ex´cution d’un algorithme: cf. par exemple le chapitre 10 sur les flots). Dans ce chapitre et les
    e
suivants, nous allons manipuler des graphes valu´s sur les arcs, c’est-`-dire des graphes dont un
                                                  e                    a
attribut d’arc est pr´cis´ dans la d´finition du graphe, avec sa valeur (attribut statique).
                     e e             e


   D´finition 8.1 On appelle graphe valu´ un doublet G = (X,v), o` v est
     e                                  e                       u
   une fonction d´finie sur X × X et ` valeurs dans un ensemble E.
                 e                  a

Nous supposerons que l’ensemble E poss`de une loi de composition ⊗, associative et munie d’un
                                         e
´l´ment neutre e et d’un ´l´ment absorbant α :
ee                          ee
        ∀w ∈ E : w ⊗ e         = e⊗w = w
        ∀w ∈ E : w ⊗ α         = α⊗w = α
                     w1 ⊗ w2 = α         ⇒ w1 = α ∨ w2 = α
     L’´l´ment absorbant α permet de caract´riser l’ensemble Γ des arcs de la mani`re suivante:
       ee                                   e                                     e
     (x,y) ∈ Γ ⇔ v(x,y) = α
     Exemples :
               E            ⊗     e    α
  1) B={vrai, faux}          ∧   vrai faux (valeurs d’existence)
  2)           R            +     0    ∞      (valeurs additives)
  3)         [0 , 1]        ×     1    0      (probabilit´s)
                                                         e
  4)       N ∪ {∞}         min    ∞    0      (capacit´s)
                                                      e
     L’associativit´ de la loi ⊗ permet de prolonger v ` l’ensemble des suites de sommets de
                    e                                   a
longueur ≥ 2:
      v[x1 , . . . ,xp ] =               v(xj ,xj+1 )
                             j=1...p−1


                                                        c IFSIC 2004
98                                                                      Chemins de valeur optimale


De plus, l’´l´ment α caract´rise les chemins de la mani`re suivante:
           ee              e                           e


     Proposition 8.2 Soit [x1 , . . . ,xp ] (p ≥ 2) une suite de sommets de X.
     Cette suite d´finit un chemin de G si,et seulement si:
                      e
           v[x1 , . . . ,xp ] = α

D´monstration
 e
    v[x1 , . . . ,xp ] =     j=1...p−1 v(xj ,xj+1 )    =α⇔
                           ∀j, 1 = j = p − 1 ⇒ (xj ,xj+1 ) ∈ Γ ⇔
                           [x1 , . . . ,xp ] est un chemin de G
        P
    Le but de ce chapitre ´tant l’´tude de chemins de valeur optimale, il nous faut d´finir un
                           e       e                                                    e
crit`re de comparaison sur les valeurs des chemins. Autrement dit, ´tant donn´ deux sommets x
    e                                                               e          e
et y et deux chemins reliant x ` y, lequel des deux est pr´f´rable? Pour cela, l’ensemble E doit
                                a                         ee
aussi ˆtre muni d’une relation d’ordre totale, not´e , telle que:
      e                                           e
i)    est compatible avec ⊗, c’est-`-dire:
                                   a
             w1    w2 ⇒ w1 ⊗ w3           w2 ⊗ w3 ∧
                              w3 ⊗ w1     w3 ⊗ w2
ii) α est maximum pour         :
             ∀w ∈ E : w       α
   Soit alors deux suites u1 = [x,y1 , . . . ,yk ,y], u2 = [x,z1 , . . . ,zp ,y]. On dira que u1 est meilleur
que u2 si, et seulement si: v(u1 ) v(u2 ).
   En particulier, une suite d´finissant un chemin sera toujours pr´f´r´e ` une suite ne d´finissant
                              e                                               eee a                 e
pas de chemin, grˆce ` la propri´t´ ii) ci-dessus.
                   a a            ee

Exemples de relations d’ordre:
 E                   ⊗     α
 B={vrai, faux} ∧          faux vrai<faux              existence
 R                   +     ∞      ≤                    valeurs additives minimales
 [0,1]               ×     0      ≥                    probabilit´s maximales
                                                                 e
 N ∪ {∞}             min 0        ≥                    capacit´s maximales
                                                              e
    Ces d´finitions ´tant donn´es, nous posons
         e         e          e                       les probl`mes :
                                                               e

     Probl`me 8.1 (x-optimal-y) Soit x,y deux sommets donn´s de G =
           e                                                  e
     (X,Γ,v). D´terminer un chemin u = (x ∗ y) de G, de valeur optimale
               e
     parmi tous les chemins de x ` y dans G.
                                 a


     Probl`me 8.2 (x-optimal ou optimal-y) Il s’agit du probl`me x-
            e                                                        e
     optimal-y pour tout y ∈ X (resp. x-optimal-y pour tout x ∈ X) : chemins
     de valeur optimale issus de x (resp. aboutissant ` y)
                                                      a


                                                 c IFSIC 2004
8.2. Chemins de valeur additive minimale issus d’un sommet donn´
                                                               e                                 99



   Probl`me 8.3 (∗-optimal-∗) Il s’agit du probl`me x-optimal pour tout
        e                                        e
   x ∈ X (chemins de valeur optimale entre tous les couples de sommets).

L’optimalit´ est ` prendre, bien sˆr, au sens de la relation d’ordre sur E.
           e     a                u
   Dans ce qui suit, et jusqu’au paragraphe 8.8, nous prendrons :

      E ≡ R; ⊗ ≡ +; ≡≤

c’est-`-dire le cas des valeurs additives minimales. Ceci n’est pas une restriction car nous verrons
      a
au §8.8 comment adapter les r´sultats et algorithmes aux autres cas, sous r´serve d’une structure
                                e                                             e
ad´quate de (E, ⊗ , )
   e
     Nous ´tudions successivement les probl`mes de type 8.2 (et 8.1 comme cas particulier) avec
          e                                   e
plusieurs algorithmes, puis les probl`mes de type 8.3 dans le cadre de la transformation d’algo-
                                       e
rithmes.


8.2       Chemins de valeur additive minimale issus d’un sommet
         donn´
             e
   Nous supposons, dans cette section, que les sommets sont num´rot´s de 1 ` n, et que le
                                                                 e e       a
sommet de d´part est le sommet de num´ro 1 (quitte ` renum´roter).
           e                          e            a      e

8.2.1    Existence


   Proposition 8.3 Le probl`me 1-minimal admet des solutions si et
                              e
   seulement si le sous-graphe G1 = (Γ∗ (1),Γ1 ) ne contient pas de circuit
   de valeur < 0.

D´monstration. Soit c = [x ∗ x] un circuit de valeur ρ < 0 dans G1 . Comme x ∈ Γ∗ (1),
  e
∃γ = [1 ∗ x] de valeur ω; par suite, γ.c a pour valeur ω + ρ, γ.c.c a pour valeur ω + 2ρ, ...,
∀k ∈ N : γ.ck a pour valeur ω + kρ d’o` :
                                      u

        lim (ω + kρ)] = −∞
      k→∞

   Donc la valeur des chemins de 1 ` x n’est pas minor´e, et il en est de mˆme pour tous les
                                     a                     e                  e
descendants de x.
   R´ciproquement, si G1 n’a pas de circuit de valeur < 0, alors : si u est un chemin de 1 `
     e                                                                                          a
x et ue un chemin ´l´mentaire, inclus dans u, de 1 ` x, on a : v(u) ≥ v(ue ) ≥ min v(ue ) (o`
                    ee                                 a                                        u
min v(ue ) d´note le minimum des valeurs des chemins ´l´mentaires). Comme l’ensemble des
            e                                              ee
chemins ´l´mentaires est fini, min v(ue ) est d´fini et de plus min v(u) ≥ min v(ue ) ((o` min v(u)
         ee                                   e                                        u
d´note le minimum des valeurs des chemins). D’autre part, un chemin ´l´mentaire est un chemin,
 e                                                                     ee

                                             c IFSIC 2004
100                                                               Chemins de valeur optimale


et donc min v(u) = min v(ue )

   D´finition 8.4 Un circuit de valeur < 0 s’appelle circuit absorbant
     e
   (sous entendu pour les valeurs additives minimales).


8.2.2    Caract´risation
               e
    Nous donnons maintenant un th´or`me de caract´risation des valeurs minimales, dans le cas
                                   e e              e
o` ces valeurs existent. On note C1i l’ensemble de tous les chemins de 1 ` i. On consid`re les
 u                                                                       a             e
attributs de sommets suivants :
          ∀i ∈ X :       λ(i) = minu∈C1i v(u), avec λ(i) = +∞ si C1i = ∅ (valeur
                         minimale des chemins de 1 ` i).
                                                    a
Si λ(i) < +∞,        pred(i) = pr´d´cesseur de i sur un chemin ´l´mentaire de va-
                                 e e                            ee
                     leur optimale de 1 ` i. (pred(1) n’est pas d´fini). En abr´g´,
                                        a                        e            e e
                     pred(i) sera d´sign´ comme pr´d´cesseur optimal de i.
                                   e     e          e e
   Le couple (λ(i),pred(i)) constitue les attributs minimaux (relativement au probl`me pos´)
                                                                                   e      e
du sommet i.

On montre d’abord que les attributs λ(i) (i = 1, . . . ,n) sont solutions d’un syst`me d’in´quations
                                                                                   e       e
et d’un syst`me d’´quations.
            e     e


   Proposition 8.5 Les attributs λ(i) (i = 1, . . . ,n) sont solution du
   syst`me: ∀i ∀j : xi ≤ xj + v(j,i)
       e

D´monstration Il y a trois cas ` consid´rer :
 e                             a       e
  1. (j,i) ∈ Γ. Alors v(j,i) = +∞ et la proposition est vraie.
  2. j ∈ Γ∗ (1). Alors λ(j) = +∞ et la proposition est vraie.
  3. (j,i) ∈ Γ ∧ j ∈ Γ∗ (1). Soit u ∈ C1j tel que v(u) = λ(j). Alors u = u · (j,i) ∈ C1i donc
     λ(i) ≤ v(u ) = v(u) + v(j,i) = λ(j) + v(j,i). La proposition est donc vraie.
                                                                                                  P



   Proposition 8.6 Les attributs λ(i) (i = 1, . . . ,n) sont solution du
   syst`me: ∀i : xi = minj (xj + v(j,i))
       e

D´monstration D’apr`s la proposition 8.5,
 e                 e
      ∀i : λ(i) ≤ min(λ(j) + v(j,i))                                                           (8.1)
                    j
   Il y a deux cas ` consid´rer:
                   a       e
   – i ∈ C1i . Comme λ(i) = minu∈C1i v(u), il existe u ∈ C1i tel que v(u) = λ(i). Soit p l’avant-
     dernier sommet de u. On a donc u = u · (p,i) o` u ∈ C1p . On peut donc ´crire :
                                                     u                         e

                                             c IFSIC 2004
8.2. Chemins de valeur additive minimale issus d’un sommet donn´
                                                               e                             101


     λ(i) = v(u) = v(u ) + v(p,i) ≥ λ(p) + v(p,i) ≥ minj (λ(j) + v(j,i), d’o`
                                                                            u
           λ(i) ≥ min(λ(j) + v(j,i))                                                         (8.2)
                      j
   – i ∈ C1i . Dans ce cas, λ(i) = +∞ ≥ minj (λ(j) + v(j,i)), on obtient donc aussi l’´quation 8.2
                                                                                      e
Des ´quations 8.1 et 8.2 on d´duit λ(i) = minj (λ(j) + v(j,i))
    e                          e                                                                P

   Toutefois, les conditions ´nonc´es dans les deux propositions pr´c´dentes ne sont pas suffi-
                             e    e                                e e
santes, comme le contre-exemple ci-apr`s (figure 8.1) va le montrer:
                                       e

                                        2                                        1
                                2                            4                       5
                                                     2           1
                  4

           1                   1
                  4                                                          0
                                         -2
                                3                                        6
                                                                     2

                                    Fig. 8.1 – Contre-exemple

   Le syst`me d’´quations de la proposition 8.6 s’´crit :
          e     e                                 e
     
      x1 = 0
     
      x = min(x + 2) = x + 2
      2
     
                    1          1
     
        x3 = min(x1 + 4,x2 + 1,x4 + 2,x6 + 2)
      x4 = min(x2 + 2,x5 + 1)
     
     
      x5 = min(x3 − 2,x4 + 1)
     
     
     
        x6 = min(x5 + 0) = x5
    Les valeurs µ1 = 0,µ2 = 2,µ3 = 2,µ4 = 1,µ5 = 0,µ6 = 0 satisfont ce syst`me. Et pourtant, ce
                                                                           e
ne sont pas les valeurs minimales des chemins issus du sommet 1. Par exemple, la valeur minimale
des chemins de 1 ` 3 est ´gale ` 3, alors que µ3 = 2. Les valeurs propos´es ici constituent bien
                   a       e    a                                        e
des minorants des valeurs de chemins, mais pas n´cessairement des minima : elles peuvent ˆtre
                                                    e                                       e
trop petites.
    Le th´or`me de caract´risation suivant montre en effet que les valeurs minimales de chemins
          e e              e
issus de 1 constituent LA solution maximale du syst`me d’´quations.
                                                      e    e
Th´or`me 8.7 Les attributs λ(i) (i = 1, . . . ,n) constituent la solution maximale du syst`me:
  e e                                                                                     e
          0 si i = 1
    xi =
          minxj ∈Γ−1 (xi ) (xj + v(j,i))si i = 2, . . . ,n

D´monstration Soit µ(i) (i = 1, . . . ,n) la solution maximale du syst`me d’´quations. Il faut
 e                                                                      e     e
montrer : ∀i (1 ≤ i ≤ n) : λ(i) = µ(i).
   – D’apr`s la proposition 8.6, les λ(i) constituent une solution du syst`me et donc :
            e                                                             e
            ∀i (1 ≤ i ≤ n) : λ(i) ≤ µ(i)                                                 (8.3)

                                              c IFSIC 2004
102                                                                    Chemins de valeur optimale


   – Pour montrer les in´galit´s contraires, on consid`re les deux cas possibles :
                        e     e                       e
        1. i ∈ Γ (1). Dans ce cas, λ(i) = +∞ et donc λ(i) ≥ µ(i).
        2. i ∈ Γ (1). Dans ce cas, il existe dans G un chemin u = [1,i1 , . . . ,ik ,i], de valeur λ(i).
           Puisque les µ(i) sont solution du syst`me, les in´galit´s suivantes sont v´rifi´es:
                                                  e         e     e                        e e
                 
                  µ(i1 ) ≤ µ(1) + v(1,i1 )
                 
                 
                    µ(i2 ) ≤ µ(i1 ) + v(i1 ,i2 )
                 
                                  ...
                 
                     µ(i) ≤ µ(ik ) + v(ik ,i)
           En sommant membre ` membre, et comme µ(1) = 0, on obtient:
                                  a
                 µ(i) ≤ v(1,i1 ) + v(i1 ,i2 ) + . . . + v(ik ,i) = v(u) = λ(i)
      Regroupant les deux cas, on obtient :
            ∀i (1 ≤ i ≤ n) : λ(i) ≥ µ(i)                                                          (8.4)
   – Des ´quations 8.3 et 8.4 on d´duit :
         e                        e
            ∀i (1 ≤ i ≤ n) : λ(i) = µ(i)
                                                                                                      P


 Remarque. Consid´rons le graphe Gmin (1) dont l’ensemble des sommets est l’ensemble des
                   e
descendants du sommet 1, et l’ensemble des arcs est l’ensemble des couples (pred(i),i) pour tout
i descendant du sommet 1. Formellement :


      Gmin (1) = (Γ∗ (1),{(pred(i),i) | i ∈ Γ∗ (1)})
                = ({i | λ(i) < +∞},{(i,j) | λ(j) = λ(i) + v(i,j)}

    Les caract´risations pr´c´dentes montrent que ce graphe est une arborescence de racine 1.
               e           e e
Les algorithmes de calcul des chemins minimaux issus de 1 que nous ´tudions ci-apr`s pourront
                                                                   e              e
donc ˆtre vus comme des algorithmes d’exploration de la descendance de 1, avec une strat´gie
      e                                                                                  e
de s´lection sp´cifique ` chacun d’eux.
    e           e      a


8.3     Algorithme de FORD : exploration
8.3.1     Principe
    On note x0 le sommet initial. Le principe de cet algorithme consiste ` ajuster progressivement
                                                                           a
les valeurs des attributs λ jusqu’` ce qu’ils v´rifient le syst`me caract´ristique. Pour assurer qu’on
                                  a            e              e         e
obtient bien la solution maximale, on part de valeurs initiales dont on sait a priori qu’elles
majorent les valeurs λ. Pour cela, nous allons tester tous les arcs du graphe selon un ordre de
parcours induit par une exploration en profondeur analogue ` celle r´alis´e pour l’´num´ration
                                                                  a       e e            e    e
des chemins ´l´mentaires issus de x0 (cf. §6.3).
              ee
    Un arc (y,z) est test´ lorsque y est sommet de pile et z est le successeur courant de y; en effet,
                         e
y est alors reconnu comme descendant de x0 , et l’´tat de la pile d´finit le chemin courant de x0
                                                      e               e

                                                c IFSIC 2004
8.3. Algorithme de FORD : exploration                                                           103


` y : (λ(y), pred(y)) ont ´t´ initialis´s ou mis ` jour lorsque y a ´t´ empil´ pour la premi`re fois.
a                         ee           e         a                  ee       e               e
Quant ` z, plusieurs cas peuvent se pr´senter selon son ´tat relatif ` l’exploration (cf terminologie
        a                                e                e           a
du chapitre 5) :
1er cas £z est dehors. Il devient alors en attente (et va ˆtre empil´), et (λ(z), pred(z)) sont
                                                               e          e
initialis´s :
         e


         λ(z) ← λ(y) + v(y,z);
      pred(z) ← y

2eme cas £ z est termin´; cela signifie que z a ´t´ pr´c´demment empil´ ` partir d’un pr´d´cesseur
 `                       e                     ee e e                  ea              e e
= y puis d´pil´ – apr`s que toute sa descendance ait ´t´ explor´e; les attributs de z ont donc
           e e         e                                 ee        e
d´j` une valeur, mais celle-ci peut ˆtre remise en cause par l’arc (y,z) qui doit donc ˆtre test´:
 ea                                  e                                                 e        e
      si λ(y) + v(y,z) < λ(z)
         alors λ(z) ←− λ(y) + v(y,z) ; pred(z) ←− y;
               z est empil´ car la modification de λ(z) peut remettre en cause
                           e
               les valeurs pr´c´demment attribu´es aux descendants de z, d’o` la
                             e e                  e                            u
               n´cessit´ de refaire l’exploration ` partir de z.
                 e      e                         a

         sinoninutile d’empiler z ` nouveau : ses attributs ne sont pas modifi´s
                                  a                                          e
              donc ceux de ses descendants non plus.
      fsi
3eme cas £ z est en attente (il appartient donc ` la pile.)
 `                                              a
                 x
                     0

                                   Cela signifie qu’un circuit passant par y
            u
             1                     et z est rencontr´, puisque z est ` la fois
                                                      e                a
                                   ant´c´dent et successeur de y. Le test de
                                      e e
                 z                 mise ` jour des attributs de z permet alors
                                        a
                                   de d´tecter si ce circuit est absorbant; exa-
                                       e
           u                       minons la figure ci-contre :
            2

                 y
Proposition : le circuit u2 · (y,z) est de valeur <0 si et seulement si :
      λ(y) + v(y,z) < λ(z)
D´monstration Il existe un chemin u1 = [1 ∗ z], de valeur λ(z). Comme u1 · u2 est le chemin
   e
courant de 1 ` y, on a :
              a
      (1) λ(y) ≤ v(u1 ) + v(u2 ) = λ(z) + v(u2 )
i) £ Supposons v(u2 ) + v(y,z) < 0. D’apr`s (1), on a :
                                            e
λ(y) + v(y,z) ≤ λ(z) + v(u2 ) + v(y,z)
              < λ(z) d’apr`s l’hypoth`se.
                            e            e
ii) £ R´ciproquement, supposons λ(y) + v(y,z) < λ(z). L’in´galit´ (1) ne peut pas ˆtre stricte :
        e                                                      e     e             e
en effet, si λ(y) < λ(z) + v(u2 ), cela signifie que y a ´t´ visit´ pr´c´demment comme extr´mit´
                                                       ee       e e e                    e    e
d’un chemin ne passant pas par z; y a alors ´t´ empil´ et sa descendance explor´e. L’arc (y,z)
                                               ee       e                        e

                                             c IFSIC 2004
104                                                              Chemins de valeur optimale


a donc ´t´ test´ et on doit avoir λ(z) ≤ λ(y) + v(y,z), ce qui contredit (1).
       ee      e
Par cons´quent on a n´cessairement :
        e              e
     λ(y) = λ(z) + v(u2 ), ce qui, avec l’hypoth`se, permet de d´duire :
                                                e                 e

      λ(y) > λ(y) + v(y,z) + v(u2 ) d’o` : 0 > v(y,z) + v(u2 )
                                       u

                                                                                              P

    La d´tection d’un circuit absorbant est un crit`re d’arrˆt de l’algorithme; il suffit de g´rer
         e                                         e        e                               e
une variable bool´enne absorbant, initialement ` faux et qui passe ` vrai lorsqu’un tel circuit
                 e                             a                     a
est d´tect´.
     e     e

8.3.2    Texte de l’algorithme
    Celui-ci est une adaptation de l’algorithme d’´num´ration des chemins ´l´mentaires vu au
                                                   e    e                    ee
6.5. Le texte est donn´ page 105 (voir la signification des acc`s ` l’annexe A).
                      e                                       e a




                                            c IFSIC 2004
8.3. Algorithme de FORD : exploration                                               105


                      FORD : EXPLORATION EN PROFONDEUR


REEL SOMMET::λ ; SOMMET SOMMET::pred ;
ford-profondeur(GRAPHE G, SOMMET x) c’est
   local ENS[SOMMET] SOMMET::a visiter: ;
        ENUM[dehors, en attente, termin´] SOMMET::etat ;
                                       e
        PILE[SOMMET] A; BOOL absorbant ; SOMMET y, z ;
  d´but
   e
    depuis
       pourtout y de G.lst som faire y.´tat ← dehors fpourtout ;
                                               e
           absorbant ← faux ; A.creer ; A.empiler(x) ;
           x.´tat ← en attente ; x.λ ← 0 ; x.a visiter ← G.lst succ(x) ;
             e
    jusqua A.vide ou absorbant
    faire
      y ← A.sommetpile ;
       si y.a visiter = ∅
            alors y.´tat ← termin´ ; A.depiler
                     e               e
            sinon
              z ← y.a visiter.element ; y.a visiter ← y.a visiter {z} ;
               cas z.´tat =
                       e
                         dehors −→
                             z.´tat ← en attente ; z.λ ← y.λ+ G.v(y,z) ; z.pred ← y ;
                               e
                             A.empiler(z) ; z.a visiter ← G.lst succ(z)
                         en attente −→
                             absorbant ← (z.λ > y.λ + G.v(y,z))
                         termin´ −→
                                 e
                              si z.λ > y.λ+ G.v(y,z)
                                  alors z.´tat ← en attente ;
                                          e
                                       z.λ ← y.λ+ G.v(y,z) ; z.pred ← y ;
                                       A.empiler(z) ; z.a visiter ← G.lst succ(z)
                              fsi
               fcas
       fsi
    fait ;
  -- si absorbant alors il y a un circuit absorbant
                  sinon les sommets ∈ en attente sont inaccessibles
 fin




                                       c IFSIC 2004
106                                                                 Chemins de valeur optimale


8.3.3     Une heuristique d’am´lioration
                              e
    Dans la strat´gie d’exploration en profondeur utilis´e, le choix d’un successeur du sommet
                   e                                         e
de pile est laiss´ arbitraire. Il est posible de d´finir un crit`re de choix d’un tel successeur, tenant
                 e                                e            e
compte de la nature du probl`me ` r´soudre, ` savoir la recherche de chemins de valeur minimale
                                 e    a e         a
sur un graphe dont les arcs sont valu´s. Un tel crit`re doit laisser esp´rer une am´lioration du
                                           e             e                   e             e
temps d’ex´cution de l’algorithme, mais sans que le prix ` payer pour sa mise en œuvre ne
             e                                                    a
devienne prohibitif: ce crit`re ne devra donc prendre en compte que des informations locales,
                               e
c’est-`-dire relatives ` l’´tat courant du sommet courant. Par contre, l’am´lioration cens´e r´sulter
      a                a e                                                    e              e e
de l’application de ce crit`re ne pourra ˆtre ´tablie sˆrement; dans certains cas, il pourrait
                               e               e    e        u
mˆme en r´sulter une d´t´rioration du comportement, mais en moyenne une am´lioration doit
  e         e               ee                                                           e
intervenir.
    Un crit`re possible et simple ` mettre en œuvre consiste ` choisir, parmi les successeurs
             e                         a                              a
possibles du sommet de pile y, un sommet z tel que v(y,z) soit minimum. L’am´lioration attendue
                                                                                    e
r´side dans une diminution du nombre de retours dans la pile, donc de reprise de parcours d´j`
 e                                                                                                  ea
effectu´s. Le prix ` payer est un tri sur l’ensemble des valeurs des arcs issus de y.
        e           a


8.4      Algorithme de BELLMANN-KALABA
8.4.1     Principe
   Il s’applique ` tout graphe valu´, et permet de d´tecter d’´ventuels circuits absorbants. Nous
                 a                 e                e         e
poserons, par convention :
      v(1,1) = 0 et, si | u |= 0,v(u) = 0.
                                                             (k)
Pour tout x ∈ X et tout entier k ≥ 1, on notera Cx l’ensemble des chemins de 1 ` x, de
                                                                                   a
                              (k)
longueur ≤ k. Remarquer que Cx = ∅ si et seulement si tout chemin de 1 ` x, s’il en existe,
                                                                        a
est de longueur > k.
    L’algorithme de Bellmann-Kalaba est fond´ sur le r´sultat suivant :
                                             e        e

                                                    (k)
   Proposition 8.8 On        consid`re les valeurs λx d´finies par :
                                   e                   e
             
              v(1,x)         si (1,x) ∈ Γ
        (1)
       λx =     0             si x = 1
             
                +∞            si (1,x) ∈ Γ

         ∀k ≥ 2 : λ(k) =
                   x           min [λ(k−1) + v(x,y)]
                                     y
                             y∈Γ−1 (x)

           (k)                               (k)
   Alors λx = minu∈C (k) v(u) (+∞ si Cx = ∅).
                         x



D´monstration. Par r´currence sur k :
  e                   e
Base : V´rifi´ pour k = 1, par d´finition.
          e e                  e
Induction : Supposons la proposition v´rifi´e pour k − 1 ≥ 1
                                       e e
1er cas : C (k) = ∅.
           x


                                              c IFSIC 2004
8.4. Algorithme de BELLMANN-KALABA                                                                107

              (k)
Soit u ∈ Cx          et y le pr´d´cesseur de x sur ce chemin. On a donc
                               e e
                              (k−1)
     u = u1 .(y,x) avec u1 ∈ Cy
    Avec la convention | u1 |= 0 =⇒ v(u1 ) = 0, on obtient, d’apr`s l’hypoth`se de r´currence et
                                                                 e          e       e
                 (k)
la d´finition de λx :
    e
     v(u) = v(u1 ) + v(x,y) ≥ λ(k−1) + v(x,y) ≥ λ(k)
                               y                 x
        (k)
Donc, λx ≤ minu∈C (k) v(u).
                            x
                                             (k)
   D’autre part, par d´finition de λx , il existe y0 tel que
                      e

     λ(k) = λ(k−1) + v(y0 ,x)
      x      y0


et d’apr`s l’hypoth`se de r´currence, il existe
        e          e       e

                (k−1)
     u1 ∈ Cy0             avec v(u1 ) = λ(k−1)
                                         y0


   d’o` u = u1 · (y0 ,x) v´rifie
      u                   e

     u ∈ Cx et v(u) = λ(k)
          (k)
                       x

                            (k)
Donc, dans ce cas, λx = minu∈C (k) v(u).
                                         x
                    (k)                                            (k−1)                 (k−1)
2eme cas : Cx = ∅. Pour tout sommet y ∈ Γ−1 (x) on a Cy
 `                                                                         = ∅, et donc λy       = +∞
                                                 (k)
(hypoth`se de r´currence). D’o`, par d´finition, λx = +∞ . P
       e       e              u       e


   Corollaire 8.9 Il existe k ≤ n tel que
          ∀x ∈ X : λ(k) = λ(k−1)
                     x       x
   si et seulement si le sous-graphe G0 ne comporte pas de circuit absorbant

D´monstration.
  e
                                 (n)    (n−1)               (n)        (n)
£ Supposons que ∃x ∈ X : λx < λx              Alors : ∃u ∈ Cx tel que λx = v(u) et, pour tout
               (n−1)
chemin u ∈ Cx        , on a : v(u) < v(u ).
    Par cons´quent, | u |= n et donc u n’est pas ´l´mentaire, d’o` l’on d´duit l’existence d’un
             e                                       ee            u       e
circuit de valeur < 0 inclus dans u, donc dans le sous-graphe G0 .
£ R´ciproquement, d’apr`s la proposition 8.8, le probl`me 1-minimal admet alors une solution,
    e                       e                            e
ce qui prouve l’inexistence de circuit absorbant dans le sous-graphe G0 . P


   Corollaire 8.10 ∀k ≥ 1,∀x ∈ Γ∗ (1), le pr´d´cesseur de x sur un che-
                                            e e
            (k)
   min de Cx de valeur minimale est un sommet y k pour lequel le mini-
                                      (k)
   mum est atteint lors du calcul de λx

D´monstration. Elle r´sulte imm´diatement de la d´monstration de la proposition 8.8 P
 e                   e         e                 e

                                                   c IFSIC 2004
108                                                             Chemins de valeur optimale


8.4.2     Analyse


Invariant           1 ≤ k ≤ n∧
                    A = ∪k Γ[j] (1)∧
                          j=1
                                                                        (k−1)
                    ∀x ∈ A λ anc(x) = valeur minimale des chemins de Cx       ∧
                                                                    (k)
                            λ(x) = valeur minimale des chemins de Cx ∧
                            pred(x) = pr´d´cesseur optimal de x sur de tels che-
                                        e e
                            mins ∧
                    stab ≡ λ = λ anc

Termin´
      e             (k = n) ∨ stab
                    resultat si stab alors (λ, pred)
                                     sinon il y a des circuits absorbants fsi

Progression (* k < n ∧ ¬stab *)
                  λ anc←λ ; stab← vrai ;
                  ∀x ∈ X : λ(x)← min λ anc(y) + v(y,x) | y ∈ Γ−1 ∩ A ;
                           pred(x)← valeur de y pour laquelle ce min est
                                      atteint ;
                           si x ∈ A alors stab←(stab ∧ λ(x) = λ anc(x))
                                    sinon stab← faux ; A←A ∪ {x}
                           fsi ;
                  k←k + 1

Valeurs initiales λ(1)←0;
                  ∀x ∈ Γ(1) : λ(x)←v(1,x);
                  pred(x)←1;
                  A←{1} ∪ Γ(1);
                  k←1


8.4.3     Texte de l’algorithme
   Il est donn´ page 109.
              e


8.4.4     Preuve
   Nous ne la d´taillerons pas, la laissant en exercice au lecteur. Les quatre r´sultats suivants
                e                                                               e
doivent ˆtre montr´s :
        e         e


   Lemme 8.11 Les valeurs initiales satisfont l’invariant.

 e             ´
D´monstration. Evidente, grˆce ` la convention v(1,1) = 0
                           a a

                                           c IFSIC 2004
8.4. Algorithme de BELLMANN-KALABA                                      109


                        ALGORITHME DE BELLMANN-KALABA


REEL SOMMET::λ ;
SOMMET SOMMET::pred ;
REEL SOMMET::λ anc ;

bellmann-kalaba(GRAPHE G, SOMMET x) c’est
   local ENS[SOMMET] A, E;
        BOOL stab;
        ENT k;
        SOMMET x, y ;
 d´but
  e
   depuis
      k ← 1 ; stab ← faux ; x.λ ← 0 ; A ← {x0 } ; E ← G.lst succ(x) ;
       pourtout x de E
          x.λ ← G.v(x,x) ; A ← A ∪{x}
       fpourtout ;
   jusqua stab ou k ≥ n
   faire
      k ← k+1 ;
       pourtout x de G.lst som faire x.λ anc ← x.λ fpourtout ;
      stab ← vrai ;
       pourtout x de G.lst som faire
          E ← G.lst pred(x) ; E ← E ∩ A ;
           si E = ∅ alors
              (x.λ, x.pred) ← min(y.λ anc + G.v(y,x), E) ;
               si x ∈ A
                 alors stab ← stab et (x.λ =x.λ anc)
                 sinon stab ← faux ; A ← A ∪{x}
               fsi
           fsi
       fpourtout ;
   fait ;
   --      si k < n alors Resultat : ← (λ , pred)
       --      sinon circuit absorbant d´tect´
                                        e    e
  fin
(w,y0) ← min (f (y),E) est une primitive, signifiant que
w = min (f (y) | y ∈ E) = f (y0), o` f est une fonction E → R
                                               u




                                     c IFSIC 2004
110                                                             Chemins de valeur optimale


   Lemme 8.12 La progression maintient l’invariant.

D´monstration. Utiliser :
 e
   – La proposition 8.8 pour les valeurs λ
   – Le corollaire 8.10 pour les valeurs pred
   – Le corollaire 8.9 pour le bool´en stab
                                   e


   Proposition 8.13 (Correction partielle). Lorsque l’algorithme s’arrˆte,
                                                                      e
   on a l’alternative :
      – ou bien stab et dans ce cas, ∀x ∈ Γ∗ (1) les attributs
         (λ(x), pred(x)) sont minimaux
      – ou bien non stab et k = n et dans ce cas, il y a des circuits
         absorbants

D´monstration. Cons´quence de (stab∧ Invariant) ∨ (k = n ∧ ¬stab∧ Invariant)
 e                 e


   Proposition 8.14 (Terminaison). L’algorithme s’arrˆte en un nombre
                                                     e
   fini d’´tapes
         e

D´monstration. Consid´rer la fonction n − k
 e                   e

8.4.5    Complexit´
                  e
    L’algorithme ex´cute au plus n − 1 pas d’it´ration, et pour chacun d’eux :
                     e                          e
   n acc`s lst pred
        e
   n calculs de min, sur un ensemble E, impliquant chacun :
         card(E) acc`s valarc,
                     e
         card(E) comparaisons et additions de r´els;
                                                 e
   comme card(E) ≤ n, on obtient un algorithme en 0(n3 ).
Remarque. L’algorithme de Bellmann-Kalaba met en œuvre, au niveau du probl`me 8.2,      e
le principe d’optimalit´ de Bellmann qui fonde les m´thodes de programmation dynamique :
                        e                               e
les ´tapes sont les longueurs des chemins examin´s, les ´tats ` l’´tape k sont les sommets qui
    e                                              e      e     a e
peuvent ˆtre atteints par un chemin de longueur k et les transitions possibles de l’´tape k-1 `
          e                                                                           e       a
l’´tape k sont d´finies par les arcs issus des sommets ´tats ` l’´tape k-1. La relation
  e              e                                    e     a e
      λ(k) = min (λ(k−1) + v(x,y))
        x               y
            y∈Γ−1 (x)
n’est autre, dans ce contexte, que la traduction du principe d’optimalit´.
                                                                        e

8.4.6    Acc´l´ration de l’algorithme
            ee
                                                                             (k)               (k)
   Il est possible d’acc´l´rer l’algorithme en utilisant, dans le calcul de λx , les valeurs λy
                        ee
(avec y < x), d`s leur mise ` jour dans l’´tape courante. En effet, on a les r´sultats suivants :
               e            a             e                                  e

                                            c IFSIC 2004
8.4. Algorithme de BELLMANN-KALABA                                                     111



   Proposition 8.15 On d´finit, par r´currence :
                        e           e
        (1)
       λx comme dans la proposition 8.8

            ∀k ≥ 2 : λ(k) =
                      x         min (µ(k) + v(y,x))
                                      y
                              y∈Γ−1 (x)

   avec :
                      (k)
                     λy     si y < x,
            µ(k) =
             y        (k−1)
                     λy     si y ≥ x

   On a alors :
       (k)
   si Cx = ∅ :
        (k)                                                        (k)
    i) λx minore la valeur minimale des chemins de Cx .
                                                                   (k)
    ii) il existe un chemin de 1 ` x, ayant pour valeur λx .
                                 a

D´monstration Elle s’effectue par r´currence sur k, et pour chaque k, par r´currence sur x.
 e                                    e                                   e
£ Pour k = 1, la proposition est v´rifi´e.
                                   e e
                                                      (k)
£ Supposons l` v´rifi´e pour k - 1, et soit x tel que Cx = ∅.
               a e e
                  (k)
   Il existe u ∈ Cx et soit y le pr´d´cesseur de x sur u. Alors :
                                   e e
                         (k−1)
      u = u .(y,x), u ∈ Cy     , v(u) = v(u ) + v(y,x)

c’est ` dire, d’apr`s l’hypoth`se de r´currence :
      a            e          e       e

      v(u) ≥ λ(k−1) + v(y,x)
              y

                                              (k)
Montrons, par r´currence sur x, que λx ≥ v(u)
               e
                                (k−1)    (k−1)
  Pour x=1, on a y ≥ 1 donc λy        = µy     et par cons´quent :
                                                          e

      v(u) ≥ µ(k) + v(y,x) ≥ λ(k)
              y               x

Supposons que cette in´galit´ est v´rifi´e jusqu’` x-1. On a alors :
                      e     e      e e          a

      si y < x alors v(u ) ≥        min      v(γ) ≥ min v(γ) ≥ λ(k) = µ(k)
                                                                y      y
                                     (k−1)                (k)
                                  γ∈Cy               γ∈Cy

   d’o`
      u
     v(u) ≥ µ(k) + v(x,y) ≥ λ(k) tandis que si y ≥ x :
             y               y

      λ(k−1) = µ(k) et par cons´quent :
       y        y              e

      v(u) ≥ µ(k) + v(x,y) ≥ λ(k)
              y               y

Ceci montre la partie i) de la proposition.

                                                    c IFSIC 2004
112                                                              Chemins de valeur optimale


   Pour montrer la partie ii), consid´rons la suite de sommets
                                     e
      x = y0 > y1 > . . . > yν et yν ≥ yν+1 telle que :
       (k)          (k)
       λx
              = λy1 + v(y1 ,x)
       (k)
      
       λ         (k)
               = λy2 + v(y1 ,y2 )
         y1
              .
               .
      
              .
       (k)
                    (k)
        λν     = λν+1 + v(yν+1 ,yν )

yν existe n´cessairement (´ventuellement ν =0), puisque la suite est d´croissante et minor´e par
           e              e                                           e                   e
1. Si on somme cette suite d’´galit´s, il vient :
                             e     e

      λ(k) = λ(k−1) + v(yν+1 ,yν ) + ... + v(y1 ,x)
       x      yν+1

                                                                                         (k−1)
D’apr`s l’hypoth`se de r´currence, il existe un chemin u = [1 ∗ yν+1 ] avec v(u ) = λyν+1 . Le
     e           e            e
                                                         (k)
chemin u · (yν+1 ,yν , . . . ,y1 ,x) a donc pour valeur λx .                                 P



   Corollaire 8.16 Il existe k ≤ n tel que
          ∀x ∈ X : λ(k) = λ(k−1)
                     x       x
   si et seulement si le sous-graphe G0 ne comporte pas de circuit absorbant

La d´monstration est identique ` celle du corollaire 8.9
      e                           a
     Nous ne d´crivons pas l’algorithme acc´l´r´ en entier, mais seulement les modifications `
               e                              ee e                                               a
apporter ` l’algorithme pr´c´dent : le tableau λ anc devient inutile ; on le remplace par une
           a                 e e
simple variable r´elle δ. (L’affectation λ anc←λ est donc ` supprimer).
                  e                                        a
Remarque. Comme pour l’algorithme de Ford, l’algorithme de Bellmann-Kalaba rentre
dans une classe d’algorithmes par ajustements successifs, et donc n’apporte pas de solution
sp´cifique au probl`me 8.1. Par contre, l’algorithme dans sa version non acc´l´r´e permet de
   e                 e                                                           ee e
restreindre le calcul aux chemins ayant une longueur maximum donn´e.    e
     Les deux algorithmes qui vont suivre rentrent dans la classe des algorithmes gloutons, c’est
a
` dire qu’ils calculent le r´sultat d´finitif de chaque sommet, examin´s dans un certain ordre,
                            e        e                                   e
sans jamais revenir en arri`re - c’est ` dire sans jamais remettre en cause les r´sultats partiels
                             e          a                                         e
d´j` acquis. A ce titre, ils peuvent ˆtre adapt´s au probl`me 8.1. Toutefois, ils ne s’appliquent
  ea                                  e         e          e
qu’` des graphes ayant des propri´t´s particuli`res : valeurs positives ou nulles pour le premier,
    a                               ee           e
graphes sans circuit pour le second.


8.5      Cas des arcs de valeur positive ou nulle : algorithme de
        DIJKSTRA
    G = (X,Γ,v) est un graphe valu´, avec ∀γ ∈ Γ : v(γ) ≥ 0 si bien que G ne poss`de aucun
                                  e                                              e
circuit absorbant.

                                               c IFSIC 2004
8.5. Cas des arcs de valeur positive ou nulle : algorithme de DIJKSTRA                          113


8.5.1     Principe de l’algorithme de DIJKSTRA
     L’ algorithme de Dijkstra est une strat´gie particuli`re de l’algorithme d’exploration pour
                                                e            e
le calcul de la descendance du sommet 1 vu au 6.2. Il est donc plus simple que l’algorithme
d’exploration de Ford du §8.3, bas´ sur l’exploration de tous les chemins ´l´mentaires issus de
                                     e                                      ee
1 : ceci est du ` l’hypoth`se plus restrictive sur les valeurs des arcs.
                a          e
     Par rapport au sch´ma g´n´ral du §6.2, les pr´cisions et modifications suivantes sont ap-
                         e     e e                     e
port´es :
     e
   – Lorsqu’un sommet z devient en attente, ses attributs sont initialis´s :
                                                                           e
     λ(z)←λ(y) + v(y,z); pred(z)←y, o` y est son p`re dans l’arborescence d’exploration.
                                         u            e
   – Lorsqu’un sommet z est termin´, ses attributs (λ(z), pred(z)) sont d´finitifs (leur valeur
                                     e                                         e
     est correcte)
   – La s´lection d’un sommet d’´tat en attente se fait selon le crit`re suivant : on choisit le som-
         e                       e                                   e
     met y d’´tat en attente dont l’attribut λ(y) est minimum. Le sommet s´lectionn´ devient
              e                                                                  e         e
     alors termin´ et, pour tout z ∈ Γ(y) :
                  e
        – si z est dehors, il devient en attente et ses attributs sont initialis´s
                                                                                e
        – si z est en attente ses attributs sont r´´valu´s de la mani`re habituelle :
                                                  ee     e             e
           si λ(y) + v(y,z) < λ(z)
              alors λ(z)←λ(y) + v(y,z); pred(z)←y
           fsi
        – si z est termin´, il est ignor´.
                         e              e
    Le fait que les attributs des sommets puissent atteindre leur valeur finale avant la fin de
l’algorithme, et que l’on sache ` quel moment de l’ex´cution ce fait se produit, indique que cet
                                a                    e
algorithme rentre dans la classe des algorithmes gloutons.

Remarque. Au §6.2 nous avions mis en ´vidence les strat´gies en largeur d’abord et en pro-
                                             e                 e
fondeur d’abord. La strat´gie utilis´ ici peut ˆtre qualifi´e, elle, de meilleur d’abord (best-first
                           e         e         e            e
search). Relativement au probl`me trait´, cette strat´gie est informante, c’est-`-dire qu’elle tient
                                e        e            e                          a
compte des informations d´j` obtenues sur les valeurs de chemins (informations s´mantiques),
                             ea                                                       e
alors que les deux premi`res sont aveugles, c’est-`-dire purement syntaxiques.
                         e                        a
    La gestion de l’ensemble des sommets d’´tat en attente, not´ A, va ˆtre effectu´e selon
                                                e                    e         e           e
la structure de donn´es appel´e tas, qui est une structure ordonn´e dans laquelle l’acc`s ` un
                     e          e                                    e                      e a
´l´ment de valeur minimum parmi tous les ´l´ments de l’ensemble se fait en temps constant, c’est-
ee                                          ee
a
`-dire ind´pendant du nombre d’´l´ments contenus dans cette structure. De mani`re analogue
          e                       ee                                                  e
aux files (§6.3.1) et aux piles (§6.3.2), on consid`re le type tas comme un type de donn´es
                                                    e                                            e
abstrait. La d´claration
               e
    TAS[E ORD] t d´clare un tas d’objets de type E ORD, o` E ORD est un type dont les valeurs sont
                   e                                      u
ordonn´es.
       e
    Les op´rations sur les tas sont alors :
           e
creer                              cr´e un nouveau tas vide
                                     e
BOOL tasvide                       pr´dicat ` valeur vrai si et seulement si le tas est vide
                                     e      a
mettre en tas(E ORD v)             ajout dans le tas de l’´l´ment de valeur v
                                                          ee

                                             c IFSIC 2004
114                                                              Chemins de valeur optimale


^ter de tas
o                                  retrait d’un ´l´ment de valeur minimum (erreur si le tas est
                                                ee
                                   vide)
E ORD mintas                       d´livre un ´l´ment du tas de valeur minimum, sans modifier
                                     e         ee
                                   le tas (erreur si le tas est vide)
reorg(E ORD v1, v2)                remplacement dans le tas de la valeur v1 par la valeur v2
                                   (erreur si la valeur v1 est absente). nb: t.reorg(v1,v2)
                                   est ´quivalent ` la s´quence : t.^ter de tas(v1);
                                          e             a          e         o
                                   t.mettre en tas(v2)
   La mise en œuvre concr`te d’une telle structure abstraite et des acc`s est vue dans les cours
                            e                                          e
de techniques ou m´thodes de programmation (elle se fait sous forme d’arbre binaire ordonn´,
                    e                                                                         e
complet ` gauche, souvent repr´sent´ en tableau). Noter que le terme liste de priorit´ (priority
        a                        e   e                                               e
queue) est aussi utilis´ pour d´signer un tas.
                       e       e

8.5.2     Analyse de l’algorithme
    L’analyse correspondant au principe expos´ ci-dessus est donc d´riv´e de celle de l’algorithme
                                                   e                  e e
g´n´ral d’exploration de la descendance de 1. Les ´l´ments du tas sont ici des objets ` deux
 e e                                                   ee                                   a
champs (SOMMET, RE   ´EL), o` ` chaque sommet x du graphe valu´ est associ´ son attribut λ(x)
                             ua                                     e          e
                    ee           e                                          e                   ´
(lorsque celui-ci a ´t´ initialis´). Les valeurs du type de base sont ordonn´es par le champ REEL
(attributs λ)
     Invariant : (I1) : A = sommets d’´tat en attente ⊆ Γ∗ (1)
                                               e
                    (I2) : T = sommets d’´tat termin´ ⊆ Γ∗ (1)
                                               e          e
                    (I3) : ∀x ∈ T : Γ(x) ⊆ T ∪ A
                    (I4) : ∀x ∈ T :
                             (λ(x), pred(x)) = attributs minimaux de x
                    (I5) : ∀x ∈ A :
                              λ(x)       = miny∈T ∩Γ−1 (x) (λ(y) + v(y,x))
                              pred(x) = sommet pour lequel ce minimum est at-
                                             teint
     Termin´ :e               A.tasvide

      Progression :         (nouv, λ) ←A.mintas ;
                            A.oter de tas ;
                            T ←T ∪ {nouv} ;
                            M OD ←Γ(nouv) ;
                            ∀x ∈ M OD :
                               si x ∈ A
                                    alors mise ` jour de (λ(x), pred(x))
                                                a
                                    sinon initialisation de (λ(x), pred(x)) ;
                                    A.mettre en tas(x, λ(x))
                               fsi

      Valeurs initiales :   T ←∅ ; A.creer
                            λ(x0 ) ←0 ;
                            A.mettre en tas((x0 ,0))

                                             c IFSIC 2004
8.5. Cas des arcs de valeur positive ou nulle : algorithme de DIJKSTRA                           115


8.5.3       Exemple d’ex´cution
                        e


                                                 1                                       1
                                         1                               5                   8
                                 3           2                       2       2               4
                                     4                                           1
                             0                           2                           6
                                                                                         5
                                                     2           4
                                 5                                           1
                                         3                           4                       7
                                                 2                               2



                         Fig. 8.2 – Exemple pour l’algorithme de Dijkstra

    Etape     nouv   MOD         tas                         Termin´s
                                                                   e
     init                        (0,0)

        1       0    1,2,3       (1,3),(2,4),(3,5)           0

        2       1    2,5         (2,4),(5,4),(3,5)           0,1

        3       2    3,4         (5,4),(3,5),(4,8)           0,1,2

        4       5    2,6         (3,5),(4,8),(6,6)           0,1,2,5

        5       3    4           (6,6),(4,7)                 0,1,2,5,3

        6       6    2,7         (4,7),(7,11)                0,1,2,5,3,6

        7       4    -,7         (7,9)                       0,1,2,5,3,6,4

      8        7    ∅       ∅               0,1,2,5,3,6,4,7
   fin de l’algorithme. Le sommet 8 est inaccessible

8.5.4       Texte de l’algorithme
8.5.5       Preuve


   Lemme 8.17 Les valeurs initiales v´rifient l’invariant
                                     e

D´monstration. Evident.
 e


   Lemme 8.18 L’invariant est maintenu par la progression.

D´monstration. Les parties I1, I2 et I3 de l’invariant sont maintenues par la progression : seul
 e

                                                     c IFSIC 2004
116                                                           Chemins de valeur optimale


                              ALGORITHME DE DIJKSTRA


REEL SOMMET::λ ; SOMMET SOMMET::pred ;
dijkstra(GRAPHE G, SOMMET x) c’est
   local ENUM[dehors,en attente,termin´] SOMMET::´tat ;
                                       e         e
        TAS[DOUBLET[SOMMET, REEL]] A;
        ENS[SOMMET] MOD --    sommets modifiables
        SOMMET z, nouv ;
        REEL w;
 d´but
  e
   depuis
     pourtout x de G.lst som faire x.´tat ← dehors fpourtout ;
                                     e
      A.creer ;
      x.´tat ← en attente ; x.λ ← 0 ;
        e
      A.mettre en tas((x,0)) ;
     jusqua A.vide
     faire
       (nouv,w) ← A.mintas ; -- w=nouv.λ
        A.^ter de tas;
          o
        nouv.´tat ← termin´ ;MOD ← G.lst succ(nouv) ;
             e             e
        -- mise ` jour des marques des sommets modifiables
                  a
         pourtout z de MOD
            cas z.´tat = dehors −→ z.´tat ← en attente ;
                   e                  e
                                    z.λ ← w + G.v(nouv, z) ;
                                    z.pred ← nouv ;
                                    A.mettre en tas((z, z.λ))
                 z.´tat = en attente −→ si w + G.v(nouv, z) < z.λ
                     e
                                         alors
                                              A.reorg((z, z.λ),(z, w + G.v(nouv, z)));
                                              z.λ ← w + G.v(nouv, z) ;
                                              z.pred ← nouv
                                        fsi
                z.´tat = termin´ −→ rien
                  e            e
            fcas
         fpourtout
  fait
--  les sommets d’´tat dehors sont inaccessibles
                  e
 fin



le sommet nouv passe de l’´tat en attente ` l’´tat termin´; il est ˆt´ de A, ajout´ ` T et il
                           e                a e           e        oe             e a
est descendant de 1. D’autre part, les nouveaux ´l´ments de A sont successeurs de nouv, donc
                                                ee

                                          c IFSIC 2004
8.5. Cas des arcs de valeur positive ou nulle : algorithme de DIJKSTRA                       117


descendants de 1.
Pour I4 et I5, il faut montrer :
    1. le sommet nouv v´rifie I4
                        e
    2. les sommets z ∈ A, dont les attributs sont initialis´s ou modifi´s, v´rifient I5
                                                           e          e    e
£ Maintien de I4 : ici, T d´signe la valeur de l’ensemble des sommets d’´tat termin´ au d´but
                              e                                               e     e    e
du pas d’it´ration (avant l’adjonction de nouv).
           e
                                           Soit u un chemin quelconque de 1 `     a
                                           nouv. Comme 1 ∈ T et nouv ∈ T ,
             x
              0
                                           ce chemin ”sort” de T : soit z le der-
                                  nouv     nier sommet de u, faisant partie de
                                           T , et z son successeur sur u, qui
                                           appartient donc ` A par construc-
                                                               a
                       z       z'
           M                               tion (´ventuellement, z = nouv). Le
                                                 e
                                           chemin u se d´compose en :
                                                           e
                                                 u = [1 ∗ z] · (z,z ) · [z ∗ nouv],
                                           et donc :
      v(u) = v[1 ∗ z] + v(z,z ) + v[z ∗ nouv]
              ≥ v[1 ∗ z] + v(z,z )                 (valeurs des arcs ≥ 0)
              ≥ λ(z) + v(z,z )                     (z ∈ T ) et I4
              ≥ λ(z )                              (z ∈ Γ−1 (z ) ∩ T et I5)
              ≥ λ(nouv)                            (crit`re de s´lection de nouv)
                                                        e        e
    λ(nouv) minore donc la valeur des chemins de 1 ` nouv.
                                                    a
    D’autre part, soit y = pred(nouv). Par construction :
      λ(nouv) = λ(y) + v(y,nouv)
Comme y ∈ T , il existe un chemin [1 ∗ y], de valeur λ(y). Le chemin [1 ∗ y].(y,nouv) a donc pour
valeur λ(nouv), ce qui montre le point 1 (maintien de I4).
£ Maintien de I5 : Soit x ∈ Γ(nouv).
    – Si x est dans l’´tat dehors, alors Γ−1 (x) ∩ T = {nouv}, sans quoi x serait d´j` dans A au
                      e                                                            ea
      d´but de l’´tape. Par construction, les attributs de x v´rifient bien I5
       e         e                                            e
    – Si x est dans l’´tat en attente, alors nouv est ajout´ ` Γ−1 (x) ∩ T , et le test sur λ(x)
                       e                                     e a
      montre que les nouveaux attributs de x v´rifient toujours I5
                                                  e
P


    Proposition 8.19 (Correction partielle). Si l’algorithme s’arrˆte, on a
                                                                    e
    ` l’arrˆt :
    a      e
    ∀x ∈ Γ∗ (1)), les valeurs (λ(x), pred(x)) constituent les attributs mini-
    maux de x

D´monstration. Il suffit de montrer que, lorsque l’algorithme est termin´, on a : T = Γ∗ (1); le
   e                                                                  e
r´sultat d´coule alors de I4.
 e        e
     D’apr`s I1, on a T ⊆ Γ∗ (1)
          e

                                             c IFSIC 2004
118                                                              Chemins de valeur optimale


    R´ciproquement, d’apr`s I3 et la condition d’arrˆt A = ∅, tout successeur d’un sommet de
      e                      e                      e
T appartient ` T ; donc tout descendant d’un sommet de T appartient aussi ` T , ce qui montre
               a                                                           a
l’inclusion inverse Γ∗ (1) ⊆ T P


   Proposition 8.20 (Terminaison) L’algorithme s’arrˆte au bout d’un
                                                    e
   nombre fini d’it´rations
                  e

D´monstration. La fonction card(T ) est strictement croissante, ` valeurs enti`res positives ou
  e                                                                 a            e
nulles et major´e par la valeur finie card(Γ∗ (1)); la condition d’arrˆt (A = ∅) ≡ (T = Γ∗ (1)) est
               e                                                     e
donc obtenue en un nombre fini d’´tapes. P
                                   e

8.5.6    Complexit´
                  e
   L’algorithme effectue au plus n pas d’it´rations, et ` l’´tape no k, on a :
                                               e             a e
  card(T ) = k,
  card(A) ≤ n − k,
  card(M OD) ≤ d+ (nouvk ), o` d+ (x) = card(Γ(x)), et nouvk le k eme sommet termin´.
                                  u                                    `                e
   La boucle sur M OD comporte donc au plus d           + (nouv ) additions, comparaisons et acc`s
                                                                                                e
                                                                 k
mettre en tas ou reorg (exclusivement l’un de l’autre).
   De plus, 1 acc`s min, 1 acc`s ˆter de tas et un acc`s lst succ sont effectu´s ` chaque ´tape.
                    e             e o                      e                    e a        e
   Au total, on a donc au plus (m d´signe le nombre d’arcs) :
                                        e
                n
                k=1   d+ (nouvk ) = m additions, comparaisons;
              m                          acc`s mettre en tas ou reorg
                                             e
              n                          acc`s min, ˆter de tas;
                                             e       o
              n                          acc`s lst succ
                                             e
   Or, on d´montre (dans les cours sur les structures de donn´es ou sur les m´thodes de tri)
             e                                                       e              e
que la gestion d’un tas de p ´l´ments n´cessite O(log2 p) comparaisons pour la mise en œuvre
                                ee          e
des acc`s mettre en tas, reorg, ˆter de tas et O(1) pour min.
        e                         o
   La complexit´ de l’algorithme est donc finalement :
                  e
              O(m + n log2 n) comparaisons
              O(n)                 acc`s lst succ
                                      e
Remarque. Supposons qu’il existe une constante d telle que ∀x ∈ X : d+ (x) ≤ d (ce qui
implique notamment m ≤ d.n). On a alors O(m) = O(n) et, de plus, la complexit´ de mise en
                                                                                      e
œuvre d’un acc`s lst succ est O(1). L’algorithme est alors en O(n log2 n)
                e
   (La mˆme remarque vaut si le graphe est peu dense, c’est-`-dire m est beaucoup plus petit
          e                                                        a
que n2 )


8.6      Cas des graphes sans circuit : algorithme ORDINAL
8.6.1    Principe
   Comme l’algorithme de Dijkstra, cet algorithme rentre dans la cat´gorie des algorithmes
                                                                            e
gloutons; c’est l’hypoth`se restrictive d’absence de circuit qui rend cette simplification possible.
                        e

                                            c IFSIC 2004
8.6. Cas des graphes sans circuit : algorithme ORDINAL                                      119


(Par contre, les valeurs des arcs peuvent ˆtre de signe quelconque).
                                          e
    Dans un premier temps, nous pr´sentons un algorithme valable dans le cas o` le sommet 1
                                     e                                        u
est racine de G, c’est ` dire :
                       a

     Γ−1 (1) = ∅ et Γ∗ (1) = X

Nous verrons ensuite comment lever cette hypoth`se. e
    Le parcours de la liste des arcs est ici organis´ selon la m´thode employ´e lors du calcul de
                                                    e           e             e
la fonction ordinale (§7.2) avec, en plus, la prise en compte des valeurs des arcs, d’o` le nom
                                                                                        u
donn´ ` cet algorithme. Ainsi, un arc (x,y) est examin´ lorsque x est point d’entr´e du graphe
     ea                                                   e                         e
courant, sachant que les attributs d´finitifs (λ(x), pred(x)) ont d´j` ´t´ calcul´s.
                                     e                             eaee         e
    La mise en œuvre de cet algorithme se fait alors selon l’analyse qui suit.


8.6.2     Analyse


Invariant :             H sous-graphe de G ;
                        E = ensemble des points d’entr´e de H ;
                                                      e
                        M = G.ens som  H.ens som (sommets qui ne sont pas dans H).
                        ∀x ∈ M : (λ(x), pred(x)) = attributs minimaux de x

Arrˆt :
   e                    H vide

Progression : (H non vide, donc E non vide puisque H n’a pas de circuit)
                     x ←element(E) ; - - tous les pr´d´cesseurs de x sont dans M
                                                    e e
                     λ(x) ←miny∈Γ−1 (x) (λ(y) + v(y,x))
                     pred(x)=sommet pour lequel ce min est atteint
                     M ←M ∪ {x};
                     H.oter sommet(x) ;
                     E ←H.points entree

Valeurs initiales :     H ←G ; H.oter som(1) ;
                        M ←{1} ;
                        λ(1) = 0 ; pred(1) non d´fini;
                                                e
                        E ←H.points entree


8.6.3     Preuve


   Lemme 8.21 Les valeurs initiales satisfont l’invariant.

 e            ´
D´monstration Evident, par construction.                                                       P

                                           c IFSIC 2004
120                                                                 Chemins de valeur optimale



   Lemme 8.22 La progression maintient l’invariant.

D´monstration Notons H ,M ,E les valeurs au d´but de l’´tape. Par hypoth`se, l’invariant
  e                                                     e          e                 e
est v´rifi´ pour ces valeurs. Soit H, M, E les valeurs ` la fin de l’´tape, et x le sommet s´lectionn´
     e e                                              a            e                      e        e
durant l’´tape.
         e
    – H = H priv´ de x, donc H est un sous-graphe de G.
                   e
    – M = M ∪ {x} donc M est l’ensemble des sommets qui ne sont pas dans H.
    – E = ensemble des points d’entr´e de H, par construction.
                                       e
    – ∀y ∈ M : (λ(y), pred(y)) = attributs minimaux de y. Il reste donc ` montrer quea
      (λ(x), pred(x)) = attributs minimaux de x.
On peut ´crire :
          e
      Cx =               Cy,x
             y∈Γ−1 (x)
o` Cy,x est l’ensemble de chemins de 1 ` x dont l’avant-dernier sommet est y. On a donc, par
 u                                     a
associativit´ du minimum :
            e

      min v(u) =            min ( min v(u))
      u∈Cx                y∈Γ−1 (x) u∈Cy,x
                   =        min ( min (v[1 y] + v(y,x)))
                          y∈Γ−1 (x) u∈Cy,x

                   =        min ( min (v(u ) + v(y,x)))
                          y∈Γ−1 (x) u ∈Cy

                   =        min (v(y,x) + min v(u )) et, comme y ∈ M :
                          y∈Γ−1 (x)          u ∈Cy
                   =        min (v(y,x) + λ(y))
                          y∈Γ−1 (x)
                   = λ(x)

    De plus, λ(x) = v(y,x) + λ(y), avec y = pred(x). Donc pred(x) est bien le pr´d´cesseur de x
                                                                                e e
sur un chemin de 1 ` x, de valeur λ(x). Enfin, par hypoth`se sur G, tout chemin est ´l´mentaire.
                   a                                      e                         ee
Donc, (λ(x), pred(x)) satisfont la d´finition des attributs minimaux de x.
                                    e                                                        P



   Proposition 8.23 (Correction partielle) A l’arrˆt de l’algorithme :
                                                     e
   ∀x ∈ X les attributs (λ(x), pred(x)) sont minimaux.

D´monstration A l’arrˆt, on a H.vide donc M = G.ens som. Le r´sultat d´coule de l’invariant.
 e                   e                                       e        e
                                                                                          P



   Proposition 8.24 (Terminaison) L’algorithme s’arrˆte au bout d’un
                                                    e
   nombre fini d’´tapes.
                e


                                                     c IFSIC 2004
8.6. Cas des graphes sans circuit : algorithme ORDINAL                                      121



D´monstration A la fin de chaque ´tape, on a ¬H.vide ⇒ E = ∅ car le graphe est sans
  e                                      e
circuit (cf. proposition 7.1). Donc, dans chaque ´tape, la s´lection d’un sommet x est possible.
                                                 e          e
Ce sommet ´tant ˆt´ de M lors de l’´tape, la fonction card(X  M ), minor´e par 0, d´croˆ
              e     oe                  e                                     e          e ıt
strictement d’une unit´ ` chaque pas d’it´ration.
                        ea                 e                                                  P




8.6.4    Texte de l’algorithme

   Il est donn´ page 121
              e


                            ALGORITHME ORDINAL RACINE


REEL SOMMET::λ ; SOMMET SOMMET::pred ;

ordinal racine(GRAPHE G; SOMMET x) c’est
   local ENS[SOMMET] M; -- sommets marqu´s   e
         ENS[SOMMET] E; -- points d’entr´e courants
                                           e
         GRAPHE H ; -- graphe courant
         SOMMET x, y;
d´but
 e
  depuis
     x.λ ← 0 ; H ← G; H.otersom(x) ;
     M ← {x0 } ;
     E ← H.points entree
 jusqua H.vide ou sinon E = ∅
  faire
     -- selection d’un sommet de E
     x ← E.element ;
     (x.λ, x.pred) ← min(y.λ+G.v(y,x), G.lst pred(x)) ;
     M ← M ∪ {x} ;
     H.oter sommet(x) ;
     E ← H.points entree
  fait ;
-- si E=∅ alors G a des circuits : algorithme inapplicable
fin
 min a la mˆme signification que dans l’algorithme de
           e
Bellmann-Kalaba (cf. page 109).




                                           c IFSIC 2004
122                                                              Chemins de valeur optimale


8.6.5     Complexit´
                   e
   Il y a exactement n ´tapes. A chaque ´tape, un sommet est d´finitivement ”marqu´” (mis
                        e                 e                      e                   e
dans M). Si x d´signe ce sommet, le calcul de x.λ est un calcul de minimum sur l’ensemble
                e
des pr´d´cesseurs de x, qui n´cessite | Γ−1 (x) | −1 comparaisons. L’algorithme effectue donc
       e e                   e
        −1
    (| Γ (x) | −1) = m − n comparaisons (m est le nombre d’arcs de G, avec m ≤ n2 ). C’est
x∈X
donc un algorithme en O(n2 ).

8.6.6     Adaptations et am´liorations
                           e
8.6.6.1    Calcul progressif des attributs
    Au lieu de calculer les attributs (λ(x), pred(x)) d’un seul coup (lorsque x est ˆt´ du graphe),
                                                                                    oe
on peut les calculer progressivement en maintenant l’invariant suivant:
    ∀x ∈ E : (λ(x), pred(x))=attributs minimaux de x. Pour cela, on modifie la progression
ainsi(x d´signe le sommet s´lectionn´ ` l’´tape courante) :
         e                   e         ea e

  pour tout y de H.lst succ(x)
     si x.λ+H.v(x,y) < y.λ
         alors y.λ ← x.λ+H.v(x,y) ;
               y. pred ← x
     fsi
  fpour
Il est alors facile de v´rifier que tout sommet devenant point d’entr´e de H aura d´j` ses attributs
                        e                                           e             ea
minimaux.

8.6.6.2    Mise ` jour de l’ensemble des points d’entr´e
                a                                     e
   Dans la progression, l’ensemble des points d’entr´e E est recalcul´. Or, si H et E (resp. H
                                                     e               e
et E) d´signent les valeurs au d´but (resp. ` la fin) d’une ´tape, on a :
       e                        e           a              e
   H est obtenu en enlevant de H un sommet x ∈ E ,
   E est l’ensemble des points d’entr´e de H.
                                      e

On pourrait exploiter la connaissance de E pour recalculer E :
   E = E  {x}∪{nouveaux points d’entr´e}. Or, les nouveaux points d’entr´e ne peuvent ˆtre
                                           e                                  e              e
que parmi les successeurs de x. On associe ` chaque sommet y l’attribut entier nb tel que nb(y)=
                                           a
nombre de pr´d´cesseurs de y dans H. Ces attributs sont g´r´s de la mani`re suivante :
             e e                                           ee              e
   – D`s que y est ”visit´” (c’est-`-dire lorsqu’un de ses pr´d´cesseurs est s´lectionn´) : y.nb
       e                  e        a                         e e                e        e
     ←H.nb pred(y) (initialisation).
   – Lorsqu’un sommet x est ˆt´ de H :
                               oe

  ∀ y ∈ H.lst succ(x) : y.nb ← y.nb-1;
  si y.nb =0 alors E ← E ∪ {y}


                                            c IFSIC 2004
8.6. Cas des graphes sans circuit : algorithme ORDINAL                                123


8.6.6.3   Nouvelle version de l’algorithme
    On peut mettre en œuvre l’une ou l’autre de ces deux adaptations. On donne le texte de
l’algorithme prenant en compte les deux ` la fois.
                                        a

                  ALGORITHME ORDINAL RACINE (deuxi`me version)
                                                  e


REEL SOMMET::λ ; SOMMET SOMMET::pred ;

ordinal racine(GRAPHE G, SOMMET x) c’est
   local ENS[SOMMET] D; -- sommets dehors
          ENS[SOMMET] E; -- points d’entr´e courants
                                           e
          GRAPHE H ; -- graphe courant
          ENT SOMMET ::nb ;
          SOMMET x, y;
d´but
 e
  depuis
     x.λ ← 0 ; H ← G;
     D ← G.ens som  {x0 } ;
     E ← {x0 }
 jusqua H.vide ou sinon E = ∅
  faire
     -- selection d’un sommet de E
     x ← E.element ;
     pour tout y de H.lst succ(x)
         si y ∈ D
           alors y.nb ← H.nb pred(y) ;
                  y.λ ← x.λ+H.v(x,y) ;
                  y.pred ← x
           sinon
             si x.λ+H.v(x,y) < y.λ
               alors y.λ ← x.λ+H.v(x,y) ;
                      y.pred ← x
             fsi ;
             y.nb ← y.nb - 1 ;
             si y.nb=0 alors E ← E ∪ {y} fsi
     fpourtout ;
     E ← E  {x}
   fait ;
-- si E=∅ alors G a des circuits : algorithme inapplicable
 fin




                                          c IFSIC 2004
124                                                                 Chemins de valeur optimale


8.6.6.4    G´n´ralisation au cas o` 1 n’est pas n´cessairement point d’entr´e
            e e                   u              e                         e
    Il faut alors tenir compte des sommets x ∈ Γ∗ (1), pour lesquels λ(x) ne doit pas ˆtre d´fini.
                                                                                      e     e
L’algorithme doit alors mettre en ´vidence, parmi les sommets ”marqu´s”, ceux qui sont des-
                                    e                                    e
cendants de 1. Le calcul des attributs (λ(x), pred(x)) se fera en ne tenant compte que des
descendants de 1, g´r´ comme dans les algorithmes d’exploration.
                     ee
    Nous laisserons au lecteur le soin d’´crire le texte de l’algortihme, d’´tablir la preuve et
                                         e                                  e
d’´tudier la complexit´, de mani`re analogue ` l’algorithme Ordinal-racine.
  e                     e         e           a


8.7       Valeurs optimales de tout sommet ` tout sommet
                                           a
8.7.1     De la fermeture transitive aux valeurs optimales
   Le but de ce probl`me est de calculer les nombres
                      e
   λij = valeurs minimales des chemins de i ` j pour tous couples (i,j) (si j ∈ Γ+ (i), on peut
                                              a
poser, arbitrairement, λij = +∞).
   Si on revient au probl`me de la fermeture transitive, il s’agissait alors de calculer les bool´ens :
                         e                                                                       e

      bij = (j ∈ Γ+ (i))

   Il est clair que ces bool´ens v´rifient :
                            e     e

      (2) ∀i ∈ X, ∀j ∈ X : bij =            [bik ∧ v(k,j)]
                                    k∈Γ−1 (j)

   o` v(k,j) est la valeur d’existence (bool´enne) de l’arc(k,j).
     u                                      e
   La comparaison de (1) et (2) montre qu’il y a une analogie entre les deux probl`mes, aux
                                                                                  e
transformations suivantes pr`s :
                            e

 valeur des arcs et des chemins :       r´el ∪{+∞}
                                          e                      booleen
     op´rations sur les arcs :
        e                                     +
   op´rations sur les chemins :
     e                                       min
      valeurs remarquables :           0 (neutre de +)     vrai (neutre de )
                                    +∞ (neutre de min, faux (neutre de ,
                                       absorbant de +)       absorbant de
    Ceci sugg`re l’id´e suivante : de tout algorithme d’existence de chemin on peut d´duire un
             e        e                                                                  e
algorithme de chemin de valeur minimale.
    En particulier, les algorithmes de calcul de la fermeture transitive ont leur ´quivalent.
                                                                                  e

8.7.2     Transformation de l’algorithme des puissances
   Pour l’algorithme des puissances, il suffit de remplacer :
   – L’op´ration ◦ par +, dont nous donnons l’algorithme ci-dessous page 125
          e
   – L’op´ration par l’op´ration min telle que :
          e                e
            G3 = (X,Γ3,V 3) = min(G1,G2) est d´fini par :
                                              e

                                                c IFSIC 2004
8.7. Valeurs optimales de tout sommet ` tout sommet
                                      a                                                       125


            V 3(i,j) = min[V 1(i,j),V 2(i,j)]

            (par convention, (i,j) ∈ Γ ⇔ v(i,j) < +∞)


                                   ALGORITHME G1               + G2


GRAPHE composer-general(GRAPHE G1, G2) c’est
 -- pr´ : G1.lst som = G2.lst som; G1 et G2 ont mˆme type de valeurs d’arcs
        e                                        e
   local SOMMET x, y, z ; ENS[SOMMET] X
        REEL w1, w2, w3 ;
 d´but
  e
   Result.creer ; X ← G1.lst som ; -- ou G2.lst som
    pourtout x de X
       pourtout y de X
         w3 ← Result.v(x,y) ;
         pourtout z de X
           w1 ← G1.v(x,z) ;
           w2 ← G2.v(z,y) ;
              si w1 = nil et w2 = nil
                 alors si w3 = nil
                            alors w3 ← min(w1 + w2, w3)
                            sinon w3 ← w1 + w2
                         fsi
                fsi
           fpourtout ;
           si w3 = nil alors Result.modif val(x,y,w3) fsi
         fpourtout
      fpourtout
 fin



    La validit´ de l’algorithme des puissances (adapt´ du §5.3) d´coule des propri´t´s alg´briques
              e                                       e            e               ee      e
suivantes, faciles ` v´rifier :
                   a e
    min est associative, commutative
      + est associative, poss`de l’´l´ment neutre D = (X,∆) valu´ par 0, et est distributive par
                               e   ee                                e
rapport ` min.
         a
    Enfin, ∀k : la valeur v (k) de tout arc (x,y) ∈ Γ(k) est ´gale ` la valeur minimale des chemins
                                                            e     a
reliant x ` y dans G, de longueur k.
          a
    Toutefois, la possibilit´ d’existence de circuits absorbants oblige ` faire les v´rifications
                             e                                              a           e
suppl´mentaires suivantes pour l’algorithme des puissances (§5.3) : il faut rajouter la condi-
      e
tion d’arrˆt k = n qui, si elle est obtenue, est ´quivalente ` l’existence d’un circuit absorbant ;
           e                                     e            a

                                                c IFSIC 2004
126                                                                           Chemins de valeur optimale


en effet, on a alors :

      min(G, . . . ,G(n) ) = min(G, . . . ,G(n−1) )

ce qui prouve qu’il existe un chemin de longueur n (circuit hamiltonien ou chemin non ´l´mentaire),
                                                                                      ee
de valeur v < aux valeurs de tous les chemins ´l´mentaires.
                                                ee

8.7.3    Transformation de l’algorithme de Roy-Warshall
    En nous inspirant des mˆmes principes, nous pouvons adapter l’algorithme de Roy-Warshall (ap-
                             e
pel´ Warshall-Floyd); nous donnons ci- dessous (page 127) la version avec routage proc´dur´,
   e                                                                                    e   e
suivie des proc´dures de routage.
                e
    Nous ne red´montrerons pas en d´tail cet algorithme, la d´monstration ´tant en tous points
                 e                   e                       e             e
analogue ` celle de l’algorithme de roy- Warshall avec routage ; on a les 3 lemmes suivants :
          a
   1. A l’issue de l’algorithme,
            ∀z ∈ X,∀y ∈ X : y.R[z] = nil si et seulement si (y,z) ∈ Γ+
   2. Si G n’a pas de circuit absorbant alors, pour tout couple (y,z) ∈ Γ+ on a, ` l’issue de
                                                                                 a
      l’algorithme :
            y.R[z] est successeur de y sur un chemin de valeur minimale de y ` z.
                                                                             a
   3. Si G n’a pas de circuit absorbant alors, pour tout couple (y,z) ∈ Γ+ , tout chemin de valeur
       minimale de y ` z est ´l´mentaire
                         a      ee
On d´duit de ces trois lemmes que : si G n’a pas de circuit absorbant, les tables de routage R
      e
permettent d’obtenir les trac´s de chemins de valeur minimale entre tout couple de sommets.
                                 e
Cas o` G a des circuits absorbants
        u
    Cette situation peut ˆtre d´tect´e ` l’examen du graphe Result ` l’issue de l’algorithme. En
                             e     e     e a                             a
effet, l’existence d’un circuit absorbant passant par un sommet x se manifestera par la propri´t´ :
                                                                                                ee
Result.v(x,x) < 0
    Si tel est le cas, les valeurs des arcs de Result ne peuvent ˆtre interpr´t´es comme des valeurs
                                                                 e           ee
minima, puisque les valeurs des chemins ne sont pas n´cessairement born´es inf´rieurement.
                                                              e                   e    e
Toutefois, les fonctions de routage permettent d’obtenir le trac´ de circuits absorbants, et donc
                                                                    e
d’en ´liminer. En effet, soit x ∈ X tel que Result.v(x,x) < 0. La suite d´finie par
     e                                                                        e
       x1 = x.R[x],x2 = x1 .R[x], . . . ,xj = xj−1 .R[x]
    comporte une r´p´tition, laquelle correspond ` un circuit absorbant.
                      e e                              a
    Exemple :

                                                                      0
                                             1                   -2
                                        1              2                  3


                                                                 -2

   Sur une mise en œuvre matricielle (y.R[z] = R[y,z]) on obtient, par applications successive
de θ1 , θ2 , θ3 (` gauche : matrice des valeurs, ` droite matrice R) :
                 a                               a

                                                  c IFSIC 2004
8.7. Valeurs optimales de tout sommet ` tout sommet
                                      a                                 127


                               Algorithme WARSHALL-FLOYD


TABLE[SOMMET,SOMMET] SOMMET::R ;
GRAPHE warshall floyd(GRAPHE G) c’est
   local SOMMET x, y, z ; ENS[SOMMET] X ;
        REEL vy, vz, w ;
 d´but
  e
   Result ← G ; X ← G.lst som ;
   initroutage ;
    pourtout x de X
      pourtout y de X
         vy ← Result.v(y,x) ;
         si vy = nil alors
            pourtout z de X
               vz ← Result.v(x,z) ;
                si vz = nil alors
                   w ← Result.v(y,z) ;
                    si w = nil
                       alors si vy + vz < w
                                      alors w ← vy + vz ;
                                           maj routage(y,z,x)
                                fsi
                         sinon w ← vy + vz ; maj routage(y,z,x)
                     fsi ;
                     Result.modif val(y,z,w)
                  fsi
               fpourtout
           fsi
        fpourtout
      fpourtout
 fin

avec :
                                                     nil si (y,z) ∈ Γ
         initroutage : ∀z ∈ X, ∀y ∈ X : y.R[z]←
                                                     z   si (y,z) ∈ Γ

         majroutage(y,z,x) : y.R[z]←y.R[x]




                                             c IFSIC 2004
128                                                               Chemins de valeur optimale

      1    2    3                                  1   2    3
 1         1                               1           2
 2              -2                         2                3
 3    0    -2                              3       1   2
                                                           θ1 ↓
      1    2    3                                  1   2    3
 1         1                               1           2
 2              -2                         2                3
 3    0    -2                              3       1   2
                                                         θ2 ↓
      1    2    3                                  1   2  3
 1         1    -1                         1           2  2
 2              -2                         2              3
 3    0    -2   -4                         3       1   2 2
                                                           θ3 ↓

       1    2    3                                 1   2    3
 1    -1   -3   -5                         1       2   2    2
 2    -2   -4   -6                         2       3   3    3
 3    -4   -6   -8                         3       2   2    2

d’o` les suites (` partir de 1, 2 et enfin 3) :
   u             a
     1, R[1,1]=2, R[2,1]=3, R[3,1]=2 −→ circuit 2,3,2
     2, R[2,2]=3, R[3,2]=2 −→ circuit 2,3,2
     3, R[3,3]=2, R[2,3]=3 −→ circuit 3,2,3

Le circuit absorbant 2,3,2 (valeur -4) est d´tect´, mais pas le circuit 1,2,3,1 (valeur -1).
                                            e    e




8.8        Alg`bres de chemins : transformations d’algorithmes
              e

    Au paragraphe pr´c´dent, nous avons mis en ´vidence la possibilit´ de d´duction d’un algo-
                    e e                         e                    e     e
rithme de chemin de valeur minimale ` partir d’un algorithme d’existence de chemin, grˆce ` la
                                    a                                                 a a
transformation :

       ({vrai,faux}, ∨ ,∧) −→ (R ∪ {+∞}, min ,+)

    On peut d´gager une structure abstraite, appel´e dio¨ ou encore semi-anneau, ` partir
               e                                   e     ıde                     a
de laquelle d’autres transformations pourront ˆtre d´duites.
                                              e      e

                                                 c IFSIC 2004
8.8. Alg`bres de chemins : transformations d’algorithmes
        e                                                                                     129



   D´finition 8.25 On appelle dio¨ un triplet (S, ⊕ ,⊗) o` S est en
     e                               ıde                       u
   ensemble, muni des deux lois de composition internes ⊕ et ⊗ , et satis-
   faisant aux axiomes suivants :
   A1 ⊕ est associative, commutative et poss`de un ´l´ment neutre α.
                                              e      ee
   A2 ⊗ est associative et poss`de un ´l´ment neutre e.
                               e        ee
   A3 ⊗ est distributive ` droite et ` gauche par rapport ` ⊕.
                         a            a                   a
   A4 α est ´l´ment absorbant de ⊗.
             ee

La structure (E, ⊗ , ) introduite au paragraphe 8.1 rentre dans ce cadre. En effet, la relation
d’ordre d´finit une loi ⊕, de la mani`re suivante:
           e                         e


     w1 ⊕ w2 = w1 si w1         w2
                    w2 si w2    w1

  Les axiomes A1 ` A4 sont alors v´rifi´s sur (E, ⊕ ,⊗).
                  a                e e
pour A1:    – La v´rification de l’associativit´ et de la commutativit´ de ⊕ sont imm´diates
                   e                          e                      e              e
       – α est maximum pour , donc w ⊕ α = w
pour A2: les hypoth`ses sur ⊗ sont identiques
                    e
                                    w1 ⊗ w2 si w2 w3 compatibilt´ avec ⊗
                                                                       e
pour A3:       w1 ⊗ (w2 ⊕ w3 ) =
                                    w1 ⊗ w3 si w3 < w2
    D’autre part,


           w2    w3 ⇒ w1 ⊗ w2         w1 ⊗ w3
                      ⇒ (w1 ⊗ w2 ) ⊕ (w1 ⊗ w3 ) = w1 ⊗ w2

     et de mˆme
            e


           w3    w2 ⇒ w1 ⊗ w3         w1 ⊗ w2
                      ⇒ (w1 ⊗ w2 ) ⊕ (w1 ⊗ w3 ) = w1 ⊗ w3

     Dans les deux cas, on a donc :
           w1 ⊗ (w2 ⊕ w3 ) = (w1 ⊗ w2 ) ⊕ (w1 ⊗ w3 )
      On v´rifie de mˆme la distributivit´ ` droite.
           e           e                  ea
   Par contre, la structure de dio¨ (E,⊕,⊗) ne rentre pas toujours dans le cadre de la structure
                                  ıde
d´finie au §8.1: on ne peut pas toujours d´duire une relation d’ordre total de la loi de composition
 e                                       e
⊕. Ceci est illustr´ notamment par les exemples 8 et 9 ci-apr`s. La structure de dio¨ est donc
                   e                                           e                        ıde
plus abstraite, mais aussi plus riche - puisqu’elle permet de rendre compte de situations plus
nombreuses - que celle d’ensemble totalement ordonn´.  e

                                            c IFSIC 2004
130                                                                              Chemins de valeur optimale


    Dans la structure de dio¨ıde, la notion de circuit absorbant se g´n´ralise comme suit : un
                                                                     e e
circuit est dit absorbant si sa valeur v v´rifie :
                                          e

      v⊕e=e

    En fonction du choix du dio¨ (S, ⊕ ,⊗) on peut interpr´ter concr`tement la valeur (dans
                                 ıde                      e         e
S) v(x,y) et la valeur (dans S) des expressions :

      ∀x ∈ X,∀y ∈ X : λ(x,y) =                                 v(u) =                             v(u)
                                            {u∈X ∗ |u=[x∗y]}            {u∈X ∗ |u=[x∗y]∧v(u)=α}

o`, si u = (x1 , . . . ,xp ), on a pos´
 u                                    e
      v(u) =                 v(xj ,xj+1 )
               j=1,...,p−1
Exemples
1) Existence d’au moins un chemin

      S ≡ {faux,vrai}; ⊕ ≡ ∨; ⊗ ≡ ∧; α = faux; e = vrai

      v(x,y) = si(x,y) ∈ Γ alors vrai sinon faux;

      ∀s ∈ S,s ∨ vrai = vrai donc il n’y a pas de circuit absorbant ;

      λ(x,y) = vrai si et seulement si il existe un chemin de x ` y dans G.
                                                                a

2) Chemin de valeur minimale
    S = R ∪ {+∞}; ⊕ = min; ⊗ = +; α = +∞; e = 0;

        v(x,y) = si(x,y) ∈ Γ alors valeur num´rique de l’arc
                                             e
                             sinon + ∞

   Un circuit de valeur v telle que min(v,0) = 0 (c’est ` dire v < 0) est absorbant.
                                                        a
     λ(x,y) = valeur minimale des chemins de x ` y (s’il n’y a pas de circuit
                                                a
              absorbant)
3) chemin de valeur maximale

      S = R ∪ {−∞}; ⊕ = max; ⊗ = +; α = −∞; e = 0;

        v(x,y) = si (x,y) ∈ Γ alors valeur num´rique de l’arc
                                              e
                              sinon − ∞

Un circuit de valeur v telle que max(v,0) = 0 (c’est ` dire v > 0) est absorbant.
                                                     a
     λ(x,y) = valeur maximale des chemins de x ` y (s’il n’y a pas de
                                                     a
               circuit absorbant).
4) Chemin de fiabilit´ maximale
                         e

      S = [0,1]; ⊕ = max; ⊗ = ×; α = 0; e = 1;

                                                        c IFSIC 2004
8.8. Alg`bres de chemins : transformations d’algorithmes
        e                                                                                    131

      v(x,y) = si (x,y) ∈ Γ alors fiabilit´ de l’arc
                                         e
                            sinon 0

   Toute valeur p ∈ S v´rifie max(p,1) = 1 donc il n’y a pas de circuit absorbant.
                       e

     λ(x,y) = fiabilit´ maximale des chemins de x ` y.
                     e                           a

5) Chemin de capacit´ maximale
                    e

     S = R+ ∪ {+∞}; ⊕ = max; ⊗ = min; α = 0; e = +∞;

      v(x,y) = si (x,y) ∈ Γ alors capacit´ de l’arc
                                         e
                            sinon 0

   Toute valeur c ∈ S v´rifie max(c, + ∞) = +∞ donc il n’y a pas de circuit absorbant.
                       e

     λ(x,y) = capacit´ maximale des chemins de x ` y.
                     e                           a

6) Chemin de fiabilit´ minimale
                    e

     S = [0,1] ∪ {α}(α ∈ [0,1]);

     ⊕ = min sur [0, 1], prolong´e par ∀x ∈ S : x ⊕ α = x;
                                e

     ⊗ = × sur [0, 1], prolong´e par ∀x ∈ S : x ⊗ α = α; e = 1;
                              e

      v(x,y) = si (x,y) ∈ Γ alors fiabilit´ de l’arc
                                         e
                            sinon α

    Toute valeur p ∈ S,p = 1,p = α v´rifie p ⊕ e = min(p,1) = p donc tout circuit de fiabilit´ <
                                    e                                                      e
1 est absorbant.
    λ(x,y) = fiabilit´ minimale des chemins de x ` y (s’il n’y a pas de
                    e                             a
             circuit absorbant).
7) Chemin de capacit´ minimale
                         e

     S = R+ ∪ {+∞} ∪ {α}(α ∈ R+ ∪ {+∞});

     ⊕ = min sur R+ ∪ {+∞}, prolong´e par ∀x ∈ S : x ⊕ α = x;
                                   e

     ⊗ = min sur R+ ∪ {+∞}, prolong´e par∀x ∈ S : x ⊗ α = α;
                                   e

     e = +∞;
      v(x,y) = si (x,y) ∈ Γ alors capacit´ de l’arc
                                         e
                            sinon α

   Toute valeur p ∈ S,p = +∞,p = α, v´rifie p ⊕ e = min(p, + ∞) = p donc tout circuit de
                                           e
capacit´ < ∞ est absorbant. (toutefois, p
       e                                  2 ⊕ p ⊕ e = p ⊕ e, o` p2 = p ⊗ p, donc un circuit n’est
                                                              u
absorbant ”qu’une fois”).
   λ(x,y) = capacit´ minimale des chemins de x ` y (s’il n’y a pas de
                    e                               a
            circuit absorbant).

                                           c IFSIC 2004
132                                                               Chemins de valeur optimale


8) D´nombrement des chemins
    e

      S = N; ⊕ = +; ⊗ = ×; α = 0; e = 1
       v(x,y) = si (x,y) ∈ Γ alors 1
                             sinon 0
   Toute valeur n ∈ N v´rifie n + 1 = 1 donc tout circuit est absorbant.
                       e

      λ(x,y) = nombre de chemins distincts de x ` y (s’il n’y a pas de circuit).
                                                a
   ´
9) Enum´ration des chemins ´l´mentaires (exemple difficile) :
           e                      ee
           +
   Soit X l’ensemble de toutes les suites sans r´p´tition d’´l´ments de X, ayant au moins un
                                                   e e       ee
´l´ment. Notons n = |X|. S est alors l’ensemble constitu´ des n(n − 1) ´l´ments sx,y , x ∈ X, y ∈
ee                                                       e             ee
                                                   +
X, x = y, o` sx,y est un ensemble d’´l´ments de X de la forme [x ∗ y], des n ´l´ments sx = {[x]}
            u                       ee                                       ee
(x ∈ X) et de l’´l´ment e = x∈X sx (identifi´ ` X). On a donc |S| = n2 + 1. Notons qu’on peut
                ee                            ea
avoir sx,y = ∅ pour certains couples (x,y), x = y. En outre,
      ⊕ = ∪; ⊗ = multiplication latine ; α = ∅
   La multiplication latine est d´finie comme suit :
                                 e
   – ∀s ∈ S : s ⊗ α = α ⊗ s = α (α = ∅ est donc l’´l´ment absorbant de S).
                                                      ee
   – ∀x, ∀y, ∀z, ∀t, z = t : sx,z ⊗ st,y = α.
   – ∀x, ∀z : sx,z ⊗ sz,x = α
   – ∀x, ∀y ,∀z , y = z : sx,y ⊗ sz = α
   – ∀x, ∀y ,∀z , x = z : sz ⊗ sx,y = α
   – ∀x, ∀y : sx ⊗ sx,y = sx,y
   – ∀x, ∀y : sx,y ⊗ sy = sx,y
                                                  +
  – ∀x, ∀y, ∀z , x = y : sx,z ⊗ sz,y = {u ∈ X |u = [x ∗ z ∗ y],[x ∗ z] ∈ sx,z ,[z ∗ y] ∈ sz,y
Exemple :
  si s1,4 = {[1,4],[1,2,4]} et s4,5 = {[4,5],[4,2,5],[4,3,5]} on a :
  s1,4 ⊗ s4,5 = {[1,4,5],[1,4,2,5],[1,4,3,5],[1,2,4,5],[1,2,4,3,5]}.

Il est facile de v´rifier que l’´l´ment neutre de ⊗ est e.
                  e            ee

La valuation du graphe est alors :
       v(x,y) = si(x,y) ∈ Γ alors {[xy]}
                            sinon ∅
   Par ailleurs, d’apr`s la d´finition de ⊗, la valeur de tout circuit est ´gale ` α, donc v´rifie
                       e     e                                            e     a          e
α ∪ e = e. Il n’y a donc pas de circuit absorbant.
   Enfin,
      λ(x,y) = ensemble des chemins ´l´mentaires de x ` y
                                        ee               a

Le lecteur int´ress´ trouvera, dans ([GM79], chapitre 3) d’autres exemples et d’int´ressants
              e    e                                                               e
d´veloppements sur les alg`bres de chemin.
 e                        e

                                             c IFSIC 2004
8.8. Alg`bres de chemins : transformations d’algorithmes
        e                                                                                      133


    Pour conclure, on peut se poser la question de savoir quels sont les algorithmes de chemine-
ment optimal qui peuvent ˆtre transform´s, sur la base de la structure de dio¨ appropri´e, pour
                            e             e                                     ıde         e
r´soudre les probl`mes correspondants. Sans entrer dans les d´tails, il s’av`re que les algorithmes
 e                e                                             e            e
n’utilisant pas une proc´dure de s´lection d’un ´l´ment r´alisant un “optimum” peuvent ˆtre
                          e         e               ee        e                                  e
directement adapt´s, en utilisant les op´rations ⊗ (` la place de +) et ⊕ (` la place de min),
                   e                      e            a                         a
ainsi que α (` la place de +∞) et e (` la place de 0). Ainsi, on peut adapter directement Ford,
              a                        a
Bellmann-Kalaba, Ford Ordinal, Puissances, Warshall. Mais ce n’est pas le cas de Dijkstra : en
effet, cet algorithme n´cessite que la loi ⊕ v´rifie : ∀a, ∀b : a ⊕ b ∈ {a,b} (s´lection du “meilleur”
                       e                     e                                e
´l´ment en attente). C’est bien le cas lorsque ⊕ ≡ ou, ou ⊕ ≡ min, ou ⊕ ≡ max (exemples 1 `
ee                                                                                                 a
7) mais ce n’est plus le cas pour ⊕ ≡ + ou ⊕ ≡ ∪ (exemples 8 et 9).
    De plus, lorsque la loi ⊕ a cette propi´t´, la condition d’application de l’algorithme de
                                               ee
dijkstra s’exprime par :
      ∀(x,y) ∈ Γ : v(x,y) ⊕ e = e
    Elle est donc toujours v´rifi´e pour les exemples 1,4,5 ;
                            e e
v´rifi´e si v(x,y) ≥ 0 pour l’exemple 2
 e e
           v(x,y) ≤ 0 pour l’exemple 3
           v(x,y) = 1 pour l’exemple 6
           v(x,y) = +∞ pour l’exemple 7 (donc irr´alistes pour ces
                                                     e
           deux exemples)

    Pour illustrer la puissance de ces transformations d’algorithme, nous donnons un exemple
d’application de l’algorithme de Bellmann-Kalaba pour l’´num´ration des chemins ´l´mentaires
                                                         e     e                   ee
issus du sommet 1 vers chacun des autres sommets (exemple 9). On doit donc calculer : ∀i, i =
1 : λi =ensemble des chemins ´l´mentaires de 1 ` i. La relation de r´currence est ici :
                                ee               a                   e
                λ1 = {[1]}
                         n
      ∀k, ∀i : λk =
                i             λk−1 ⊗ v(j,i)
                               j
                        j=1


                                                 2              4




                                    1


                                                                5
                                                3


   La matrice du graphe est :
        1        2       3             4         5
    1 {[1]} {[1,2]} {[1,3]}            α         α
    2   α        α    {[2,3]}       {[2,4]}      α
    3   α        α       α          {[3,4]}   {[3,5]}
    4   α        α    {[4,3]}          α      {[4,5]}
    5   α        α       α             α         α

                                              c IFSIC 2004
134                                                              Chemins de valeur optimale




  L’ex´cution de l’algorithme donne alors :
      e


        1        2           3            4             5
      {[1]}   {[1,2]}    {[1,3]}          α             α
      {[1]}   {[1,2]}    {[1,3]}      {[1,2,4]      {[1,3,5]}
                         [1,2,3]}     [1,3,4]}
      {[1]}   {[1,2]}    {[1,3]}      {[1,2,4]       {[1,3,5]
                          [1,2,3]      [1,3,4]       [1,2,3,5]
                        [1,2,4,3]}   [1,2,3,4]}      [1,2,4,5]
                                                    [1,3,4,5]}
      {[1]}   {[1,2]}    {[1,3]}      {[1,2,4]       {[1,3,5]
                          [1,2,3]      [1,3,4]       [1,2,3,5]
                        [1,2,4,3]}   [1,2,3,4]}      [1,2,4,5]
                                                     [1,3,4,5]
                                                   [1,2,4,3,5]
                                                  [1,2,3,4,5]}
      {[1]}   {[1,2]}    {[1,3]}      {[1,2,4]       {[1,3,5]
                          [1,2,3]      [1,3,4]       [1,2,3,5]
                        [1,2,4,3]}   [1,2,3,4]}      [1,2,4,5]
                                                     [1,3,4,5]
                                                   [1,2,4,3,5]
                                                  [1,2,3,4,5]}
  stabilit´ atteinte.
          e




                                                  c IFSIC 2004
Chapitre 9

   Probl`mes d’ordonnancement
        e

9.1       Nature des probl`mes
                          e
    Un projet peut ˆtre d´compos´ en n tˆches A1 ,A2 , . . . ,An telles que :
                      e     e        e         a
    – Chaque tˆche est indivisible
                 a
    – Chaque tˆche est munie d’une dur´e connue : di = dur´e de Ai
                 a                           e                e
    – Chaque tˆche est soumise ` un ensemble de contraintes temporelles qui peuvent toujours
                 a                 a
       s’exprimer en fonction de contraintes sur la date de d´but d’ex´cution de la tˆche
                                                             e         e             a
Ces contraintes sont de deux types :
a) Contraintes ”d´terministes” (ou ”potentiel”) :
                      e
    La date de d´but ti de la tˆche Ai intervient au plus tˆt (resp. au plus tard) ` une date
                   e               a                           o                      a
donn´e a priori ou li´e ` la r´alisation d’autres tˆches du projet.
      e                 e a     e                    a
Exemples
. la tˆche Ai ne peut pas commencer avant la date T :
      a
             ti ≥ T
. la tˆche Aj ne peut pas commencer avant l’ach`vement de la tˆche Ai :
      a                                               e            a
             tj ≥ ti + di soit encore : tj − ti ≥ di
L’ensemble des contraintes ”potentiel” d´finit un ensemble conjonctif de contraintes, qui s’ex-
                                              e
prime sous la forme d’un syst`me simultan´ d’in´quations du premier degr´ de la forme
                                 e               e   e                        e
      tj − ti ≥ ai,j (i,j ∈ {0, . . . ,n + 1})
Par convention, t0 = 0 : date de d´but du projet
                                   e
                tn+1 : date de fin d’ex´cution du projet
                                         e
                         (lorsque toutes les tˆches sont termin´es)
                                              a                e
                         = dur´e totale d’ex´cution du projet
                               e              e
b) Contraintes ”non d´terministes” (ou ”disjonctives”) :
                        e
    Elles expriment des incompatibilit´s entre sous-ensembles de l’ensemble des tˆches, mais
                                        e                                            a
laissent un degr´ de choix quant ` leur s´quencement : chaque contrainte est exprim´e par un
                 e               a         e                                           e
syst`me d’in´quations, d’inconnues (ti )0≤i≤n+1 li´es par des ou (une des in´quations du syst`me
     e       e                                    e                         e                e
doit ˆtre v´rifi´e)
      e    e e

                                                 c IFSIC 2004
136                                                              Probl`mes d’ordonnancement
                                                                      e


Exemples
. la tˆche Ai et la tˆche Aj doivent ˆtre totalement disjointes :
      a              a                e
            ti ≥ tj + dj ou tj ≥ ti + di
. une des 4 tˆches Ai ,Aj ,Ak ,A ne peut ˆtre effectu´e qu’apr`s la date T :
              a                          e          e         e
            ti ≥ T ou tj ≥ T ou tk ≥ T ou t ≥ T


   D´finition 9.1 On appelle ordonnancement compatible (sous-entendu
      e
   ”avec les contraintes”) un vecteur de Nn+2 :
   T = (t0 ,t1 , . . . ,tn ,tn+1 ), o` :
                                     u
   ti = date de d´but d’ex´cution de la tˆche Ai (i = 1, . . . ,n)
                       e           e       a
   t0 et tn+1 respectivement dates de d´but et de fin d’ex´cution du projet,
                                         e                  e
   respectant les contraintes de chacune des tˆches.
                                              a


   Probl`me 9.1 Parmi tous les ordonnancements compatibles avec un
        e
   ensemble de tˆches et de contraintes donn´es, en trouver un de dur´e
                a                              e                     e
   minimale, c’est ` dire tel que tn+1 soit minimum.
                   a


   Probl`me 9.2 Parmi tous les ordonnancements compatibles avec un
         e
   ensemble de tˆches et de contraintes donn´es, en trouver un de dur´e
                 a                            e                      e
   donn´e, c’est ` dire tel que tn+1 = T donn´e.
       e         a                           e

Dans la suite de ce chapitre, on ne s’int´resse qu’aux contraintes ”d´terministes” ; les autres types
                                         e                           e
de contraintes n´cessitent l’utilisation de techniques combinatoires, par exemple de recherche
                 e
                                 e            e            ´
arborescente telles que les Proc´dures de S´paration et Evaluation Progressives (P.S.E.P.).


9.2       Mod´lisation ` l’aide de graphe
             e         a
9.2.1      graphe potentiel-tˆche
                             a
   On associe au probl`me un graphe valu´, d´fini de la mani`re suivante :
                       e                     e e             e
   –      X = {x0 ,x1 , . . . ,xn ,xn+1 } o` xi
                                           u      ≡ Ai (1 ≤ i ≤ n)
                                              x0 ≡        d´but
                                                           e
                                             xn+1 ≡        fin
   –      Γ = ensemble des contraintes, au sens suivant :

    si tj − ti ≥ ai,j est une contrainte, alors (xi ,xj ) ∈ Γ avec la valeur ai,j
Exemples de contraintes et d’arc correspondant

£ Contrainte ”au plus tˆt” sur Aj :
                       o
                      tj − ti ≥ ai,j (ai,j ≥ 0)

                             ai,j
                        xi −→ xj

                                              c IFSIC 2004
9.2.    Mod´lisation ` l’aide de graphe
           e         a                                                                     137



£ Contrainte ”au plus tard” sur Ai :
                      ti − tj ≤ ai,j (ai,j ≥ 0), c’est-`-dire : tj − ti ≥ −ai,j
                                                       a

                              −ai,j
                            xi −→ xj

 £ Contraintes implicites relatives au d´but :
                                         e
∀i(1 ≤ i ≤ n + 1) : ti ≥ 0 ⇐⇒ (x0 ,xi ) ∈ Γ, de valeur 0

£ Contraintes implicites relatives ` la fin :
                                   a
∀i(1 ≤ i ≤ n) : tn+1 ≥ ti + di ⇐⇒ (xi ,xn+1 ) ∈ Γ, de valeur di

    Parmi toutes ces contraintes, certaines peuvent ˆtre redondantes, c’est-`-dire cons´quences
                                                    e                       a          e
d’autres contraintes, de mani`re plus ou moins imm´diate; ceci sera plus particuli`rement vu au
                             e                     e                              e
§9.6 de ce chapitre

9.2.2       Exemple
   Soit un projet compos´ de 6 tˆches :
                            e      a
                               tˆche A1 A2 A3 A4 A5 A6
                                a
                               dur´e 10 12
                                  e               6     20 12   7
avec les contraintes :
   A1 :             peut commencer d`s le d´but des travaux.
                                       e      e
   A2 :             commence au plus tˆt 7 u.t. apr`s le d´but de A1 .
                                         o           e     e
   A3 :             enchaˆ ınement sans d´lai avec A2 .
                                          e
   A4 :             commence au plus tˆt 3 u.t. apr`s l’ach`vement de A5 ; la seconde
                                         o          e      e
                    moiti´ de A4 commence au plus tˆt 13 u.t. apr`s l’ach`vement de
                          e                             o         e      e
                    A3 .
   A5 :             commence au plus tˆt lorsque les 3/4 de A2 sont achev´s, au plus
                                         o                                e
                    tard 6 u.t. apr`s l’ach`vement de A2 et au plus tˆt 3 u.t. apr`s
                                    e       e                          o           e
                    l’ach`vement de A6 .
                         e
   A6 :             commence au plus tˆt 20 u.t. apr`s le d´but des travaux.
                                         o              e    e
   Liste des in´quations traduisant ces contraintes :
                e
      t1 ≥ 0;

       t2 − t1 ≥ 7;

       t3 ≥ t2 + 12 et t3 ≤ t2 + 12 ⇐⇒ t3 − t2 ≥ 12 et t2 − t3 ≥ −12;
                            1
       t4 − t5 ≥ 15; t4 +     × 20 ≥ t3 + 19 ⇐⇒ t4 − t3 ≥ 9;
                            2
                   3
       t5 ≥ t2 +     × 12 ⇐⇒ t5 − t2 ≥ 9;
                   4
       t5 ≤ t2 + 18 ⇐⇒ t2 − t5 ≥ −18; t5 − t6 ≥ 10;

                                               c IFSIC 2004
138                                                                        Probl`mes d’ordonnancement
                                                                                e


      t6 ≥ 20
et les contraintes ”implicites” :
      ti ≥ 0 (i = 2,3,4,5);
      t7 − ti ≥ di (i = 1, . . . ,6)
    Dans cet exemple, les contraintes (x0 ,xi ),i = 2,3,4,5 ainsi que les contraintes (xi ,x7 ),i =
2,3,5,6 sont ´videmment superflues (cf §9.6 ci-apr`s).
             e                                     e

                                     10                             12
                                                     2                         3
                                       7                                 -12
                         0
                0                1               9       -18                   9          7

                    20                                                             20
                                                     5                         4
                                      10                       15
                                 6


                                     Fig. 9.1 – graphe potentiel-tˆche
                                                                  a



9.3       Ordonnancements particuliers; chemin critique; marges.


   Th´or`me 9.2 Soit Λ = (λ0 ,λ1 , . . . ,λn ,λn+1 ) l’ordonnancement d´fini
      e e                                                              e
   par :
          λ0 = 0
          λi = valeur maximale des chemins de x0 ` xi    a
                    (i = 1, . . . ,n + 1).
   C’est un ordonnancement compatible, v´rifiant :
                                             e
         λi ≤ ti (i = 0, . . . ,n + 1)
   quelque soit l’ordonnancement compatible
         T = (t0 = 0,t1 , . . . ,tn ,tn+1 ).
   En particulier, il est de dur´e minimale.
                                     e

D´monstration D’apr`s le th´or`me 8.7, appliqu´ au probl`me des valeurs additives maxi-
 e                         e           e e                  e          e
males, les attributs λi (i = 0, . . . ,n + 1) constituent la solution minimale du syst`me d’´quations:
                                                                                      e     e
                0 si i = 0
      xi =
                maxxj ∈Γ−1 (xi ) (xj + v(j,i))si i = 2, . . . ,n

                                                     c IFSIC 2004
9.3.   Ordonnancements particuliers; chemin critique; marges.                                       139


    Il en r´sulte, d’une part : λj − λi ≥ ai,j sur tout arc (xi ,xj ), donc l’ordonnancement est
            e
compatible.
    D’autre part, tout ordonnancement compatible T = (t0 , . . . , tn+1 ) est aussi solution de ce
syst`me, et donc :
    e
       ∀i (1 ≤ i ≤ n), λi ≤ ti
    En particulier, λn+1 ≤ tn+1 .                                                               P

   L’ordonnancement Λ s’appelle ordonnancement ”au plus tˆt” car λi est la date de d´but
                                                               o                    e
au plus tˆt compatible avec les contraintes pour la tˆche Ai .
         o                                           a


   D´finition 9.3 Un chemin de valeur maximale entre x0 (d´but) et xn+1
     e                                                   e
   (fin) s’appelle chemin critique, et les sommets qui y appartiennent
   tˆches critiques.
    a

En effet, si une tˆche situ´e sur ce chemin est retard´e alors la date finale du projet est retard´e.
                 a        e                          e                                          e
   Soit maintenant une date finale F fix´e ` priori. On cherche les dates au plus tard, λi , d’un
                                          e a
ordonnancement compatible permettant l’ach`vement des travaux ` la date fix´e.
                                               e                      a          e


   Th´or`me 9.4 Si F < λn+1 , il n’existe pas d’ordonnancement compa-
       e e
   tible se terminant ` la date F .
                      a
   Si F ≥ λn+1 , alors l’ordonnancement Λ = (λ0 , . . . ,λn+1 ) d´fini par
                                                                 e

          λ0 = 0
          λi = F − αi (i = 1, . . . ,n + 1).

   o` αi = valeur maximale des chemins de xi ` xn+1 ,
    u                                        a
   r´pond ` la question.
    e     a

D´monstration Si F < λn+1 , le r´sultat est ´vident puisque λn+1 est la date au plus tˆt
  e                                     e          e                                             o
d’ach`vement des travaux.
       e
     Supposons donc F ≥ λn+1 . Les probl`mes de cheminement dans G aboutissant au sommet
                                          e
xn+1 se ram`nent aux probl`mes de cheminement issus du sommet xn+1 dans le graphe transpos´
             e              e                                                                     e
G t . Par cons´quent, d’apr`s le th´or`me 8.7, les attributs α (i = 0, . . . ,n + 1) constituent la
               e           e        e e                       i
solution minimale du syst`me d’´quations:
                          e       e

              0 si i = n + 1
       xi =
              maxxj ∈Γ(xi ) (xj + v(i,j))si i = 2, . . . ,n

    Il en r´sulte, d’une part : αi − αj ≥ ai,j sur tout arc (xi ,xj ), c’est-`-dire, d’apr`s la d´finition
           e                                                                 a            e      e
des λi : λj − λi ≥ ai,j sur tout arc (xi ,xj ), donc l’ordonnancement est compatible.
    D’autre part, pour tout ordonnancement compatible T = (t0 . . . tn+1 ), avec tn+1 = F , les
valeurs βi = F − ti sont aussi solution de ce syst`me, et donc : ∀i (1 ≤ i ≤ n), αi ≤ βi d’o` :
                                                      e                                            u
       ∀i (1 ≤ i ≤ n), λi ≥ ti
                                                                                                        P

                                                 c IFSIC 2004
140                                                                       Probl`mes d’ordonnancement
                                                                               e



   D´finition 9.5 Soit Λ l’ordonnancement au plus tˆt et Λ l’ordonnance-
     e                                                 o
   ment au plus tard relatif ` une date finale F ≥ λn+1 . On appelle marge
                             a
   totale de la tˆche Ai (relativement ` F ) la diff´rence mi = λi −λi . C’est
                 a                     a           e
   le retard maximum que peut prendre l’ach`vement de Ai sans compro-
                                                e
   mettre la date de r´alisation du projet pr´vue λn+1 = F .
                      e                       e

Remarque. Si la date d’ach`vement de Ai est retard´e d’une dur´e ≤ mi , ce retard peut
                               e                         e            e
modifier l’ordonnancement des tˆches ult´rieures sur tout chemin de xi ` xn+1 . Les marges
                                  a        e                                a
totales des tˆches ne sont donc pas ind´pendantes. Il vaut donc mieux parler de marge par
             a                           e
chemin traduisant le retard global tel que la somme des retards des tˆches situ´es sur ce
                                                                           a          e
chemin reste inf´rieure ` ce retard global sous peine de retarder la date λn+1 . Pour un chemin
                e       a
u, m(u) = maxxi ∈u (mi )

   D´finition 9.6 Soit T = (t0 , . . . ,tn+1 ) un ordonnancement compatible
     e
   donn´. La marge libre de Ai , relativement ` T , est d´finie par :
       e                                           a        e

        µi =     min (tj − ti − ai,j )
               xj ∈Γ(xi )

C’est le retard maximum que peut prendre l’ach`vement de Ai sans compromettre la date de
                                              e
d´but pr´vue pour les autres tˆches.
 e       e                    a


9.4       Exemple
   Nous traitons compl`tement l’exemple donn´ au §9.2 (figure 9.1)
                      e                     e

    tˆche
     a           A1     A2   A3   A4     A5       A6       A7
      Λ          0      12   24   45     30       20       65
      αi         51     44   32   20     35       45        0
 Λ | F = 65      14     21   33   45     30       20       65
 mi | F = 65     14      9    9   0      0         0        /
    µi (Λ)       5       0    0   0      0         0        /
                                       x0   x1   x2   x3   x4 x7      =   14
Marges totales par che-                x0   x1   x2   x5   x4 x7      =   14
min :                                  x0   x6   x5   x2   x3 x4 x7   =   9
                                       x0   x6   x5   x4   x7         =   0 (chemin critique)


9.5       Choix des algorithmes de r´solution
                                    e
   La recherche des ordonnancements ”au plus tˆt” ou ”au plus tard” relatif ` une date F
                                                 o                           a
n´cessite le calcul des valeurs maximales des chemins issus du sommet x0 ou aboutissant au
 e
sommet xn+1 . Au chapitre pr´c´dent, nous avons d´crit quelques algorithmes r´solvant ces
                                e e                 e                          e

                                                      c IFSIC 2004
9.5.   Choix des algorithmes de r´solution
                                 e                                                            141


probl`mes. Nous allons donner quelques indications sur le choix ` effectuer, compte-tenu de
      e                                                             a
la nature des contraintes.
1er cas. Il n’y a que des contraintes ”au plus tˆt”. Dans ce cas, le graphe obtenu ne doit pas
                                                  o
comporter de circuit, sans quoi il y aurait des contraintes incompatibles : il n’y aurait alors pas
d’ordonnancement compatible, puisque tout circuit est un circuit absorbant (les arcs ´tant tous
                                                                                        e
de valeur positive ou nulle).
    Comme par ailleurs le sommet x0 est racine, et le sommet xn+1 anti-racine (racine du graphe
transpos´), l’algorithme Ordinal-racine est le mieux adapt´ :
         e                                                     e
    – pour l’ordonnancement au plus tˆt : avec x0 comme sommet de d´part, il suffit de remplacer
                                       o                              e
      min par max dans le calcul d’une marque.
    – pour l’ordonnancement au plus tard : avec xn+1 comme sommet de d´part, il suffit de
                                                                                 e
      remplacer min par max dans le calcul d’une marque et de permuter les op´rations lst pred
                                                                                   e
      et lst succ (puisque l’on cherche les chemins de valeur maximale issus de xn+1 dans le
      graphe transpos´).e
Remarque : Si x.α est la valeur maximale des chemins de x ` xn+1 , ces valeurs sont ca-
                                                                  a
ract´ris´es, d’apr`s le th´or`me 9.4, par :
    e e           e       e e

       ∀x ∈ X : x.α = max (y.α + v(x,y))
                      y∈Γ(x)

    La date au plus tard de x, relative ` la date finale T , est donn´e par x.λ = T −x.α (th´or`me
                                        a                           e                      e e
9.4).
    Par cons´quent, ces dates sont caract´ris´es par les relations :
            e                               e e

       ∀x ∈ X  {xn+1 } : x.λ = min y.λ − v(x,y) , xn+1 .λ = T
                                y∈Γ[x]

On peut donc obtenir directement ces dates en adaptant l’algorithme Ordinal-racine comme
suit :
 sommet de d´part : xn+1 ; initialiser xn+1 .λ ` T ;
                 e                              a
 permuter les op´rations lst pred et lst succ ;
                   e
 marquer un nouveau sommet x par : x.λ ←− min(y.λ − v(x,y),G.lst succ(x))
2`me cas. Les contraintes sont quelconques. Le graphe poss`de alors des circuits, et les arcs ont
 e                                                            e
des valeurs de signe quelconque. S’il n’y a pas d’incompatibilit´ dans les contraintes, il ne doit
                                                                  e
pas y avoir de circuit absorbant (valeur > 0). On peut donc envisager l’algorithme d’exploration
en profondeur de Ford (algorithme 8.3.2) ou bien celui de Bellmann-Kalaba (8.4.3). Les
adaptations ` apporter sont les mˆmes que dans le cas pr´c´dent : remplacer min par max.
               a                   e                        e e
    Il existe cependant une technique sp´cifique, qui en g´n´ral s’av`re plus efficace (heuristique).
                                         e                e e        e
Ceci est bas´ sur la remarque suivante: si on enl`ve du graphe tous les arcs de valeur ≤ 0, le
              e                                     e
graphe partiel obtenu doit ˆtre sans circuit (autrement, il y aurait des contraintes incompatibles:
                            e
voir cas pr´c´dent). On peut toutefois conserver les arcs issus du sommet x0 ainsi que ceux
             e e
aboutissant au sommet xn+1 , car ces arcs ne peuvent pas appartenir ` des circuits (x0 est point
                                                                        a
d’entr´e, et xn+1 est point de sortie). Cette remarque incite ` proc´der en deux phases.
       e                                                        a     e
Premi`re phase
         e             – Ignorer tous les arcs non issus de x0 ou aboutissant ` xn+1 , qui sont de
                                                                                a
            valeur ≤ 0.

                                            c IFSIC 2004
142                                                                   Probl`mes d’ordonnancement
                                                                           e


       – Calculer les valeurs λi provisoires, en utilisant l’algorithme Ordinal-racine (si cet
         algorithme met en ´vidence des circuits, alors il y a des contraintes incompatibles).
                             e
Deuxi`me phase : ajustements R´introduire un par un chacun des arcs que l’on a ignor´s
     e                              e                                                        e
    lors de la premi`re phase. Soit (xi ,xj ,aij ) un tel arc. On teste alors la validit´ de la
                     e                                                                  e
    contrainte correspondant ` cet arc:
                               a
         – si λj < λi + aij alors λj ←λi + aij .
         – Pour tout sommet xj dont l’attribut a ainsi ´t´ augment´, il faut recommencer le
                                                           ee         e
           test sur tous les arcs issus de xj . Ce proc´d´ correspond en fait ` une exploration
                                                       e e                    a
           en profondeur de la descendance de xj , mais avec arrˆt de la “descente” ` partir de
                                                                  e                 a
           sommets non modifi´s. e
L’int´rˆt de cette technique vient de ce que, en g´n´ral, la seconde phase ne provoque que peu
      ee                                            e e
de modifications, car les mises ` jour de la descendance des sommets modifi´s s’´teignent assez
                                a                                            e e
vite.
    Des illustrations de cette m´thode seront vues en TD.
                                e
    Pour le calcul d’un ordonnancement au plus tard, tout ce qui pr´c`de reste valable, en
                                                                         e e
travaillant dans le graphe transpos´ (c’est-`-dire en consid´rant xn+1 comme sommet de d´part,
                                   e        a               e                            e
et en permutant les acc`s “successeurs” et pr´d´cesseurs”).
                         e                     e e


9.6       ´
          Elimination de contraintes redondantes


   D´finition 9.7 Une contrainte est dite ”redondante” si elle est im-
     e
   pliqu´e par un ensemble de contraintes dont elle ne fait pas partie.
        e

Cette situation se produit dans le cas suivant : la contrainte tj − ti ≥ ai,j est redondante si et
seulement si il existe, dans G, un chemin (diff´rent de l’arc (i,j)) de xi ` xj , et de valeur v ≥ ai,j .
                                              e                           a

                                       i           ...        i
                                           1                      k

                                  i                                     j
                                               a
                                                   i,j


    En effet, le long d’un tel chemin [i,i1 , . . . ,ik ,j] on aura :
     
      ti1 − ti ≥ ai,i1
     
                   .
                   .         =⇒ tj − ti ≥ ai,i1 + . . . + aik ,i ≥ ai,j
                  .
     
         tj − tik ≥ aik ,i
    Nous allons ci-dessous examiner dans quels cas certaines contraintes peuvent ˆtre per¸ues
                                                                                        e        c
comme redondantes au seul vu des donn´es du probl`me, c’est-`-dire sans le secours d’un algo-
                                           e                e        a
rithme de cheminement (qui pourrait s’av´rer plus coˆteux que le gain obtenu par la suppression
                                            e               u
´ventuelle de contraintes). Il s’agit essentiellement des contraintes implicites, c’est ` dire :
e                                                                                       a

                                               c IFSIC 2004
9.6.    ´
        Elimination de contraintes redondantes                                                143

       ∀i   ti ≥ 0           (li´es au d´but du projet)
                                e        e
       ∀i   tn+1 − ti ≥ di   (li´es ` la fin du projet)
                                e a

   – contraintes de d´but :
                          e
     S’il existe un arc (xj ,xi ) de valeur aj,i ≥ 0 et j = 0, alors ti ≥ 0 est redondante.
     En effet, on a : ti ≥ tj + aj,i .
   – contraintes de fin :
     S’il existe un arc (xi ,xj ) de valeur ai,j ≥ di −dj et j = n+1 alors tn+1 −ti ≥ di
     est redondante. En effet, on a :

              tj ≥ ti + ai,j et tn+1 ≥ tj + dj ce qui implique :

              tn+1 ≥ ti + ai,j + dj ≥ ti + di




                                                c IFSIC 2004
144                  Probl`mes d’ordonnancement
                          e




      c IFSIC 2004
Chapitre 10

Arbres ; arbre partiel de poids
optimum

10.1     D´finition et propri´t´s caract´ristiques
          e                 e e        e
   Soit G = (X,U ) un graphe non orient´, c’est ` dire pour lequel U est un ensemble de couples
                                        e       a
non ordonn´s, appel´s arˆtes. Dans un graphe non orient´, la terminologie suivante est utilis´e :
           e        e    e                               e                                   e
un chemin devient une chaˆ un circuit devient un cycle.
                           ıne
   Les successeurs et pr´d´cesseurs d’un sommet deviennent les voisins, et le nombre d’arˆtes
                        e e                                                                 e
adjacentes ` un sommet s’appelle le degr´ du sommet.
           a                              e
   Enfin, la relation binaire sur X :

     xRy ⇐⇒ il existe une chaˆ de x ` y ou x = y
                             ıne    a

est une relation d’´quivalence, dont les classes s’appellent composantes connexes de G. Un
                   e
graphe connexe est un graphe ne poss´dant qu’une seule composante connexe.
                                       e
    Cette terminologie ´tablie, nous posons les d´finitions suivantes :
                       e                          e


   D´finition 10.1 Un arbre est un graphe non orient´, connexe et sans
     e                                             e
   cycle.

Nous allons ´tablir un certain nombre de d´finitions ´quivalentes, grˆce aux deux lemmes sui-
            e                             e         e               a
vants :


   Lemme 10.2 Un graphe connexe de n sommets poss`de au moins n − 1
                                                 e
   arˆtes.
     e

D´monstration. Soit G = (X,U ), ayant n sommets, m arˆtes et p composantes connexes, et
  e                                                         e
posons ν(G) = m − n + p (nombre cyclomatique de G). D´finissons G en enrichissant G
                                                                e
par une nouvelle arˆte w = (x,y). Si x et y appartiennent ` la mˆme composante connexe, on a
                   e                                      a      e

                                           c IFSIC 2004
146                                                 Arbres ; arbre partiel de poids optimum


alors :
      n = n, m = m + 1, p = p d’o` ν(G ) = ν(G) + 1
                                 u
    Dans le cas contraire, les composantes connexes (distinctes) de x et y fusionnent en une
seule, d’o`
          u
      n = n, m = m + 1, p = p − 1 et ν(G ) = ν(G)
   L’adjonction de toute nouvelle arˆte ` un graphe ne peut donc pas diminuer la valeur de
                                     e a
ν(G). Or, pour un graphe ` n sommets et 0 arˆte, on a p = n d’o` ν(G) = 0. On en d´duit que
                          a                 e                  u                  e
pour tout graphe, ν(G) ≥ 0.
   Si G est connexe, on a p = 1 d’o` m ≥ n − 1. P
                                   u


   Lemme 10.3 Un graphe sans cycle de n sommets poss`de au plus n − 1
                                                    e
   arˆtes.
     e

D´monstration. Soient u1 ,u2 , . . . ,um les arˆtes de G, num´rot´es de mani`re quelconque.
 e                                             e             e e            e
Consid´rons la suite de graphes
      e
      G0 < G1 < . . . < Gm−1 < Gm avec
      G0 = (X,∅); Gj = (X,Uj ) et Uj = Uj−1 ∪ {uj } et donc Gm = G
Ces graphes sont sans cycle, donc on passe de Gj ` Gj+1 en ajoutant ` Gj l’arˆte uj+1 entre
                                                 a                  a        e
deux sommets non reli´s par une chaˆ dans Gj . Comme dans la d´monstration du lemme
                       e              ıne                          e
pr´c´dent, on en d´duit :
  e e             e
   ν(Gj ) = ν(Gj+1 ), d’o` 0 = ν(G0 ) = ν(Gm ).
                          u
   Par cons´quent, m = n − p et comme p ≥ 1, on a m ≤ n − 1. P
            e


   Th´or`me 10.4 Les propri´t´s suivantes, caract´risant un arbre, sont
       e e                        ee                   e
   ´quivalentes :
   e
   i) G = (X,U ) est connexe et sans cycle.
   ii) Tout couple de sommets est reli´ par une chaˆ unique de G.
                                        e             ıne
   iii) G est sans cycle et l’adjonction de toute nouvelle arˆte cr´e un cycle
                                                             e     e
         unique.
   iv) G est sans cycle et poss`de n − 1 arˆtes.
                                 e            e
   v) G est connexe et la suppression de toute arˆte de G cr´e deux compo-
                                                   e           e
         santes connexes, telles que toute autre arˆte de G est incluse dans
                                                    e
         l’une ou l’autre de ces composantes.
   vi) G est connexe et poss`de n − 1 arˆtes.
                               e            e

D´monstration
  e
i) =⇒ ii) Tout couple de sommets est reli´ par une chaˆ (connexit´), et si deux chaˆ
                                                e              ıne e               ınes
     distinctes les reliaient, leur r´union cr´erait un cycle.
                                     e        e

                                             c IFSIC 2004
10.2. Arbres partiels dans un graphe non orient´ valu´
                                               e     e                                             147


ii) =⇒ iii) Si G avait un cycle, deux sommets de ce cycle seraient reli´s par deux chaˆ
                                                                               e                ınes
      distinctes ; l’adjonction d’une nouvelle arˆte entre deux sommets x et y cr´e un cycle avec
                                                 e                                   e
      l’unique chaˆ les reliant.
                     ıne
iii) =⇒ iv) Puisque l’adjonction de toute nouvelle arˆte cr´e un cycle, G est connexe donc
                                                           e    e
      poss`de au moins n − 1 arˆtes (lemme 10.2). Comme il est sans cycle, il a au plus n-1
           e                       e
      arˆtes (lemme 10.3).
         e
iv) =⇒ v) Si G n’´tait pas connexe, on pourrait lui ajouter une nouvelle arˆte sans cr´er de
                        e                                                          e          e
      cycle, ce qui donnerait un graphe sans cycle ` n arˆtes, d’o` une contradiction (lemme
                                                       a     e         u
      10.3). La suppression d’une arˆte u laisse un graphe partiel ` n − 2 arˆtes, donc non
                                        e                                a            e
      connexe ; de plus, ce graphe partiel poss`de deux composantes connexes C et X  C sans
                                                 e
      quoi G ne serait pas connexe. Enfin, si ∃v ∈ U reliant C et X  C, G poss`de un cycle
                                                                                        e
      passant par les extr´mit´s de u et celles de v.
                            e   e
v) =⇒ vi) G poss`de au moins n − 1 arˆtes (lemme 10.2) ; G poss`de au plus n − 1 arˆtes sinon
                      e                   e                         e                     e
      il aurait un cycle (lemme 10.3) et la suppression d’une arˆte de ce cycle ne romprait pas
                                                                  e
      la connexit´.e
vi) =⇒ i) Si G avait un cycle, la suppression d’une arˆte de ce cycle laisserait un graphe connexe,
                                                       e
      donc ayant au moins n − 1 arˆtes, ce qui contredit l’hypoth`se sur le nombre d’arˆtes de
                                      e                              e                       e
      G. P
   Proposition 10.5 Tout arbre poss`de au moins deux sommets de degr´
                                   e                                e
   1 (appel´s sommets pendants).
           e

D´monstration Un arbre poss`de au moins 1 sommet pendant, sans quoi il aurait un cycle.
  e                              e
    D’autre part, si un arbre ayant n sommets et n − 1 arˆtes ( n ≥ 4) poss´dait un seul sommet
                                                         e                 e
pendant, le sous-graphe engendr´ par la suppression de ce sommet poss`derait au plus 1 sommet
                                 e                                     e
pendant, n−1 sommets et n−2 arˆtes. En r´p´tant le proc´d´, on aboutirait n´cessairement ` un
                                   e      e e             e e                e              a
sous-graphe ayant 3 sommets, 2 arˆtes donc 2 sommets pendants, ce qui est une contradiction.
                                     e
P


10.2      Arbres partiels dans un graphe non orient´ valu´
                                                   e     e
    Consid´rons le probl`me pratique suivant, qui se rencontre dans de nombreux domaines :
            e             e
soit un ensemble de sites {X1 ,X2 , . . . ,Xn }. On souhaite les relier entre eux, de telle sorte que le
r´seau ainsi constitu´ soit :
 e                    e
   1. connexe (tout site est reli´, ´ventuellement via d’autres sites, ` tout autre site)
                                 e e                                       a
   2. sans liaison redondante : une seule chaˆ suffit, de tout site ` tout site ; ceci conduit `
                                                  ıne                       a                          a
      chercher un r´seau sans cycle
                    e
   3. de coˆt minimum, sachant qu’` chaque liaison directe bilat´rale (Xi ,Xj ) est associ´e un
             u                           a                               e                        e
      coˆt wi,j .
        u
    D’apr`s les r´sultats du th´or`me 10.4, il s’agit donc de construire un arbre sur les n som-
          e       e             e e
mets donn´s, celui-ci ´tant de poids minimum parmi tous les arbres possibles (il y en a a
            e           e
          n−1
         n(n−1)
priori      2     . Le poids d’un arbre est alors ´gal, par d´finition, ` la somme des valeurs des
                                                  e          e         a


                                               c IFSIC 2004
148                                                       Arbres ; arbre partiel de poids optimum


n − 1 arˆtes qui en font partie. D’autre part, on peut toujours introduire comme contrainte
        e
suppl´mentaire l’interdiction a priori de certaines arˆtes : il suffit de les affecter d’une valeur
     e                                                e
+∞.
   On obtient finalement le probl`me de d´termination d’un arbre partiel de poids optimum :
                                  e        e


                     ´
   Probl`me 10.1 Etant donn´ un graphe G = (X,U,w) valu´ non orient´
         e                     e                             e     e
   et connexe, d´terminer un arbre partiel de G, de poids optimum.
                e

Remarque. Si G n’est pas connexe, il suffit de r´soudre le probl`me s´par´ment dans chaque
                                                e               e     e e
composante connexe.
   Dans ce qui suit, nous supposerons – pour fixer les id´es – que optimum signifie minimum.
                                                        e
Nous ´tablissons maintenant un th´or`me caract´ristique – et sa version ”duale” – d’un arbre
      e                           e e          e
partiel de poids minimum.


   Th´or`me 10.6 Une condition n´cessaire et suffisante pour que A =
      e e                             e
   (X,H) soit un arbre de poids minimum de G = (X,U,w) est la suivante :
   ∀u ∈ U  H : le long du cycle (unique) µ form´ par u avec des arˆtes de
                                                e                  e
   H, on a ∀v ∈ µ : w(v) ≤ w(u).

D´monstration.
  e
    £ La condition est n´cessaire : sinon, en substituant u ` v dans H, o` w(v) > w(u), on
                         e                                   a              u
obtiendrait un nouvel arbre de poids strictement inf´rieur.
                                                     e
    £ R´ciproquement, consid´rons un arbre A∗ = (X,H ∗ ), de poids minimal.
        e                    e
    Si A∗ = A, consid´rons une arˆte u∗ = (x,y) telle que u∗ ∈ H ∗ et u∗ ∈ H (figure 10.1).
                     e           e


                                                                            X/C *
                         C*              
                                         
                                             
                                             
                                                 
                                                 
                                                      
                                                      
                                                           
                                                           
                                                                
                                                                
                                                                    
                                                                    
                                                                        
                                                                        
                                                                            
                                                                            
                                                                                
                                                                                
                                                                                    
                                                                                    




                                x                    u*                                         y
                                    ¢
                                    £                                                       ¥
                                                                                            ¤




                                    ¦
                                    §                                                   ©
                                                                                        ¨




                                 x’                                                             y’

      H:      
             ¡
                  
                 ¡
                      
                     ¡




      H *:


                                        Fig. 10.1 – arbres H et H∗

   D’une part, x et y sont reli´s dans H par une chaˆ γ, ne contenant pas u∗ .
                               e                    ıne

                                                 c IFSIC 2004
10.3. Algorithme de KRUSKAL                                                                     149


    D’autre part, la suppression de u∗ dans H ∗ d´finit un graphe partiel ayant deux composantes
                                                     e
connexes C   ∗ et X  C ∗ , et u∗ est la seule arˆte de H ∗ reliant C ∗ ` X  C ∗ .
                                                 e                      a
    Il en r´sulte que γ relie x ∈ C ∗ ` y ∈ X  C ∗ sans passer par u∗ , donc contient au moins une
           e                            a
arˆte u = (x ,y ), avec x ∈ C ∗ ,y ∈ X  C ∗ ,u ∈ H,u ∈ H ∗ .
  e
    On en d´duit que :
             e
(1) w(u) ≤ w(u∗ ) d’apr`s l’hypoth`se sur A
                           e           e
(2) la chaˆ γ
           ıne   ∗ qui relie x et y dans H ∗ passe n´cessairement par u∗ (puisque u∗ est la seule
                                                       e
arˆte de H ∗ reliant C ∗ ` X C ∗ ) et donc, A∗ ´tant minimal : w(u∗ ) ≤ w(u) (condition n´cessaire).
  e                      a                       e                                        e
    (1) et (2) montrent que : ` chaque arˆte u
                                  a            e    ∗ ∈ H ∗ ,u∗ ∈ H on peut faire correspondre une

arˆte u ∈ H,u ∈ H ∗ , telle que w(u∗ ) = w(u); par cons´quent, H et H ∗ sont de mˆme poids. P
  e                                                        e                          e
    Nous ´tablissons maintenant une version ”duale” du th´or`me de caract´risation 10.6 :
           e                                                     e e                e


   Th´or`me 10.7 Une condition n´cessaire et suffisante pour que A =
      e e                            e
   (X,H) soit un arbre de poids minimum de G = (X,U,w) est la suivante :
   ∀u ∈ H : pour toute arˆte v = u reliant Cu et X  Cu (les deux
                            e
   composantes connexes cr´´es dans A par la suppression de u), on a :
                            ee
   w(u)  w(v).

D´monstration.
  e
    £ La condition est n´cessaire : en substituant v(∈ H) ` u dans H, o` w(u)  w(v), on
                           e                                 a               u
obtiendrait un nouvel arbre, de poids strictement inf´rieur.
                                                     e
    £ R´ciproquement, soit A = (X,H) un arbre satisfaisant les conditions du th´or`me. Pour
        e                                                                           e e
tout u ∈ H, consid´rons le cycle γu que u forme avec H. On a alors :
                     e
    ∀v ∈ γu , u relie Cu et X  Cu et donc : w(v)  w(u); par suite A satisfait les conditions du
th´or`me 10.6. P
  e e


10.3     Algorithme de KRUSKAL
10.3.1    Principe
    Du th´or`me pr´c´dent 10.6 d´coule imm´diatement l’algorithme de Kruskal. Le principe
           e e        e e              e         e
est le suivant : on organise un parcours des arˆtes dans l’ordre des valeurs croissantes. Initiale-
                                                   e
ment, le graphe partiel A est vide. On ajoute l’arˆte courante ` A si et seulement si elle ne cr´e
                                                       e           a                              e
pas de cycle dans A, et on s’arrˆte en fin de parcours, ou d`s qu’on a obtenu n − 1 arˆtes dans
                                    e                            e                         e
A.
    A l’issue de l’algorithme, on a bien un arbre partiel de poids minimum : en effet, on a
construit un graphe partiel sans cycle, ayant au moins n − 1 arˆtes (par hypoth`se, le graphe G
                                                                    e               e
est connexe), et d’autre part, toute arˆte u non retenue forme un cycle avec des arˆtes situ´es
                                           e                                             e      e
avant elle dans la liste ordonn´e des arˆtes, donc v´rifie la condition suffisante du th´or`me 10.6.
                                 e        e             e                               e e
    Pour faciliter le test : u ne cr´e pas de cycle, il suffit de g´rer les composantes connexes de A
                                    e                            e
au fur et ` mesure de sa construction. Une arˆte pourra ˆtre ajout´e si et seulement si ses deux
          a                                       e           e         e
extr´mit´s n’appartiennent pas ` la mˆme composante. Les composantes des deux extr´mit´s
     e e                             a      e                                                e    e

                                             c IFSIC 2004
150                                                Arbres ; arbre partiel de poids optimum


sont alors fusionn´es en une seule. Enfin, le parcours des arˆtes ordonn´es par valeurs croissantes
                  e                                         e          e
sera g´r´ par les acc`s :
      ee             e

      pp arete : --   pr´ : non hors arete
                         e
                   d´livre la premi`re arˆte du parcours ordonn´
                    e                e    e                      e
                   (arˆte de valeur minimum)
                      e
      pp arete suiv : -- pr´ : non hors arete
                               e
                           d´livre la prochaine arˆte du parcours ordonn´
                            e                     e                     e
      hors arete : vrai si toutes les arˆtes ont ´t´ visit´es
                                          e        ee     e
A noter que G.vide ⇒ G.hors arete.


10.3.2     Texte de l’algorithme
   Il est donn´ page 150
              e


                                 ALGORITHME DE KRUSKAL


 ENS[SOMMET] SOMMET::C ; --      x.C = composante connexe de x

ARBRE kruskal(GRAPHESYM G): c’est
  local AR^TE arcour;
          e
       ENT k; -- compteur du nombre d’arˆtes
                                        e
       SOMMET x, y;
 d´but
  e
    depuis
       pourtout x de G.lst som faire x.C ← {x} fpourtout ;
      Result ← creer ; k ← 0 ;
      arcour ← G.pp arete ; x ← arcour.ori ; y ← arcour.ext ;
    jusqua k ≥ n-1 ou x = nil
    faire
       si y ∈ x.C alors
             Result.ajoutarete(x,y) ;
             x.C ← x.C ∪ y.C ; y.C ← x.C ;
             k ← k + 1
          fsi ;
         arcour ← G.pp arete suiv ; x ← arcour.ori ; y ← arcour.ext
      fait ;
      si k  n-1 alors -- erreur : le graphe donne G n’est pas connexe
 fin




                                            c IFSIC 2004
10.3. Algorithme de KRUSKAL                                                                  151


10.3.3    Exemple
   Consid´rons le graphe non orient´, valu´, de la figure 10.2
         e                         e      e

                                                     2         8
                                  8
                                                 4       16
                                      5
                        1                                                  3
                                                                       7
                                      12
                                                                           14

                            9




                                  5                                4
                                               11


                                           Fig. 10.2 – Exemple

   La liste ordonn´e des arˆtes est donn´e dans le tableau de gauche :
                   e        e            e
                 comp. connexes : {1} {2} {3} {4} {5}
    2,5 4 *      arˆte (2,5) −→ c.c. {1} {2,5} {3} {4}
                   e
    1,3 5 *      arˆte (1,3) −→ c.c. {1,3} {2,5} {4}
                   e
    3,5 7 *      arˆte (3,5) −→ c.c. {1,2,3,5} {4}
                   e
    2,3 8
    1,2 8
    1,5 9
    4,5 11 * arˆte (4,5) −→ c.c. {1,2,3,4,5}
                   e
    1,4 12
    3,4 14
    2,4 16
poids : 4 + 5 + 7 + 11 = 27

10.3.4    Complexit´
                   e
    Lorsque le parcours est organis´, on effectue au plus n − 1 pas d’it´rations. L’algorithme est
                                     e                                  e
donc en O(n) + complexit´ maximale du tri des arˆtes. Ce dernier terme d´pend de la technique
                           e                         e                       e
utilis´e :
      e
    – tri pr´alable (les meilleurs algorithmes connus sont en O(m log m))
             e
    – recherche s´quentielle dans la liste des arˆtes, ` chaque pas d’it´ration (complexit´ totale
                  e                              e     a                e                 e
             n−1
       de k=1 O(m − k) – puisqu’` l’´tape k il reste m − k arˆtes)
                                     a e                         e
    – organisation ”en tas” de la liste des arˆtes et r´organisation ` chaque ´tape :
                                              e        e             a         e
           – O(m log m) pour l’organisation initiale

                                                c IFSIC 2004
152                                                 Arbres ; arbre partiel de poids optimum


         – O(log(m − k)) pour la r´organisation ` l’´tape k (nombre d’arˆtes restant = m − k)
                                  e             a e                     e
      d’o`, globalement : 0(m log m) + n−1 0(log m), le terme 0(m log m) ´tant pr´pond´rant
         u                             k=1                               e       e    e
      puisque m ≥ n − 1 (graphe connexe).


10.4     Algorithme de PRIM
10.4.1    Principe de l’algorithme
     C’est aussi un algorithme d’extension, mais au lieu d’engendrer des graphes partiels succes-
sifs, sans cycle, croissant jusqu’` la connexit´, on engendre des sous-arbres partiels croissants
                                   a           e
jusqu’` ce qu’on obtienne un arbre partiel. La propri´t´ maintenue invariante tout au long de
       a                                               ee
l’algorithme est la suivante :
    – 1 ≤ k ≤ n;
    – Xk = {x1 , . . . ,xk };
    – Hk = {u1 , . . . ,uk−1 };
    – Ak = (Xk ,Hk ) est un arbre couvrant Xk ;
    – Il existe un arbre A = (X,H), couvrant X, de poids minimum, dont la restriction ` Xk est
                                                                                           a
       Ak (la restriction de A ` Xk est le sous-graphe de A engendr´ par les sommets de Xk ).
                                a                                    e
La condition d’arrˆt est donc k = n. Si l’invariant est v´rifi´ ` l’arrˆt, An est bien un arbre
                         e                                   e ea        e
couvrant de poids minimum (´vident).
                                 e
Initialement k = 1,X1 = {x1 } (sommet quelconque), H1 = ∅. Les valeurs initiales satisfont
l’invariant (´vident).
              e
Il reste ` ´tablir la progression, de mani`re ` maintenir l’invariant. Le principe est tr`s simple :
         ae                                e a                                           e
soit uk = (xi ,xk+1 ) (avec xi ∈ Xk et xk+1 ∈ Xk ) une arˆte sortante de Xk , de poids minimum
                                                          e
parmi les arˆtes sortantes. On pose:
              e
     Hk+1 ←Hk {uk }
     Xk+1 ←Xk {xk+1 }


   Proposition 10.8 La progression maintient l’invariant

D´monstration Soit A = (X,H) un arbre couvrant X, de poids minimal, dont la restriction `
  e                                                                                              a
Xk est Ak (un tel arbre existe par hypoth`se). e
    premier cas : uk ∈ H. Dans ce cas, la restriction de A ` Xk+1 est Ak+1 , et la propri´t´ est
                                                                 a                            ee
d´montr´e.
 e        e
    deuxi`me cas (voir figure 10.3) : uk ∈ H. Dans ce cas, il existe une chaˆ γ de H, reliant
            e                                                                     ıne
xi ` xk+1 et, puisque A est de poids minimum, on a :
   a
    ∀v ∈ γ : c(v) ≤ c(uk ) .
    La chaˆ γ contient une arˆte vk = (xa ,xb ) telle que xa ∈ Xk ,xb ∈ Xk ; puisque vk ∈ γ, on a
            ıne                     e
c(vk ) ≤ c(uk ); et, d’apr`s le crit`re de s´lection de uk (arˆte sortante de Xk de poids minimum),
                          e         e       e                 e
on a aussi c(uk ) ≤ c(vk ); d’o` c(vk ) = c(uk ).
                                u
    Examinons le graphe A = (X,H  {vk } {uk }):
    – il a n sommets et n − 1 arˆtes,e

                                             c IFSIC 2004
10.4. Algorithme de PRIM                                                                          153



                               Xk           xi             uk    xk+1


                                 chaîne γ
                                                 xa
                                                      vk           chaîne γ

                                                            xb


                                 Fig. 10.3 – passage de Ak ` Ak+1
                                                           a


   – il est connexe; en effet, soit s et t deux sommets de X; ils sont reli´s dans A par une chaˆ
                                                                          e                        ıne
     κ. Si cette chaˆ ne contient pas vk , alors c’est une chaˆ de A , par construction; si
                          ıne                                      ıne
     au contraire κ contient vk , on remplace cette derni`re arˆte par la chaˆ [xa , . . . ,xi ] · uk ·
                                                           e     e             ıne
     [xk+1 , . . . ,xb ] qui est une chaˆ de A par construction (figure 10.3).
                                        ıne
A est donc un arbre couvrant X, de poids c(A ) = c(A) − c(vk ) + c(uk ) = c(A), et donc de poids
minimal; il contient uk et donc, sa restriction ` Xk+1 est bien Ak+1 . P
                                                 a


   Corollaire 10.9 A chaque ´tape, l’arbre partiel Ak = (Xk ,Hk ) est un
                                e
   arbre couvrant Xk , de poids minimum.

´
Evident puisque c’est un arbre couvrant Xk , par construction, et c’est la restriction d’un arbre
de poids minimum d’apr`s la proposition pr´c´dente. P
                        e                  e e

10.4.2    Mise en œuvre de l’algorithme
    La s´lection d’une nouvelle arˆte peut ˆtre effectu´e selon une m´thode tout ` fait analogue
         e                        e        e          e               e          a
a
` celle de l’algorithme de Dijkstra (chapitre 8.5). En effet, soit M l’ensemble des sommets d´j`
                                                                                            ea
”couverts” par le sous-arbre partiel. On d´signe par A l’ensemble des sommets ”limitrophes” de
                                          e
M , c’est ` dire :
           a

      z ∈ A ⇔ z ∈ M et ∃x ∈ M : (x,z) ∈ U

   Pour tout z ∈ A, on pose :
     δz = min w(x,z)
             x∈M
           (x,z)∈U
   atteint pour un sommet d´not´ pz , puis on s´lectionne y ∈ A tel que
                           e e                 e

      δy = min δz
           z∈A

    L’arˆte (py ,y) est alors ajout´e au sous-arbre partiel. A chaque pas d’it´ration, l’ensemble A
        e                          e                                          e
est donc modifi´ de la mani`re suivante : y est ˆt´ de A, et les voisins de y, n’appartenant pas
                 e             e                  oe

                                                  c IFSIC 2004
154                                                 Arbres ; arbre partiel de poids optimum


` M , sont soit introduits dans A – pour de tels sommets z, on a alors δz = w(y,z) – soit, s’ils
a
appartenaient d´j` ` A, leur marque est r´´valu´e par : δz = min(δz ,w(y,z)).
                 eaa                     ee     e
   De plus, comme pour l’algorithme de Dijkstra, l’ensemble des valeurs (δz )z∈A peut ˆtre e
g´r´ en ”tas”.
 ee

10.4.3    Texte de l’algorithme
   Le texte de l’algorithme, donn´ ci-apr`s page 155, montre qu’en fait on retrouve l’algorithme
                                    e       e
de Dijkstra avec les diff´rences suivantes :
                            e
   – les marques des sommets passent ` 0 lorsque ceux-ci rentrent dans M ;
                                          a
   – les acc`s lst succ et valarc sont remplac´s respectivement par lst voisins et valarˆte, adapt´s
             e                                e                                         e         e
     aux graphes non orient´s; e
   – on m´morise, en plus, le sous-arbre partiel de poids minimum, A.
           e

10.4.4    Exemple
   on reprend le graphe de la figure 10.2
    M        {(x.p,x,x.δ) | x ∈ A}              arˆte s´lectionn´e
                                                  e    e        e    nbar
    1        (1,3,5) (1,2,8) (1,5,9) (1,4,12)   (1,3) poids 5        1
    1,3      (3,5,7) (1,2,8) (1,4,12)           (3,5) poids 7        2
    1,3,5    (5,2,4) (5,4,11)                   (5,2) poids 4        3
    1,3,5,2 (5,4,11)                            (5,4) poids 11       4




                                             c IFSIC 2004
10.4. Algorithme de PRIM                                                                155


                                ALGORITHME DE PRIM


REEL SOMMET::δ : ; SOMMET SOMMET::p ;
ENUM[dehors,atteint,recouvert] SOMMET::´tat ;
                                        e
ARBRE prim(GRAPHESYM G) c’est
    local ENT nbar ; -- nombre d’arˆtes
                                      e
         TAS[(SOMMET,REEL)] A; ENS[SOMMET] X, MOD;
         SOMMET nouv ; REEL w;
d´but
 e
   depuis
       nbar ← O ;
       Result ← creer ; X ← G.lst som ;
        pourtout x de X faire x.´tat ← dehors fpourtout ;
                                       e
       A ← creer ;
       x0 ← X.element ; -- sommet initial quelconque
       x0 .´tat ← recouvert ; MOD ← G.lst voisins(x0 ) ;
           e
        pourtout z de MOD
           z.´tat ← atteint ; z.δ ← G.valar^te(x0 ,z) ; z.p ← x0 ;
             e                               e
           A.mettre en tas((z,z.δ )) ;
        fpourtout
     jusqua nbar ≥ n-1
     faire
       (nouv,w) ← A.mintas ; A.^ter de tas ;
                                o
       nouv.´tat ← recouvert ; MOD ← G.lst voisins(nouv) ;
             e
       -- mise ` jour des marques des sommets modifiables
                  a
        pourtout z de MOD faire
           cas
             z.´tat = dehors −→ z.´tat ← atteint ;
                e                 e
                                   z.δ ← G.valar^te(nouv, z) ; z.p ← nouv ;
                                                  e
                                   A.mettre en tas((z,z.δ ))
             z.´tat = atteint −→ si G.valar^te(nouv, z)  z.δ alors
                e                            e
                                          A.reorg((z,z.δ ),(z, G.valar^te(nouv, z)));
                                                                      e
                                          z.δ ← G.valar^te(nouv, z) ; z.p ← nouv
                                                          e
             z.´tat = recouvert −→ rien
                e
           fcas
        fpourtout ;
       Result.ajoutar^te(nouv,nouv.p) ; nbar ← nbar+1
                      e
     fait
fin




                                         c IFSIC 2004
156          Arbres ; arbre partiel de poids optimum




      c IFSIC 2004
Chapitre 11

Flots dans un r´seau de transport
               e

11.1      Exemple introductif
Probl`me de l’approvisionnement et de la demande. Une ressource est disponible sur
        e
3 sites A1 ,A2 ,A3 en quantit´s respectives a1 ,a2 ,a3 . Cette ressource est demand´e en 4 sites
                                e                                                       e
B1 ,B2 ,B3 ,B4 en quantit´s respectives b1 , b2 , b3 , b4 . Les possibilit´s d’acheminement des res-
                           e                                              e
sources des Ai vers les Bj sont mod´lis´es par le graphe valu´ de la figure 11.1; dans ce graphe,
                                      e e                         e
les sites C1 ,C2 sont des sites interm´diaires de transfert, et la valeur d’un arc est une capacit´,
                                      e                                                             e
´gale ` la quantit´ maximale de ressource qui peut transiter sur cet arc.
e      a            e
    Le probl`me pos´ est alors le suivant : est-il possible de satisfaire les demandes des Bj `
              e       e                                                                              a
partir des disponibilit´s des Ai et des possibilit´s de transport?
                       e                          e
    Pour prendre en compte l’ensemble des donn´es sur le graphe, on ”agrandit” ce dernier en
                                                      e
introduisant un site fictif d’entr´e e, un site fictif de sortie s, et les arcs (repr´sent´s en gras sur
                                  e                                                e    e
la figure):
    – (e,Ai ), de capacit´ ai
                         e
    – (Bj ,s) de capacit´ bj
                         e
Un tel graphe s’appelle r´seau de transport.
                           e
    Le fait d’attribuer ` un arc d’entr´e (e,Ai ) une capacit´ s’interpr`te bien: cela signifie que ai
                        a               e                       e          e
est la quantit´ maximum que l’on peut acheminer depuis Ai ; par contre, la capacit´ d’un arc de
                e                                                                        e
sortie Bj signifie que l’on s’interdit de consommer en Bj plus que la ressource demand´e.     e
    Pour r´soudre le probl`me, on consid`re une fonction ϕ, d´finie sur les arcs et ` valeur dans
            e                e              e                      e                    a
N, telle que:
    – arc d’entr´e: ϕ(e,Ai ) = quantit´ de ressource enlev´e au site Ai ,
                  e                     e                     e
    – arc de sortie: ϕ(Bj ,s) = quantit´ de ressource amen´e au site Bj ,
                                         e                      e
    – arc de transport: ϕ(x,y) = quantit´ de ressource achemin´e sur l’arc (x,y).
                                            e                        e
La valeur de ϕ sur un arc repr´sente donc un flux , et doit satisfaire les conditions de conservation
                                e
(ou lois de Kirchoff) en tout nœud du r´seau (autre que e et s):
                                           e
       (1) ∀x, x = e, x = s :          ϕ(z,x) =          ϕ(x,y)
                              z∈Γ−1 (x)          y∈Γ(x)
De plus, sur tout arc, la condition de capacit´ doit ˆtre respect´e, c’est-`-dire
                                              e      e           e         a
     (2) ∀u ∈ Γ : ϕ(u) ≤ c(u), o` c(u) est la capacit´ de l’arc u
                                   u                    e

                                              c IFSIC 2004
158                                                           Flots dans un r´seau de transport
                                                                             e


                                                                       B
                                                                        1       b
                               A                                                    1
                                1
                                                     C
               a                                      1                B b2
                   1                                                    2
                       a
           e               2   A                                                        s
                                2                                           b
               a                                     C                          3
                   3                                  2                B
                                                                        3
                               A
                                3
                                                                       B        b
                                                                        4           4

                                    Fig. 11.1 – R´seau de transport
                                                 e


Une telle fonction s’appelle un flot (contraintes 1) compatible (contraintes 2)
    Le probl`me pos´ admet une solution s’il existe un flot compatible tel que, pour tout site
            e        e
demandeur Bj , on ait ϕ(Bj ,s) = bj (saturation des arcs de sortie). En pratique, nous verrons,
grˆce aux r´sultats du §11.2, que la r´solution de ce probl`me revient ` chercher, parmi les flots
  a        e                          e                     e            a
compatibles, un flot de valeur maximum, c’est-`-dire acheminant la plus grande quantit´ globale
                                                 a                                        e
de ressource. Nous allons dans ce qui suit d´finir pr´cis´ment les notions de r´seau de transport,
                                             e       e e                        e
flot compatible, valeur d’un flot, et les r´sultats g´n´raux li´s ` ces notions. Puis nous donnerons
                                         e         e e       e a
un algorithme de calcul de flot de valeur maximum, dˆ ` Ford et Fulkerson.
                                                        ua




11.2     D´finitions et propri´t´s g´n´rales
          e                  e e e e

R´seau de transport.
 e

   D´finition 11.1 Un r´seau de transport est un graphe valu´ par des
     e                     e                                      e
   entiers G = (X,e,s; Γ; c) o`u
       – X ∪ {e} ∪ {s} est l’ensemble des sommets,
       – c : Γ −→ N est la fonction capacit´ .e
       – le sommet e s’appelle l’entr´e (ou source), le sommet s la sor-
                                       e
         tie (ou puits) et ils sont respectivement racine et anti-racine du
         graphe.
       – les arcs (e,∗) et (∗,s) s’appellent respectivement arcs d’entr´e et
                                                                       e
         arcs de sortie du r´seau
                             e


                                               c IFSIC 2004
11.2. D´finitions et propri´t´s g´n´rales
       e                  e e e e                                                            159


Flot compatible.

   D´finition 11.2 Un flot sur un r´seau de transport (X,e,s; Γ; c) est une
     e                             e
   fonction ϕ : Γ −→ N v´rifiant les lois de Kirchoff (d´finies au §11.1)
                         e                            e
   Un flot compatible v´rifie en outre ∀u ∈ Γ : 0 ≤ ϕ(u) ≤ c(u)
                      e


Quelques notations. Soit A ⊆ X. On note:
       ΓS (A) = {(x,y) ∈ Γ | x ∈ A ∧ y ∈ A} arcs sortants de A

       ΓE (A) = {(x,y) ∈ Γ | x ∈ A ∧ y ∈ A} arcs entrants dans A

puis
       ϕS (A) =          (ϕ(u)) = flux sortant de A et
                  u∈ΓS (A)



       ϕE (A) =              (ϕ(u)) = flux entrant dans A
                  u∈ΓE (A)


(de mani`re analogue, on aura cS (A), cE (A)). Avec ces notations, par exemple, les conditions
         e
de conservation au nœud x(= e, = s) s’expriment simplement :
       ϕE (x) = ϕS (x) o` x est mis pour l’ensemble {x}
                        u
   Sur le plan algorithmique, un r´seau de transport est un graphe valu´, muni des acc`s sui-
                                  e                                    e              e
vants :

ENT ARC::c --       capacit´
                           e
ENT ARC::ϕ --        flot
avec les notations habituelles : si (x,y) est un arc, alors c(x,y) et ϕ(x,y) d´signent respective-
                                                                              e
ment la capacit´ et le flux de l’arc (x,y).
                e


Valeur d’un flot compatible.

   D´finition 11.3 La valeur d’un flot compatible est la quantit´ v(ϕ) =
     e                                                        e
   ϕS (e) (flux sortant de la ”source” e).


La proposition suivante et son corollaire vont montrer, entre autres, que cette valeur repr´sente
                                                                                           e
bien la quantit´ globale de flux qui traverse le r´seau de la source vers le puits.
               e                                 e


   Proposition 11.4 Soit A ⊆ X ∪ {e} et ϕ un flot.
     – si e ∈ A alors ϕS (A) − ϕE (A) = 0
     – si e ∈ A alors ϕS (A) − ϕE (A) = v(ϕ)


                                               c IFSIC 2004
160                                                                                                                    Flots dans un r´seau de transport
                                                                                                                                      e



D´monstration.
   e
i) Supposons que e ∈ A. Pour tout x de A, les conditions de conservation permettent d’´crire:
                                                                                      e
               ϕ(x,y) +                         ϕ(x,y) =                                           ϕ(z,x) +                        ϕ(z,x)
      y∈Γ(x)               y∈Γ(x)                                                 z∈Γ−1 (x)                      z∈Γ−1 (x)
       y∈A                     y∈A                                                     z∈A                           z∈A
Sommons ces ´galit´s sur A. Il vient:
            e     e
     S
    ϕ (A) +            ϕ(x,y) = ϕE (A) +                                                                             ϕ(z,y), soit
                   x∈A                                                                               x∈A
                  y∈Γ(x)                                                                           z∈Γ−1 (x)
                   y∈A                                                                               z∈A

      ϕS (A) − ϕE (A) = −                                                             ϕ(x,y) +                         ϕ(z,x)
                                                  x∈A                                                      x∈A
                                                 y∈Γ(x)                                                  z∈Γ−1 (x)
                                                     y∈A                                                   z∈A

Si dans la deuxi`me somme double on fait le changement de variable: (x,z) → (y,x), on obtient:
                e
      ϕS (A) − ϕE (A) = −                                                             ϕ(x,y) +                         ϕ(x,y) = 0
                                                  x∈A                                                      y∈A
                                                 y∈Γ(x)                                                  x∈Γ−1 (y)
                                                     y∈A                                                   x∈A
ce qui d´montre la proposition dans ce cas.
        e
ii) Supposons que e ∈ A, et posons A = A  {e}. On a alors:
      ϕS (A ) = ϕS (A) −                                         ϕ(e,y)
                                            y∈Γ(e)
                                            y∈A

      ϕE (A ) = ϕS (A) +                                         ϕ(e,y)
                                            y∈Γ(e)
                                                y∈A

                                                                                                      
                                        ¡        ¡           ¡       ¡       ¡    ¡    ¡   ¡   ¡     ¡


                                                                                                                                             
                                                                                                                                             




                                    ¦
                                         
                                        ¡   ¦
                                                  
                                                 ¡   ¦
                                                              
                                                             ¡
                                                                      
                                                                     ¡
                                                                              
                                                                             ¡
                                                                                   
                                                                                  ¡
                                                                                        
                                                                                       ¡
                                                                                            
                                                                                           ¡
                                                                                                
                                                                                               ¡
                                                                                                      
                                                                                                     ¡
                                                                                                                                                   A/A’
                                                                                 A’
                           ¢        ¢       ¢
                           £        £       £




                                ¤                                                                     
                                ¥       ¡        ¡           ¡       ¡       ¡    ¡    ¡   ¡   ¡     ¡
                                    ¦
                                    §       ¦
                                            §        ¦
                                                     §                                                                                   
                                                                                                                                         




                           ¢
                           £




                               e¤
                                ¥
                                    ¢
                                    £




                                    §
                                         
                                        ¡
                                            ¢
                                            £




                                            §
                                                  
                                                 ¡
                                                     §
                                                              
                                                             ¡
                                                                      
                                                                     ¡
                                                                              
                                                                             ¡
                                                                                   
                                                                                  ¡
                                                                                        
                                                                                       ¡
                                                                                            
                                                                                           ¡
                                                                                                
                                                                                               ¡
                                                                                                      
                                                                                                     ¡
                                                                                                                           
                                                                                                                           
                                                                                                                                   
                                                                                                                                   
                                                                                                                                           
                                                                                                                                           
                                                                                                                                                   A’ = A / {e}
                           ¢        ¢       ¢
                           £        £       £




                                                         ¨       ¨       ¨
                                ¤                        ©       ©       ©                            
                                ¥       ¡        ¡           ¡       ¡       ¡    ¡    ¡   ¡   ¡     ¡




                                                         ¨       ¨       ¨
                                ¤                        ©       ©       ©                            
                                ¥       ¡        ¡           ¡       ¡       ¡    ¡    ¡   ¡   ¡     ¡




et, d’apr`s le point i): ϕS (A ) − ϕE (A ) = 0, ce qui donne:
         e
      ϕS (A) − ϕE (A) =                                          ϕ(e,y) = ϕS (e) = v(ϕ)
                                        y∈Γ(e)
P


    Corollaire 11.5 Soit ϕ un flot. On a: v(ϕ) = ϕS (e) = ϕE (s)

D´monstration. En effet, si on applique la proposition pr´c´dente avec
 e                                                      e e
A = {e} ∪ X, on obtient:
     ϕS (A) = ϕE (s), ϕE (A) = 0 d’o` v(ϕ) = ϕE (s)
                                    u

                                                                                                   c IFSIC 2004
11.3. Recherche d’un flot compatible de valeur maximum                                       161



   D´finition 11.6 On appelle coupe du r´seau tout ensemble d’arcs
     e                                 e
   ΓS (A) o` A ⊆ X ∪ {e} avec e ∈ A. La quantit´ cS (A) s’appelle la
            u                                  e
   capacit´ de la coupe ΓS (A).
          e


Remarque. Ce nom de coupe vient de ce que tout chemin de e ` s emprunte au moins un arc
                                                                  a
de la coupe; autrement dit, si on supprime les arcs de la coupe, on ”d´connecte” le r´seau entre
                                                                      e              e
e et s, c’est-`-dire on empˆche tout passage de e ` s.
              a            e                      a
    Nous ´non¸ons un lemme, dˆ ` Ford et Fulkerson, fondamental pour l’obtention de
           e    c                 u a
l’algorithme de calcul d’un flot maximal.

   Lemme 11.7 Soit A ⊆ X ∪ {e} avec e ∈ A, et ϕ un flot compatible.
   On a l’in´galit´:
            e     e
        v(ϕ) ≤ cS (A)

D´monstration. D’apr`s la proposition 11.4 on a:
  e                      e
                 S       E
      v(ϕ) = ϕ (A) − ϕ (A)
mais, le flot ´tant compatible:
             e
      ϕ (A) ≤ cS (A), ϕE (A) ≥ 0
        S

d’o` le r´sultat P
   u      e
    Ce lemme s’´nonce encore sous la forme suivante : ”La valeur de tout flot compatible est
                   e
inf´rieure ou ´gale ` la capacit´ de toute coupe”
   e           e     a          e


   Corollaire 11.8            max         v(ϕ) ≤ min cS (A)
                           ϕ compatible         A⊆X∪{e}
                                                   e∈A


´
Evident d’apr`s le lemme pr´c´dent.
                e               e e
    Dans le paragraphe suivant, nous nous int´ressons au calcul d’un flot compatible de valeur
                                                   e
maximum. En fait, nous allons montrer un r´sultat de dualit´ : dans le corollaire pr´c´dent,
                                                   e                e                   e e
l’in´galit´ est une ´galit´ : ce r´sultat est connu sous le nom de th´or`me de Ford-Fulkerson,
    e     e         e     e       e                                   e e
et sa preuve repose sur la construction explicite, par un algorithme, d’un flot ϕ et d’une coupe
ΓS (A) tels que v(ϕ) = cS (A)


11.3     Recherche d’un flot compatible de valeur maximum
11.3.1    Sch´ma g´n´ral
             e    e e
    Dans ce paragraphe, nous d´crivons un algorithme dˆ ` Ford et Fulkerson; le principe
                                  e                        ua
en est le suivant: partant d’un flot compatible initial, on teste si ce flot est de valeur maximum,
et s’il ne l’est pas, on le modifie pour obtenir un nouveau flot compatible de valeur strictement
sup´rieure ` la valeur du flot pr´c´dent, puis on recommence. Le test et l’augmentation du flot
    e         a                   e e

                                              c IFSIC 2004
162                                                        Flots dans un r´seau de transport
                                                                          e


sont effectu´s grˆce ` une proc´dure de marquage que nous d´taillons ci-apr`s. Le sch´ma de
            e    a a            e                         e               e         e
l’algorithme est donc it´ratif:
                        e

      depuis G.ϕ ←− flot compatible;
      jusqua ¬ marquage(G)
      faire
         am´lioration(G)
           e
      fait

11.3.2       Marquage
    Le rˆle de la fonction marquage consiste ` d´terminer un sous-ensemble A de X ∪ {e} ∪ {s},
         o                                   a e
ce sous-ensemble devant ˆtre le plus grand possible, tel que chaque sommet de A puisse ˆtre
                           e                                                              e
marqu´ en appliquant les r`gles ci-apr`s:
       e                     e        e
   1. e est marqu´ (+)
                   e
   2. si x est marqu´:
                     e
       (a) marquage en avant: marquer (+x) tout successeur y de x tel que y ∈ A et ϕ(x,y) 
           c(x,y) (arc non satur´ )
                                e
       (b) marquage en arri`re: marquer (−x) tout pr´d´cesseur z de x tel que z ∈ A et ϕ(z,x) 
                            e                       e e
           0 (arc charg´ )
                       e
   3. arrˆt lorsque s est marqu´ ou lorsqu’aucun nouveau sommet ne peut plus ˆtre marqu´. La
          e                      e                                                 e         e
       fonction rend le r´sultat vrai si, et seulement si, s n’a pas pu ˆtre marqu´. Le marquage
                         e                                                e        e
       est r´alis´ comme ”effet de bord ” de la fonction.
            e e
Intuitivement, ce proc´d´ de marquage repose sur l’id´e suivante: on essaye d’augmenter la
                         e e                                e
valeur de ϕ; pour cela, il faut d’abord trouver un arc d’entr´e (e,x) non satur´; c’est le sens
                                                                  e                  e
du marquage de e, puis du marquage (+e) de tout successeur x de e tel que (e,x) ne soit pas
satur´. Si un tel arc existe, on envoie une unit´ de flux suppl´mentaire, qui parvient donc ` x;
      e                                           e              e                             a
le flux entrant en x ayant augment´ de 1, le maintien des conditions de conservation n´cessite
                                       e                                                   e
donc, soit d’augmenter le flux sortant de 1, soit de diminuer le flux sur un autre arc entrant de
1; l’ensemble des arcs issus de x sur lesquels on peut envoyer l’unit´ de flux suppl´mentaire est
                                                                        e              e
donc rep´r´ grˆce au marquage ”en avant”, et l’ensemble des arcs aboutissant ` x sur lesquels
          ee a                                                                     a
on peut diminuer d’une unit´ le flux entrant est rep´r´ grˆce au marquage ”en arri`re”. Selon
                               e                       ee a                              e
les possibilit´s, on parvient ainsi ` compenser l’envoi de l’unit´ de flux suppl´mentaire le long
              e                      a                             e             e
d’une suite de sommets; si l’on parvient ` un sommet x pr´d´cesseur de s tel que l’arc (x,s)
                                             a                  e e
n’est pas satur´, on peut maintenir les conditions de conservation en x en envoyant l’unit´ de
                 e                                                                             e
flux suppl´mentaire sur cet arc; la valeur du flot a ainsi augment´ d’une unit´, puisqu’une unit´
            e                                                        e         e                 e
suppl´mentaire issue de e a pu ˆtre achemin´e jusqu’` s tout en maintenant les conditions de
      e                            e            e        a
conservation et les contraintes de compatibilit´.e
     Du point de vue algorithmique, ce proc´d´ de marquage n’est rien d’autre qu’une recherche
                                              e e
de descendants du sommet e, dans un graphe ”auxiliaire” engendr´ par les arcs non satur´s du
                                                                       e                     e
r´seau et par les arcs charg´s du r´seau transpos´; cette recherche pourra ˆtre mise en œuvre par
 e                           e      e              e                        e
une des m´thodes vues dans les chapitres pr´c´dents, notamment une m´thode d’exploration.
            e                                  e e                          e
     Donnons maintenant un premier r´sultat li´ ` l’application des r`gles de marquage.
                                         e        ea                      e

                                            c IFSIC 2004
11.3. Recherche d’un flot compatible de valeur maximum                                             163



   Proposition 11.9 Si le sommet s n’a pu ˆtre marqu´ par la fonction
                                             e      e
   marquage(G) alors G.ϕ est de valeur maximum.


D´monstration. Soit A l’ensemble des sommets marqu´s ` l’issue de la proc´dure. Par
  e                                                            e a                    e
construction e ∈ A et, par hypoth`se, s ∈ A. Par cons´quent, Γ
                                     e                     e        S (A) est une coupe. D’apr`s
                                                                                               e
la proposition 11.4, on a:
    (1) v(ϕ) = ϕS (A) − ϕE (A). Mais, si x ∈ A et y ∈ A, l’arc (x,y) est satur´, d’o` ϕ(x,y) =
                                                                                e     u
c(x,y); donc:
    (2) ϕS (A) = cS (A). De mˆme, si z ∈ A et x ∈ A, l’arc (z,x) n’est pas charg´, c’est-`-dire
                               e                                                    e      a
ϕ(z,x) = 0; donc:
    (3) ϕE (A) = 0. Les ´galit´s (1), (2), (3) impliquent: v(ϕ) = c(A) et par cons´quent, d’apr`s
                        e     e                                                   e            e
le lemme de 11.7 Ford-Fulkerson, ϕ est de valeur maximum.


   Corollaire 11.10 Si le sommet s n’a pu ˆtre marqu´ par la fonction
                                             e          e
   marquage(G), alors la coupe ΓS (A) d´finie par l’ensemble des sommets
                                       e
   marqu´s est de capacit´ minimum.
         e               e


   Th´or`me 11.11 (Ford-Fulkerson) La valeur maximum des flots com-
      e e
   patibles est ´gale ` la capacit´ minimum des coupes.
                e     a           e

Ce th´or`me est un ´nonc´ ´quivalent aux deux propositions pr´c´dentes. Il r´pond ` la question
     e e           e    ee                                   e e            e     a
pos´e ` la fin du §11.2.
   e a

11.3.3    Am´lioration
            e
    Nous ´tablissons maintenant la r´ciproque de ce qui pr´c`de, ` savoir le fait que si s a pu ˆtre
           e                                e                     e e   a                            e
marqu´ par la fonction marquage(G), alors le flot G.ϕ n’est pas de valeur maximum; de plus, le
        e
marquage r´alis´ permet de d´finir un nouveau flot compatible de valeur strictement sup´rieure
              e e                     e                                                          e
a
` celle de ϕ.
    Soit e(= x0 ),x1 ,x2 , . . . ,xn ,s(= xn+1 ) une s´quence de sommets telle que x1 soit marqu´ (+e),
                                                      e                                          e
x2 marqu´ (±x1 ), ... , xi marqu´ (±xi−1 ), ... ,s marqu´ (+xn ).
            e                           e                      e
    Un couple (xi−1 ,xi ) tel que xi est marqu´ (+xi−1 ) correspond ` un arc non satur´ (xi−1 ,xi );
                                                    e                     a                  e
posons εi = c(xi−1 ,xi ) − ϕ(xi−1 ,xi ) (capacit´ r´siduelle de l’arc,  0). Cette quantit´ est le
                                                      e e                                       e
nombre maximum d’unit´s de flux suppl´mentaires pouvant circuler sur cet arc. On dira que
                                e                 e
l’arc (xi ,xi−1 ) peut ˆtre εi -augment´.
                       e                   e
    Un couple (xi−1 ,xi ) tel que xi est marqu´ (−xi−1 ) correspond ` un arc charg´ (xi ,xi−1 );
                                                       e                      a              e
posons εi = ϕ(xi−1 ,xi ) (flux de l’arc,  0). Cette quantit´ est le nombre maximum d’unit´s de
                                                                  e                                e
flux pouvant ˆtre ˆt´es de cet arc. On dira que l’arc (xi ,xi−1 ) peut ˆtre εi -diminu´.
                e    oe                                                     e              e
    D´finissons la fonction ϕ de la mani`re suivante : Soit ε = min1≤i≤n+1 εi
      e                            ˆ            e
    – sur tout arc (xi−1 ,xi ) de la chaˆ pouvant ˆtre augment´ (c’est-`-dire xi marqu´ (+xi−1 )):
                                            ıne          e            e       a              e
       ϕ(xi−1 ,xi ) = ϕ(xi−1 ,xi ) + ε
       ˆ

                                              c IFSIC 2004
164                                                           Flots dans un r´seau de transport
                                                                             e


  – sur tout arc (xi ,xi−1 ) de la chaˆ pouvant ˆtre diminu´ (c’est-`-dire xi marqu´ (−xi−1 ):
                                      ıne       e          e        a              e
     ϕ(xi ,xi−1 ) = ϕ(xi ,xi−1 ) − ε
      ˆ
  – sur tout autre arc (y,z): ϕ(y,z) = ϕ(y,z)
                                  ˆ
On a le r´sultat suivant:
         e


   Proposition 11.12 ϕ est un flot compatible, et v(ϕ) = v(ϕ) + ε  v(ϕ)
                     ˆ                             ˆ


D´monstration. 1) v´rifions que ϕ est un flot. Il suffit de v´rifier que les conditions de conser-
  e                    e           ˆ                     e
vation sont maintenues en tout sommet de la chaˆ (= e, = s). Quatre cas sont possibles pour
                                                 ıne
un sommet xi (1 ≤ i ≤ n)
   1. marque(xi ) = (+xi−1 ) et marque(xi+1 ) = (+xi ).
                           x                         x                 x
                               i-1                        i                i+1

     On a alors ϕE (xi ) = ϕE (xi ) + ε et ϕS (xi ) = ϕS (xi ) + ε d’o`
                  ˆ                        ˆ                          u
     ϕE (xi ) = ϕS (xi )
     ˆ          ˆ
  2. marque(xi ) = (+xi−1 ) et marque(xi+1 ) = (−xi )
                           x                          x                x
                               i-1                        i                i+1

     On a alors ϕ(xi−1 ,xi ) = ϕ(xi−1 ,xi ) + ε et ϕ(xi+1 ,xi ) = ϕ(xi+1 ,xi ) − ε soit
                  ˆ                                  ˆ
     ϕE (xi ) = ϕE (xi ) et ϕS (xi ) = ϕS (xi ) d’o`
     ˆ                      ˆ                      u
     ϕE (xi ) = ϕS (xi )
     ˆ          ˆ
  3. marque(xi ) = (−xi−1 ) et marque(xi+1 ) = (+xi ).
                           x                          x                x
                               i-1                        i                i+1

     On a alors ϕ(xi ,xi−1 ) = ϕ(xi ,xi−1 ) − ε et ϕ(xi ,xi+1 ) = ϕ(xi ,xi+1 ) + ε soit
                  ˆ                                  ˆ
     ϕE (xi ) = ϕE (xi ) et ϕS (xi ) = ϕS (xi ) d’o`
     ˆ                      ˆ                      u
     ϕE (xi ) = ϕS (xi )
     ˆ          ˆ
  4. marque(xi ) = (−xi−1 ) et marque(xi+1 ) = (−xi ).
                           x                         x                 x
                               i-1                        i                i+1

      On a alors ϕS (xi ) = ϕS (xi ) − ε et ϕE (xi ) = ϕE (xi ) − ε d’o`
                   ˆ                        ˆ                          u
      ϕE (xi ) = ϕS (xi )
      ˆ          ˆ
ce qui montre que ϕ est un flot.
                      ˆ
    Montrons que ϕ est compatible; c’est imm´diat par construction, puisque
                     ˆ                            e
   1. sur un arc augmentant (xi−1 ,xi ), ϕ a ´t´ augment´ de ε ≤ εi = c(xi−1 ,xi ) − ϕ(xi−1 ,xi ),
                                            ˆ ee               e
      donc ϕ(xi−1 ,xi ) ≤ c(xi−1 ,xi )
            ˆ
   2. sur un arc diminuant (xi ,xi−1 ), ϕ a ´t´ diminu´ de ε ≤ ϕ(xi ,xi−1 ) et donc ϕ(xi ,xi−1 ) ≥ 0
                                         ˆ ee            e                          ˆ
    Enfin, ϕ a ´t´ augment´ sur un arc d’entr´e (e,x1 ), de la quantit´ ε, donc v(ϕ) = v(ϕ) + ε
           ˆ ee              e                    e                      e           ˆ
et comme ε  0, on a bien v(ϕ)  v(ϕ) P
                               ˆ

                                              c IFSIC 2004
11.4. Algorithme de Ford-Fulkerson                                                             165


11.4     Algorithme de Ford-Fulkerson
    La mise en œuvre algorithmique des fonctions de marquage et d’am´lioration se fait par
                                                                               e
une m´thode d’exploration issue de e. Cette exploration peut ˆtre men´e avec n’importe quelle
       e                                                          e         e
strat´gie: largeur, profondeur, etc. Quelle que soit la strat´gie retenue, l’exploration est adapt´e
     e                                                       e                                    e
de mani`re `:
         e a
  1. op´rer sur le graphe valu´ Gε (ϕ) (appel´ graphe d’´cart) constitu´ de l’union du graphe
       e                       e               e        e              e
     partiel de G constitu´ des arcs non satur´s et du graphe partiel de Gt (transpos´ de G)
                          e                      e                                    e
     constitu´ des arcs charg´s, soit, formellement:
              e              e
            Gε (ϕ) = (X ∪ {e} ∪ {s},Γε ,c(ϕ)) avec



            Γε (ϕ) = {(x,y) | (x,y) ∈ Γ ∧ ϕ(x,y)  c(x,y)} ∪
                        {(x,y) | (y,x) ∈ Γ ∧ ϕ(y,x)  0} et

                           c(x,y) − ϕ(x,y) si (x,y) ∈ Γ ∧ ϕ(x,y)  c(x,y)
            c(ϕ)(x,y) =
                           ϕ(y,x)            si (y,x) ∈ Γ ∧ ϕ(y,x)  0
     Pour fixer les id´es, la figure 11.2 donne un exemple de graphe d’´cart associ´ ` un flot.
                     e                                                  e           ea
  2. associer ` chaque sommet y visit´ un attribut ε tel que ε(y) est la valeur du chemin de Gε
              a                        e
     (´gale au minimum des valeurs des arcs) ` l’issue duquel y a ´t´ visit´ pour la premi`re
      e                                          a                   ee       e              e
     fois,
  3. rajouter la condition d’arrˆt s visit´.
                                 e        e

11.4.1    Fonction marquage
    On en donne une version r´cursive, analogue au calcul r´cursif de l’ensemble des descendants
                                e                            e
d’un sommet donn´ (algorithme 6.4.2). Ici, l’exploration est celle des descendants du sommet e,
                    e
dans le graphe d’´cart. Sur l’exploration proprement dite, la fonction greffe un calcul, en affectant
                 e
a
` chaque sommet marqu´ sa marque (chaˆ de caract`res) et son ´cart d’am´lioration (l’entier
                         e                   ıne        e             e         e
ε). Ces deux informations seront exploit´es par la proc´dure d’am´lioration. Enfin, la condition
                                           e            e            e
d’arrˆt est modifi´e: le marquage s’arrˆte lorsque l’exploration ne permet plus de marquer de
     e             e                     e
nouveaux sommets (comme dans le calcul des descendants) ou lorsque le sommet s est marqu´.       e

11.4.2    Proc´dure am´lioration
              e       e
Pr´condition: s est marqu´ (s ∈ M ).
  e                      e

Invariant:
debchaine=tˆte de la chaˆ le long de laquelle ϕ est modifi´ ∧
           e            ıne                              e
flot modifi´ entre debchaine et s
         e

Condition d’arrˆt:
               e          debchaine = e

                                             c IFSIC 2004
166                                                                                   Flots dans un r´seau de transport
                                                                                                     e


                                                    1
                                          1
                                                     1
                                                             1                        4       3
                              1                                                                   1
                        1
                                               1        1
                            2 1
                    e                     2                                                                       s
                                               2
                        2     1                                                                   2
                                                                                          2
                                                                                      5
                                               2         1
                                          3



                                          1        (1)

                                                                                      4 (2)
                            (1)                                                 (1)

                              (1)
                    e                     2                                                           (1)         s
                                    (1)        (2)                                                          (2)
                             (1)                                            (1)

                                                                                      5
                                              (1)                                (1)
                                          3
                                   (1)

                   il y a un chemin : e, 2, 5, 1, 4, s dans ce graphe d’écart, avec epsil=min(1, 2, 1, 1, 1)=1



                                    Fig. 11.2 – Flot et graphe d’´cart associ´
                                                                 e           e


11.4.3    Algorithme
Invariant:
G est muni d’un flot compatible G.ϕ.

Condition d’arrˆt marquage(G)
               e

Progression:
am´lioration(G);
  e



Valeurs initiales: Ici, il s’agit de calculer un flot compatible initial. Une premi`re solution,
                                                                                  e
triviale, consiste ` prendre G.ϕ ≡ 0, qui r´pond ´videmment ` la question.
                   a                       e     e           a
    Une seconde solution, qui sera int´ressante lorsqu’on r´soud le probl`me ”` la main”, no-
                                       e                   e              e    a
tamment sur une repr´sentation graphique, consiste ` chercher d’abord un flot complet:
                        e                            a

                                                                 c IFSIC 2004
11.4. Algorithme de Ford-Fulkerson                                                          167



   D´finition 11.13 Un flot compatible est dit complet si tout chemin de
     e
   e ` s poss`de au moins un arc satur´.
     a       e                        e

Autrement dit, un flot compatible n’est pas complet si, et seulement si, la fonction marquage
permet de marquer s en n’utilisant que des marquages avant.
    La construction d’un flot complet s’effectue en explorant les chemins de e ` s et en affectant
                                                                                a
uniform´ment sur chaque chemin un flux ´gal ` la plus petite capacit´ r´siduelle des arcs du
         e                                 e    a                         e e
chemin. Les flux ainsi obtenus sont superpos´s (c’est-`-dire leurs valeurs additionn´es sur chaque
                                            e        a                             e
arc) et lorsqu’aucun chemin ne peut plus recevoir de flux suppl´mentaire, on a un flot compatible
                                                               e
complet.
    Il est clair qu’un flot de valeur maximum est complet, mais que la r´ciproque est fausse,
                                                                            e
comme l’exemple trait´ dans le §11.5 suivant va le montrer.
                       e
    Le texte complet de l’algorithme est donn´ pages 173.
                                              e

11.4.4    Exemple
   Consid´rons le r´seau de transport de la figure 11.3
         e         e

Initialisation Recherche d’un flot complet
   chemin (e,1,4,s); flux = 1 ; arc (1,4) satur´e
   chemin (e,1,5,s); flux = 1 ; arcs (e,1),(1,5) satur´s
                                                      e
   chemin (e,2,4,s); flux = 1 ; arcs (2,4),(4,s) satur´s
                                                      e
   chemin (e,2,5,s); flux = 1 ; arcs (e,2),(2,5),(5,s) satur´s
                                                           e
   chemin (e,3,6,s); flux = 1 ; arc (3,6) satur´e
   Flot repr´sent´ sur la figure 11.4 (les arcs satur´s sont en gras)
             e   e                                   e
marquage: Arborescence en largeur

                                                     1                  4



   epsil = 1                      e                   2                 5            s



                                                     3                  6


marquage report´ sur la figure 11.4
               e

premier pas d’it´ration am´lioration
                e         e
     ϕ(6,s)←2; ϕ(2,6)←2; ϕ(2,5)←0; ϕ(3,5)←2; ϕ(e,3)←2
     ˆ         ˆ         ˆ         ˆ         ˆ


marquage: e(+) stop; ce flot est donc maximum

                                            c IFSIC 2004
168                                                         Flots dans un r´seau de transport
                                                                           e


11.4.5    Complexit´
                   e
    La complexit´ de l’algorithme de Ford-Fulkerson n’est pas polynomiale. En effet, le nombre
                 e
d’´tapes de l’algorithme est major´ par la capacit´ minimale c+ (A) des coupes du r´seau, puis-
  e                               e               e                                 e
qu’` chaque ´tape la valeur de ϕ augmente au moins de 1, et que d’apr`s le lemme 11.7 on a
    a        e                                                            e
v(ϕ) ≤ c+ (A). Or cette capacit´ ne peut ˆtre major´e ` partir de la taille du graphe (exprim´e
                               e          e          e a                                     e
en fonction de n et m, nombre de sommets et d’arcs). A une mˆme configuration topologique de
                                                              e
r´seau peuvent en effet ˆtre attribu´es des capacit´s qui sont des nombres entiers quelconques,
 e                      e           e              e
donc a priori non born´s.
                       e
    Signalons que des algorithmes de complexit´ polynomiale en fonction du nombre n de som-
                                               e
mets ont ´t´ propos´s: algorithmes de Edmonds-Karp, de Dinic, de Karzanov (ce dernier
          ee         e
ayant une complexit´ globale en O(n3 )) [Din70, EK72, Kar74, MKM78].
                     e


11.5     Cas des r´seaux bi-partis : mise en œuvre par tableaux
                  e
   Dans ce paragraphe, nous consid´rons le cas particulier de r´seaux de la forme
                                  e                            e
      G = (X,Y,e,s ; Γe ,Γ,Γs ; c) o`
                                    u


      X ∩ Y = ∅, e ∈ X ∪ Y, ,s ∈ X ∪ Y

      Γe ⊆ {(e,x),x ∈ X}, Γ ⊆ X × Y, Γs ⊆ {(y,s),y ∈ Y }

Supposons que X = {x1 ,x2 , . . . ,xn } et Y = {y1 ,y2 , . . . ,yp }. Un tel r´seau peut alors ˆtre
                                                                              e                e
repr´sent´ par un tableau C de format (n + 1) × (p + 1), avec
    e    e
       ci,j        =         c(xi ,yj ), 1 ≤ i ≤ n,1 ≤ j ≤ p
       ci,p+1      =         c(e,xi ), 1 ≤ i ≤ n
       cn+1,j      =         c(yj ,s), 1 ≤ j ≤ p
       cn+1,p+1    non d´fini
                        e


Exemple             y1   y2   y3   y4   y5   y6
              x1    20   10   30    0   20   0    30
              x2    30   20    0   30   30   0    70
              x3    0    20   20   20   0    20   80
              x4    0    10   10   10   0    40   60
              x5    30    0   20    0   0    20   60
                    40   20   40   40   30   70


Mise en œuvre de Ford-Fulkerson. Cette mise en œuvre peut ˆtre faite directement `
                                                                         e                    a
l’aide d’un tel tableau: la fonction ϕ est repr´sent´e dans un tableau de mˆme format. Pour que
                                               e    e                      e

                                             c IFSIC 2004
11.5. Cas des r´seaux bi-partis : mise en œuvre par tableaux
               e                                                                            169


ϕ soit un flot compatible, il faut et il suffit d’assurer:
                                               p
       1)                  ∀i 1 ≤ i ≤ n ⇒      j=1 ϕi,j = ϕi,p+1
               (conservation au nœud xi )
                                               n
                          ∀j 1 ≤ j ≤ p ⇒       i=1 ϕi,j = ϕn+1,j
               (conservation au nœud yj )
       2) 1 ≤ i ≤ n + 1,1 ≤ j ≤ p + 1 ⇒ 0 ≤ ϕi,j ≤ ci,j
                           (compatibilit´)
                                         e
De plus, la valeur de ϕ est donn´e par
                                 e
              n                 p
     v(ϕ) =         ϕi,p+1 =         ϕn+1,p
              i=1              j=1
Les diff´rentes ´tapes sont alors :
       e       e

Obtention d’un flot complet initial. Saturer le tableau ϕ ligne par ligne (m´thode dite du
                                                                           e
coin Nord-ouest), c’est-`-dire:
                        a

 pour toute ligne i depuis 1 jqa n
     ϕi,p+1 ← 0 ;
      pour toute colonne j, tant que ϕi,p+1  ci,p+1
         ϕi,j ← max(ci,j , ci,p+1 − ϕi,p+1 , cn+1,j − ϕn+1,j ) ;
         ϕi,p+1 ← ϕi,p+1 + ϕi,j ;
         ϕn+1,j ← ϕn+1,j + ϕi,j
      fpour colonnes
 fpour lignes
Si ϕi,p+1 = ci,p+1 on dira que la ligne i est satur´e (cela correspond ` la saturation de l’arc
                                                       e               a
d’entr´e (e,xi )). De mˆme si ϕn+1,j = cn+1,j pour la colonne j (saturation de l’arc de sortie
        e               e
(yj ,s)).

Marquage Le marquage consiste ici ` alterner des phases de marquage avant et marquages
                                         a
arri`re, o`
    e     u
    – une phase de marquage avant consiste ` marquer de nouvelles colonnes ` partir des lignes
                                              a                               a
      d´j` marqu´es,
       ea        e
    – une phase de marquage arri`re consiste ` marquer de nouvelles lignes ` partir des colonnes
                                   e           a                           a
      d´j` marqu´es.
       ea        e
Initialement, toute ligne i non satur´e est marqu´e (+e)
                                       e            e
Ensuite, les phases avant et arri`re se d´roulent comme suit:
                                 e       e
    – phase de marquage avant :

pour toute ligne i marqu´e ` la phase pr´c´dente
                           e a            e e
  pour toute colonne j depuis 1 jqa p
      si j non marqu´e et ϕi,j  ci,j
                      e
          alors marquer (+i) la colonne j
      fsi

                                              c IFSIC 2004
170                                                                                   Flots dans un r´seau de transport
                                                                                                     e


    fpour colonne
 fpour ligne
   – phase de marquage arri`re :
                           e

pour toute colonne j marqu´e ` la phase pr´c´dente
                            e a           e e
   pour toute ligne i depuis 1 jqa n
      si i non marqu´e et ϕi,j  0
                     e
        alors marquer (-j) la ligne i
      fsi
   fpour ligne
fpour colonne
Arrˆt: les deux situations d’arrˆt se produisent lorsque:
   e                            e
1: s est marqu´ : lors d’une phase avant une colonne j non satur´e est marqu´e. Cela corres-
                  e                                                e            e
      pond au sommet yj marqu´ et l’arc (yj ,s) non satur´.
                                 e                        e
2: blocage : lors d’une phase (avant ou arri`re) aucune nouvelle rang´e (ligne ou colonne selon
                                             e                        e
      les cas) n’a pu ˆtre marqu´e et toutes les colonnes marqu´es sont satur´es.
                      e         e                              e             e
Dans le premier cas, marquage(G) rend faux (G.ϕ non maximum), dans le deuxi`me cas, mar-
                                                                           e
quage(G) rend vrai (G.ϕ maximum)


Am´lioration(G) (dans le cas o` s est marqu´).
     e                             u             e
    Partant de la colonne marqu´e non satur´e jk qui a provoqu´ l’arrˆt du marquage, on remonte
                               e           e                  e      e
la chaˆ de marquage jusqu’` trouver une ligne i1 marqu´e (+e): c’est une chaˆ de marques
       ıne                   a                             e                    ıne
altern´es:
       e
       (+ik ),(−jk−1 ),(+ik − 1), . . . ,(+i2 ),(−j1 ),(+e)
Simultan´ment, on calcule ε = min(ε+ ,ε− ), o`
        e                                    u
       ε+ = min (ci           ,j   − ϕi      ,j   )
                 =1,...,k


       ε− = min ϕi            ,j   −1
                                        (voir figure ci-dessous)
                 =2,...,k


puis on ajuste ϕ en ajoutant/retranchant alternativement ε:
       ϕi   ,j   ←ϕi   ,j   + ε, ϕi     ,j   −1
                                                  ←ϕi   ,j   −1
                                                                  −ε
puis
       ϕn+1,jk ←ϕn+1,jk + ε, ϕi1 ,p+1 ←ϕi1 ,p+1 + ε


Exemple Nous traitons maintenant l’exemple donn´ au d´but de ce paragraphe. Un seul
                                                        e      e
tableau contient les flux et les capacit´s. Chaque case se pr´sente comme suit:
                                       e                    e

                                                                            ci,j
                                                                         ϕi,j

                                                                       c IFSIC 2004
11.5. Cas des r´seaux bi-partis : mise en œuvre par tableaux
               e                                                            171


Flot complet initial et marquage correspondant
                 (+x5 ) (+x3 ) (+x5 ) (+x3 ) (+x1 )      (+x5 )
                   y1       y2       y3      y4    y5      y6
     (−y1 ) x1      20       10       30       0    20       0         30
                 20       10       0       0     0       0        30
     (−y1 ) x2      30       20        0      30    30       0         70
                 20       10       0       30    10      0        70
      (+e) x3        0       20       20      20     0      20         80
                 0        0        20      10    0       20       50
      (+e) x4        0       10       10      10     0      40         60
                 0        0        10      0     0       40       50
      (+e) x5       30        0       20       0     0      20         60
                 0        0        10      0     0       10       20
                    40       20       40      40    30      70    v=220
                 40       20       40      40    10      70
Am´lioration du flot: La chaˆ de marquage est:
    e                           ıne
      (y5 ,s) de capacit´ r´siduelle 20
                          e e
     (x1 ,y5 )        ”           ”       20
     (x1 ,y1 )        ”           ”      -20
     (x5 ,y1 )        ”           ”       30
      (e,x5 )         ”           ”       40
   soit un flux ` transf´rer de 20.
               a       e




                                        c IFSIC 2004
172                                                       Flots dans un r´seau de transport
                                                                         e

Texte de la fonction



ENT epsil ;
ENT SOMMET::ε ;
STRING SOMMET::marq ;
 local ENS[SOMMET] M
BOOL marquage(GRAPHE G) c’est
 d´but
  e
  M ← ∅ ; epsil ← 0 ;
  marquer(e, ’’+’’, +∞) ;
  si s ∈ M alors epsil ← s.ε fsi ;
  Result ← s ∈ M
 fin


marquer(SOMMET x; STRING m; ENT ecart) c’est
   precondition x ∈ M
   local ENT e
 d´but
  e
   x.marq ← m ;
   x.ε ← ecart ;
   M ← M ∪ { x };
   si x = s
    alors
      -- marquages avant
      pour tout y de G.lst succ(x) faire
        si y ∈ M et ϕ(x,y)  c(x,y)
          alors e ← min(x.ε,c(x,y)-ϕ(x,y)) ;
                marquer(y, ’’+x’’ , e)
       fsi
    fpourtout ;
      -- marquages arriere
      pour tout z de G.lst pred(x) faire
        si z ∈ M et ϕ(z,x)  0
          alors e ← min(x.ε,ϕ(z,x)) ;
                marquer(z, ’’-x’’ , e)
       fsi
    fpourtout
  fsi
 fin
-- ` la sortie de cette proc´dure, soit s est marqu´ (en avant ` partir de x) soit tous les som-
     a                      e                      e           a
mets marquables ` partir de x sont marqu´s.
                a                         e


                                           c IFSIC 2004
11.5. Cas des r´seaux bi-partis : mise en œuvre par tableaux
               e                                                                               173


Texte de la proc´dure
                e

amelioration(GRAPHE G) ;
   local SOMMET debchaine ;
 d´but
  e
    depuis debchaine ← s ;
    jusqua debchaine = e
    faire
       si debchaine.marq = ’’+x’’
           alors G.ϕ(x,debchaine) ← G.ϕ(x,debchaine) + G.epsil
           sinon G.ϕ ← G.ϕ(debchaine,x) - G.epsil
       fsi ;
      debchaine ← x
    fait ;
 fin




                                  Algorithme de FORD-FULKERSON


ford-fulkerson(GRAPHE G) c’est
 d´but
  e
    depuis G.ϕ ← initial --           d´livre un flot initial compatible; le flot ≡ 0 convient
                                       e
    jusqua marquage(G)
    faire
        amelioration(G)
      fait
 fin




                                                    1

                                          1                  4
                                                                   2
                              2
                                  2                               2
                          e               2                  5           s

                              2
                                                                  2
                                          3                  6



                     Fig. 11.3 – Exemple d’application de Ford-Fulkerson


                                              c IFSIC 2004
174                                                            Flots dans un r´seau de transport
                                                                              e




                                                        1
                                    (-5)
                                            1
                                     1                               4
                        2                          1                        2
            2                                                                       2
                                    (-5)   1
                    2       2                  1                            2       2
      e                              2                              5                   s
      (+)               1                                            (+3)               (+6)
            2                                                                       1
                                                                            2
                                     3                               6
                                               1
                                   (+e)                              (+2)


                                Fig. 11.4 – flot complet et marquage




                                                        1
                                               1
                                     1                               4
                        2                           1                           2
                2                                                                   2
                                            1
                    2       2                                               2       2
       e                              2                              5                  s
                                                   1
      (+)               2
            2                              1                                        2
                                                                            2
                                     3                               6
                                                1

                coupe minimale


                                Fig. 11.5 – deuxi`me flot et marquage
                                                 e




                                                c IFSIC 2004
11.5. Cas des r´seaux bi-partis : mise en œuvre par tableaux
               e                                                                175




                  x         20
                   1                                              y1
                                   10                                  40
                         20         30
                         30
                  x           20
        30         2                                              y2   20
                              30
                            30
        70
                       20 20                                           40
    e
        80
                  x                                               y3        s
        60         3        20
                        20
                                                                       40
        60
                       10
                             10                                   y4
                  x         10
                   4                                                   30
                                   40
                    30      20                                    y5
                                                                       70
                  x           20
                   5
                                                                  y
                                                                   6


                                    Fig. 11.6 – R´seau bi-parti
                                                 e




                                             c IFSIC 2004
176                                                        Flots dans un r´seau de transport
                                                                          e


Deuxi`me flot et marquage correspondant
     e
               (+x5 ) (+x3 ) (+x5 ) (+x3 )            (+x2 )   (+x5 )
                 y1      y2        y3       y4          y5       y6
   (−y2 ) x1      20       10       30        0          20        0         30
               0       10        0        0           20       0        30
   (−y1 ) x2      30       20        0       30          30        0         70
               20      10        0        30          10       0        70
    (+e) x3        0       20       20       20           0       20         80
               0       0         20       10          0        20       50
    (+e) x4        0       10       10       10           0       40         60
               0       0         10       0           0        40       50
    (+e) x5       30        0       20        0           0       20       60
               20      0         10       0           0        10       40
                  40       20       40       40          30       70    v=240
               40      20        40       40          30       70
  Ce flot est maximal car il sature les sorties.



11.6     Application: probl`mes de couplage des graphes bi-partis
                           e
    Les probl`mes de couplage de cardinalit´ maximale constituent une des applications les
                e                             e
plus classiques des mod`les de flots. Ils interviennent aussi comme ´tape dans la r´solution de
                         e                                            e              e
probl`mes d’affectation ` coˆt optimal, largement utilis´s en optimisation combinatoire. Histo-
       e                 a u                             e
riquement, la th´orie du couplage maximum d’un graphe bi-parti a pr´c´d´ la th´orie des flots;
                  e                                                     e e e      e
elle apparaˆ maintenant comme une application de cette derni`re aux aux graphes bi-partis. En
             ıt                                                 e
fait, le r´sultat fondamental, du ` K¨nig et Hall, r´sulte de l’application aux r´seaux bi-partis
          e                       a o               e                            e
mod´lisant le probl`me du lemme de Ford-Fulkerson, de mˆme l’algorithme r´solvant le probl`me
     e               e                                     e                 e              e
(algorithme de Evegary et K¨hn) est l’adaptation de l’algorithme de Ford-Fulkerson.
                              u


11.6.1    Le probl`me
                  e

    Soit Y et Z deux ensembles finis et Γ une relation sur Y × Z, ou encore, ce qui est ´quivalent,
                                                                                        e
une application de Y dans 2Z (ensemble des parties de Z). Le triplet (Y,Z,Γ) est en fait un graphe
bi-parti G, avec Y ∪ Z comme ensemble de sommets, et Γ comme ensemble d’arcs.


   D´finition 11.14 On appelle couplage du graphe bi-parti G une partie
     e
   A ⊆ Y et une bijection ϕ : A → ϕ(A) telle que ϕ(A) ⊆ Z et ∀x ∈ A :
   ϕ(x) ∈ Γ(x).


   D´finition 11.15 Si (A,ϕ) est un couplage de G alors |A| = |ϕ(A)|
     e
   s’appelle le cardinal (ou valeur) du couplage.


                                            c IFSIC 2004
11.6. Application: probl`mes de couplage des graphes bi-partis
                        e                                                               177


Remarque Un couplage peut aussi ˆtre vu comme un sous-ensemble W de l’ensemble des
                                    e
arcs Γ du graphe bi-parti G = (Y,Z,Γ) tel que deux arcs distincts de W n’aient ni origine ni
extr´mit´ commune (figure 11.7).
    e e

                                        e
           a                                               Y={a, b, c, d, }

                                        f                  Z={e, f, g, h, i }
           b
                                                           A={a, b, c }
                                        g
           c                                               (A)={e, f, h }

                                        h
           d                                               couplage de cardinal 3
                                                           (arcs en gras)
                                        i

                              Fig. 11.7 – Couplage du graphe G



                    ´
   Probl`me 11.1 Etant donn´ un graphe bi-parti G
         e                     e                              =    (Y,Z,Γ),
   d´terminer un couplage de G, de cardinalit´ maximum
    e                                        e



Remarque S’il existe un couplage de valeur |Y |, on dit qu’on peut coupler Y dans Z.



11.6.2   Mod´lisation en r´seau bi-parti
            e             e

   Au graphe bi-parti G = (Y,Z,Γ) on associe le r´seau de transport
                                                 e

     G = (Y,Z,e,s; Γ ; c ) avec


     Γ = Γ ∪ {(e,y),y ∈ Y } ∪ {(z,s),z ∈ Z}


                       c(e,y) = c(z,s) = 1
     ∀y ∈ Y,∀z ∈ Z
                       c(y,z) = +∞

                                            c IFSIC 2004
178                                                         Flots dans un r´seau de transport
                                                                           e




                    e                                                       s



                                                                      1
                          1

                                     Y                      Z

   On v´rifie facilement que tout flot compatible sur G est un couplage de G et r´ciproquement,
         e                                                                      e
dont les valeurs sont ´gales. Il suffit pour cela de consid´rer la correspondance
                      e                                  e
      z = ϕ(y) ⇔ ϕ(y,z) = 1
   Nous donnons le r´sultat fondamental de la th´orie du couplage maximum, du ` K¨nig et
                     e                          e                             a o
Hall:


   Th´or`me 11.16 Soit G = (Y,Z,Γ) un graphe bi-parti. Il existe un
      e e
   couplage de valeur Y si, et seulement si,
         ∀A ⊆ Y : |A| ≤ |Γ(A)|


D´monstration. i) Supposons qu’il existe un couplage ϕ de valeur |Y |, et consid´rons le
   e                                                                                e
r´seau de transport associ´. Soit A ⊆ Y . Alors A = {e} ∪ A ∪ Γ(A) d´finit une coupe Γ S (A ).
 e                        e                                         e
Calculons sa capacit´:
                    e

                                                                A           (A)



   les arcs sortants de A’ sont:
                                                    e                               s
       – (e,y) avec y ∈ Y  A
       – (z,s) avec z ∈ Γ(A)

                                                                Y-A
                                                                          Z- (A)

   et comme (y,z) ∈ Γ ∧ y ∈ A ⇒ z ∈ Γ(A), aucun arc de Γ ne sort de A . D’o`:
                                                                           u
     cS (A ) = |Y  A| + |Γ(A)| = |Y | − |A| + |Γ(A)|
   D’apr`s le lemme de Ford-Fulkerson,
         e
      v(ϕ) = |Y | ≤ cS (A ) = |Y | − |A| + |Γ(A)|
   c’est-`-dire |A| ≤ |Γ(A)|
         a

                                             c IFSIC 2004
11.6. Application: probl`mes de couplage des graphes bi-partis
                        e                                                                        179


ii) R´ciproquement, soit ϕ un flot de valeur maximale sur le r´seau de transport associ´ ` G,
      e                                                           e                            ea
et soit A = {e,A ⊆ Y,B ⊆ Z} l’ensemble des sommets marqu´s par le marquage associ´ ` G.ϕ.
                                                                e                           ea
D’apr`s le th´or`me de Ford-Fulkerson, v(ϕ) = cS (A )  ∞ (car v(ϕ) ≤ |Y |  ∞) donc la coupe
       e       e e
Γ + (A ) ne comporte aucun arc (y,z) ∈ Γ. Par cons´quent Γ(A) ⊆ B soit encore |Γ(A)| ≤ |B| et
                                                       e
aussi :
       cS (A ) = |Y | − |A| + |B| ≥ |Y | − |A| + |Γ(A)|
Comme, par hypoth`se, |A| ≤ |Γ(A)|, il vient v(ϕ) = cS (A ) ≥ |Y | d’o`, par double in´galit´,
                         e                                                 u                  e     e
v(ϕ) = |Y |
    P
    La condition n´cessaire et suffisante ´tablie par ce th´or`me est ´videmment impraticable
                      e                       e              e e         e
pratiquement, puisqu’il faudrait la v´rifier sur les 2|Y | parties de Y . Pratiquement, il suffit de
                                         e
calculer un couplage de valeur maximum en appliquant l’algorithme de Ford-Fulkerson adapt´           e
au r´seau bi-parti mod´lisant le probl`me (§11.5) (ou un autre algorithme de calcul de flot
     e                      e               e
maximal), puis de comparer la valeur de ce couplage ` |Y |.
                                                          a
    Du point de vue algorithmique, la mise en œuvre de l’algorithme de Ford-Fulkerson bi-parti
est ici plus simple que pour un r´seau bi-parti quelconque: la colonne et la ligne suppl´mentaires
                                   e                                                      e
portant les capacit´s d’entr´e et de sortie deviennent inutiles (puisque ces capacit´s sont impli-
                      e        e                                                      e
citement ´gales ` 1); de mˆme, les capacit´s des arcs de Γ n’ont pas besoin d’ˆtre indiqu´es:
           e       a           e                 e                                  e            e
toute case du tableau est soit interdite si elle ne correspond pas ` un arc de Γ (capacit´ 0), soit
                                                                   a                        e
autoris´e, c’est-`-dire de capacit´ ∞. Enfin, les flux ne peuvent prendre que les valeurs 0 ou 1: il
         e        a                e
suffira donc de ”marquer” les cases autoris´es avec un signe indiquant si elles sont s´lectionn´es
                                                e                                       e         e
(flux 1) ou non (flux 0).
    En fait, le probl`me revient ` s´lectionner, parmi les cases autoris´es, un ensemble de cases
                        e          a e                                   e
tel qu’au plus une case par rang´e soit s´lectionn´e (couplage) et, parmi tous les ensembles
                                     e          e       e
r´pondant ` la question, en donner un de cardinal maximum (couplage maximum). Une rang´e
 e           a                                                                                     e
sera dite satur´e si une case de cette rang´e est s´lectionn´e (cela correspond ` la saturation
                e                                e     e      e                     a
d’un arc d’entr´e si la rang´e est une ligne, ou d’un arc de sortie si la rang´e est une colonne).
                 e             e                                               e
Enfin, une case autoris´e ne peut jamais ˆtre satur´e (car elle est de capacit´ ∞).
                           e                  e        e                        e
    Pour illustrer l’int´rˆt des mod`les de couplage et la mise en œuvre pratique de l’algo-
                           ee           e
rithme de Ford-Fulkerson, nous traitons ci-apr`s un exemple concret de calcul de syst`me de
                                                    e                                         e
repr´sentants distincts.
     e

11.6.3    Exemple: syst`me de repr´sentants distincts
                       e          e
    Soit X = {x1 , . . . ,xn } un ensemble fini, et Y1 , . . . ,Ym des parties de X: chaque Yj regroupe
des ´l´ments de X selon un certain crit`re. On appelle syst`me de repr´sentants distincts (srd)
    ee                                       e                     e            e
un sous-ensemble E ⊆ X dont chaque ´l´ment repr´sente une et une seule partie Yj . On a donc:
                                            ee           e
E = {xi1 , . . . ,xim } avec
      k = ⇒ xik = xi et xik ∈ Yk ,k = 1, . . . ,m.
    On se ram`ne au probl`me de couplage d’un graphe bi-parti de la mani`re suivante: soit
                   e            e                                                     e
Y = {Y1 , . . . ,Ym }, Z ≡ X et (Yj ,xi ) ∈ Γ ⇔ xi ∈ Yj .
    Tout couplage sur (Y,Z,Γ) d´finit donc une bijection d’une partie de Y sur une partie de Z,
                                    e
c’est-`-dire qu’` tout Yj correspond un ´l´ment bien d´fini de Z ≡ X (son ”repr´sentant”), et
      a            a                          ee                e                        e
deux Yj distincts ont deux repr´sentants distincts.
                                    e

                                              c IFSIC 2004
180                                                        Flots dans un r´seau de transport
                                                                          e


    Consid´rons l’exemple suivant:
          e
    X = {Jean, Anita, Louis, Mireille, Albert, Patricia, Florent} et
     Y1 = {Jean, Anita, Louis}           (moins de 20 ans)
     Y2 = {Mireille, Albert }            (chˆmeurs)
                                            o
     Y3 = {Anita, Louis, Patricia } (amateurs de th´ˆtre) ea
     Y4 = {Mireille, Patricia }          (m`res de famille)
                                            e
     Y5 = {Jean, Anita }                 (´tudiants)
                                          e
     Y6 = {Jean, Louis }                 (membres de l’association sportive)
     Y7 = {Mireille, Florent }           (membres du comit´ d’action sociale)
                                                              e
             (+Y5 ) (+Y5 ) (+Y1 ) (+Y4 )          (+Y2 )    (+Y3 )
              Jean Anita Louis Mireille Albert Patricia Florent
  (-Je) Y1              ×       ×
 (-Mi) Y2                                           ×
 (-An) Y3                       ×                              ×
 (-Pa) Y4                                 ×
  (+e) Y5       ×       ×
 (-Lo) Y6       ×
         Y7                               ×
Couplage initial (m´thode du coin Nord-ouest): v = 6. Ce couplage initial ne permet de choisir
                   e
que 6 repr´sentants (les ´tudiants ne sont pas repr´sent´s). Le marquage, effectu´ sur le tableau
           e             e                         e    e                       e
ci-dessus, permet de marquer Albert, colonne non satur´e. Ce couplage n’est donc pas maximal.
                                                        e
La phase d’am´lioration donne le couplage ci-dessous, qui, lui, est maximal (valeur |Y |=7)
               e

                  Jean    Anita   Louis   Mireille   Albert   Patricia   Florent
             Y1            ×       ×
             Y2                              ×
             Y3             ×       ×
             Y4                                                  ×
             Y5     ×
             Y6     ×
             Y7                              ×
(en     nous avons indiqu´ les nouvelles cases s´lectionn´es dans cette solution).
                         e                      e        e
      Jean      repr´sente les moins de 20 ans
                     e
      Anita          ...     les ´tudiants
                                 e
      Louis          ...     l’association sportive
      Mireille       ...     les m`res de famille
                                   e
      Albert         ...     les chˆmeurs
                                   o
      Patricia       ...     les amateurs de th´ˆtre
                                                 ea
      Florent        ...     le comit´ d’action sociale
                                      e




                                            c IFSIC 2004
Annexe A

Les op´rations de la classe GRAPHE
       e
et leur s´mantique
         e

    Dans ce qui suit, un graphe non valu´ G est un doublet (X, Γ) et un graphe valu´ G est un
                                        e                                          e
triplet (X, Γ), v)


Constructeur
creer
            post vide
            G.creer cr´e un nouvel objet de type graphe, d´sign´ par G, vide
                      e                                   e    e


Op´rations de consultation (lecture)
  e
Fonctions ` r´sultat bool´en
          a e            e
BOOL vide
            post Result ⇒ nm som=0 ∧ nb arc=0

BOOL validsom(SOMMET x)
          renvoie vrai ssi x est un sommet du graphe.

BOOL validarc(SOMMET x, y)
          post validarc(x,y) ⇒ validsom(x) ∧ validsom(y)
          renvoie vrai ssi (x,y) est un arc du graphe

Graphes valu´s
            e
E v(SOMMET x, y) : E
          pre valid arc(x,y)
          v(x,y) = valeur de l’arc (x,y).


                                            c IFSIC 2004
182                             Les op´rations de la classe GRAPHE et leur s´mantique
                                      e                                     e


Fonctions ` r´sultat entier
          a e
ENT nb som
             nombre de sommets

ENT nb arc
             nombre d’arcs

ENT nb succ(SOMMET x)
          pre validsom(x)
             renvoie le nombre de successeurs de x.

ENT nb pred(SOMMET x)
          pre validsom(x)
             renvoie le nombre de pr´d´cesseurs de x.
                                    e e

Parcours de l’ensemble des sommets
BOOL som termine
          som termine = vrai ssi le parcours de l’ensemble des sommets est ´puis´.
                                                                           e    e

premier som
          premier som positionne le sommet courant sur le premier sommet.

prochain som
             pre non som termine
             prochain som avance le sommet courant au prochain sommet.

SOMMET som cour
             pre non som termine
             renvoie le sommet courant du parcours.

Parcours de l’ensemble des arcs
BOOL arc termine
          vrai ssi le parcours de l’ensemble des arcs est ´puis´.
                                                          e    e

premier arc
             positionne l’arc courant sur le premier arc de l’ensemble des arcs.

prochain arc
             pre non arc termine
             avance l’arc courant au prochain arc.

ARC arc cour

                                             c IFSIC 2004
183


          pre non arc termine
          renvoie l’arc courant du parcours.


Fonctions ` r´sultat ensemble de sommets
          a e
ENS[SOMMET] ens som
          G.ens som = ensemble des sommets de G.

ENS[SOMMET] lst succ(SOMMET x)
          pre validsom(x)
          G.lst succ(x) = Γ(x).

ENS[SOMMET] lst pred(SOMMET x)
          pre validsom(x)
          G.lst pred(x) = Γ−1 (x).

ENS[SOMMET] points entr´e
                       e
          post x ∈ points entr´e ⇒ lst pred(x)=∅
                              e
          points entr´e = {x ∈ X | Γ−1 (x) = ∅}.
                     e

ENS[SOMMET] points sortie
          post x ∈ points sortie ⇒ lst succ(x)=∅
          G.points sortie = {x ∈ X | Γ(x) = ∅}.


Proc´dures de modification (´criture)
    e                      e
Graphes non valu´s
                e
ajout sommet(SOMMET x)
          post validsom(x)
          G.ajout sommet(x) ajoute le sommet x au graphe G.
                            Sans effet si x est d´j` un sommet.
                                                ea

ajout arc(SOMMET x,y)
          post validarc(x,y)
          G.ajout arc(x,y) ajoute les sommets x, y et l’arc (x,y) au graphe G.
                           Sans effet si (x,y) est d´j` un arc.
                                                   ea

oter sommet(SOMMET x)
          pre non vide
          post non validsom(x)
          G.oter sommet(x) ˆte le sommet x et tous les arcs adjacents ` x
                           o                                          a                .

oter arc(SOMMET x,y)

                                          c IFSIC 2004
184                          Les op´rations de la classe GRAPHE et leur s´mantique
                                   e                                     e


          pre non vide
          post non validarc(x,y)
          G.oter arc(x,y) ˆte l’arc (x,y).
                          o

sous graphe(ENS[SOMMET] E)
          pre non vide
          post x ∈ E ⇒ non validsom(x).
          G.sous graphe(E) ˆte de G tous les sommets appartenant ` E.
                           o                                     a

Graphes valu´s
            e
ajout val(SOMMET x, y; E )
          post valid arc(x,y) ; v(x,y) =
          ajout val(x, y , ) ajoute l’arc (x,y) de valeur   .
          Si l’arc existe d´j`, remplace sa valeur
                           ea

modif val(SOMMET x, y; E )
          pre valid arc(x,y)
          post v(x,y) =
          modif val(x, y, ) modifie la valeur de l’arc.


Invariants
      vide ⇒ arcvide
      arcvide ⇒ hors arc




                                           c IFSIC 2004
Bibliographie

[Ber70] C. Berge. Graphes et Hypergraphes. Dunod, 1970.
[BLW76] N. L. Biggs, E. K. Llyod and R. J. Wilson. Graph Theory 1736-1936. Oxford University
        Press, 1976.
[CP84] A. Couvert, R. Pedrono. Techniques de Programmation. Cours C 45, IFSIC, Universit´  e
        de Rennes, 1984.
[Cri75] N. Christofides. Graph Theory ; an algorithmic approach. Academic Press, 1975.
[Din70] Dinic, G. A. Algorithm for solution of a problem of maximum flow in a network with
        lower estimation. Soviet. Math. Dokl., 11:1277-1280, 1970.
[EK72] Edmonds, J. and Karp, R. M. Theoretical improvements in algorithmic efficiency for
        network flow problems. J. ACM 19(2):248-264, 1972.
[GM79] M. Gondran, M. Minoux. Graphes et Algorithmes. Eyrolles, 1979.
[HP82] J. M. H´lary, R. Pedrono. Recherche Op´rationnelle : Exercices Corrig´s. Hermann,
                e                                 e                           e
        1982.
[Kar74] Karzanov, A.V. Determining the maximal flow in a network by the method of preflows.
        Soviet. Math. Dokl., 15:434-437, 1974.
[MKM78] Malhorta, M.V., Kumar, M.P., Mahes Hwari S.N. An algorithm for finding maximum
        flow in network. Inf. Proc. Letters, 7(6):277-278, 1978.
[Ros83] ROSEAUX. Exercices et Probl`mes r´solus de Recherche Op´rationnelle, tome 1.
                                          e     e                      e
        Masson, 1983.
[Roy70] B. Roy. Alg`bre Moderne et Th´orie des Graphes, tomes 1  2. Dunod, 1970.
                    e                   e




                                         c IFSIC 2004
Index

 , 29                                                 composantes fortement connexes : Foulkes,
←, 27                                                       84
                                                      composantes fortement connexes : Tarjan,
ajout sommet, 25
                                                            92
                                                      composantes fortement connexes : Tarjan
ajoutarc, 25
                                                            (exemple), 88
Algorithme
                                                      composantes fortements connexes : ascendants-
    τ -minimalit´, 80
                e
                                                            descendants, 86
    ´num´ration des chemins ´l´mentaires (it´ratif),
    e     e                  ee               e
                                                      composition +, 125
        68
                                                      Descendants en largeur d’abord, 63
    ´num´ration des chemins ´l´mentaires (r´cursif),
    e     e                  ee              e
                                                      descendants en profondeur d’abord (r´cursif),
                                                                                            e
        69
                                                            65
    Bellmann-Kalaba, 141
                                                      existence de circuits : Marimont, 73
    Dijkstra, 154
                                                      exploration de la descendance d’un sommet
    Ford-Fulkerson, 173                                     (g´n´ral), 57
                                                               e e
    Ford-Fulkerson, am´lioration, 173
                           e                          Exploration en largeur d’abord, 59
    Ford-Fulkerson, marquage, 172                     Exploration en profondeur d’abord, 61
    Kruskal, 150                                      fermeture transitive : puissances, 40, 41
    Prim, 155                                         fermeture transitive : Roy-Warshall, 41,
    Roy-Warshall avec routage, 46                           44
    Roy-Warshall simplifi´, 95e                        glouton, 66, 112
    ford, 141                                         heuristique, 141
    chemins de valeur minimale : ordinal-racine,      heuristique d’am´lioration, 106
                                                                         e
        121                                           num´rotation conforme avec parcours en
                                                            e
    chemins de valeur minimale : ordinal-racine             profondeur, 75
        2, 123                                        Op´rateur ◦, 31
                                                          e
    chemins de valeur minimale : puissances,          ordinal-racine, 141
        124                                           saisie, 24
    chemins de valeur minimale : Bellmann-            sous graphe, 34
        Kalaba, 109                                   transformation, 124, 128
    chemins de valeur minimale : Bellmann- Anti-r´flexivit´, 18
                                                        e          e
        Kalaba acc´l´r´, 112
                      ee e                       Anti-sym´trie, 18
                                                             e
    chemins de valeur minimale : Dijkstra, 116 Anti-transitivit´, 77 e
    chemins de valeur minimale : Ford, 105       Arˆte, 145
                                                    e
    chemins de valeur minimale : Warshall- Arborescence, 51
        Floyd, 126                                    branche, 51

                                           c IFSIC 2004
INDEX                                                                                187


    feuille, 51                             Diagramme sagittal, 19
    racine, 51                              Dictionnaire des pr´d´cesseurs, 20
                                                               e e
Arbre, 145                                  Dictionnaire des successeurs, 20
    partiel de poids minimum, 148           Dio¨ 128
                                               ıde,
Arc, 15, 16                                     ∪ multiplication latine, 132
    ´tat visit´, 53
    e          e                                × +, 132
    capacit´, 157
             e                                  max ×, 130
    charg´, 162
           e                                    max +, 130
    extr´mit´, 16, 21
         e e                                    min ×, 131
    flux, 157                                    min +, 130
    origine, 16, 21                             min max, 131
    satur´, 162
          e                                     min min, 131
    visit´, 53
         e                                      ET OU, 130
Attribut, 26                                Dualit´, 161
                                                  e

C++, 26                                     Eiffel, 26
Chaˆ 145
    ıne,                                    Exploration
Chemin, 19                                      descendance d’un sommet, 53
    ´l´mentaire, 19, 38
    ee                                          largeur d’abord, 58
    concat´nation, 19
           e                                    meilleur d’abord, 113
    existence, 37                               profondeur d’abord, 59
    longueur, 19, 106
                                            Fermeture
    longueur maximum, 75
                                                transitive, 38
    valeur, 98
                                            Flot, 158
    valeur additive 1-minimale, 99
                                                compatible, 158
    valeur additive minimale, 99
                                                complet, 167, 169
    valeur minimale : routage, 126
                                                valeur, 159, 160
    valeur optimale, 98                     PE complet, 167
PE ∗-optimal-∗, 99                          Fonction
PE ´l´mentaire, 49
    ee                                          injective, 75
PE extr´mit´, 19
         e e                                Fonction ordinale, 74, 119
PE longueur, 33                             Ford-Fulkerson
PE origine, 19                                  algorithme, 162
PE sommet interm´diaire, 19
                   e                            am´lioration, 167
                                                    e
PE x-optimal, 98                                lemme, 161
PE x-optimal-y, 98                              marquage, 162, 167, 169
Circuit, 19, 71                                 marquage arri`re, 162, 169
                                                               e
    ´l´mentaire, 19
    ee                                          marquage avant, 162, 169
    absorbant, 103, 126                         proc´dure d’am´lioration, 163, 170
                                                      e          e
    hamiltonien, 93                             th´or`me, 163
                                                   e e
PE absorbant, 100
Classe, 26                                  G(X), 29
cr´er, 25
  e                                         Graphe
Cycle, 145                                     τ -minimal, 49, 77, 93

                                     c IFSIC 2004
188                                                                                  INDEX


     arborescence 1-minimale, 102                  associatif, 30
     bi-parti, couplage, 176                       commutatif, 30
     composante connexe, 145                       composition, 30
     connexe, 145                                  union, 29
     d’´cart, exploration, 165
        e                                      PE compatible avec une relation, 30
     d´veloppement arborescent, 51
       e                                       PE distributif, 30
     diagonal, 30                              Op´ration Θ, 41
                                                 e
     fermeture transitive, 37                  Ordonnancement, 136
     fortement anti-transitif, 78                  au plus tard relativement ` une date finale,
                                                                             a
     nombre cyclomatique, 145                          139
     non orient´, 145
                 e                                 marge libre dans un ordonnancement, 140
     parcours, 53                                  marge par chemin, 140
     parcours en profondeur, 102               PE au plus tˆt, 138
                                                            o
     partiel, 29                               PE compatible, 136
     potentiel-tˆche, 136, 138
                 a                             PE marge totale relativement ` une date finale,
                                                                             a
     puissance, 33                                     140
     puissance, interpr´tation, 33
                        e
     r´duit selon les c.f.c, 82
      e                                        Probl`me
                                                    e
     sous-graphe, 34                               approvisionnement et demande, 157
     transitif, 37                                 couplage bi-parti, 176
     transpos´, 34
               e                                   syst`me de repr´sentants distincts, 179
                                                       e           e
     valu´, 97
          e                                    Programmation dynamique, 110
PE   composante fortement connexe terminale,   Projet, 135
          82                                       contrainte, 135, 136
PE   composantes fortement connexes, 81            contrainte au plus tˆt, 135, 136, 141
                                                                        o
PE   fortement connexe, 81                         contrainte au plus tard, 135, 137
PE   sous-graphe, 71                               contrainte implicite, 137
                                                   contrainte redondante, 137, 142
Java, 26                                           contraintes, 137
                                                   contraintes d´terministes, 135
                                                                 e
Kirchoff
                                                   contraintes implicites, 138
   loi, 157
                                                   contraintes non d´terministes, 135
                                                                     e
Langage                                            mod´lisation potentiel-tˆche, 136
                                                        e                   a
    objet, 26                                      tˆche, 135, 137
                                                    a
Loi de composition
                                               R´flexivit´, 18
                                                e       e
    ´l´ment absorbant, 97
    ee
                                               R´seau de transport, 157
                                                e
    ´l´ment neutre, 97
    ee
                                                   bi-parti, 168
    associative, 97
                                               PE coupe, 161
M´thode, 26
 e                                             Relation
Marimont, 72                                       ordre, 29
Multi-graphe, 15                                   ordre partiel, 29
                                               Relation binaire, 16
Op´rateur
  e                                                ´quivalence, 16
                                                   e

                                        c IFSIC 2004
INDEX                                                              189


   ordre, 16                                            ´
                                         Tableau booleen, 20
   ordre partiel, 16                     Transitivite´, 37
   ordre total, 16                       Turbo-Pascal, 26
   pr´-ordre, 16
      e                                  Type
PE ´quivalence, 49, 81
   e                                        arc, 21
Repr´sentation
    e                                       file, 58
   liste des sommets, 23                    graphe, 24, 25
   liste des successeurs, 23                            ´
                                            graphe, methodes, 24
   tableau bool´en, 22
                e                           pile, 59
Roy-Warshall, 71                            sommet, 21, 23
Roy-Warshall, 41                            table, 44
   routage, 44                              tas, 113
                                         Type abstrait, 25
Simula, 26
SmallTalk, 26
Sommet, 15
   ´
   etat dehors, 53
   ´
   etat en attente, 53
   ´            ´
   etat termine, 53
   ascendant, 19, 85
   attributs minimaux, 100
         ´
   degre, 18
         ´    ´
   degre exterieur, 18
   degre ´ interieur, 18
              ´
   descendant, 19, 53, 85
   flux entrant, 159
   flux sortant, 159
        ´
   numero, 21
        ´
   numerotation conforme, 75
        ´
   numerotation conforme inverse, 77
                 ´
   point d’entree, 48
   point de sortie, 48
      ´ ´
   predecesseur, 16
   successeur, 16
         ´
   visite, 53
   voisin, 145
PE anti-racine, 158
                 ´
PE point d’entree, 71
PE point de sortie, 71
PE puits, 158
PE racine, 158
PE source, 158
    ´
Symetrie, 18
   ´
τ -equivalence, 49

                                  c IFSIC 2004

C66

  • 1.
    ALGORITHMIQUE DES GRAPHES Jean-Michel H´lary e 1 IFSIC Cours C66 Juin 2004 1. c IFSIC 2004
  • 2.
    2 c IFSIC 2004
  • 3.
    Table des mati`res e 1 Introduction, exemples 9 1.1 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2 Relations graphes et informatique . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.1 Le probl`me du chou, de la ch`vre et du loup . e e . . . . . . . . . . . . . . . 10 1.3.2 Blocage mutuel dans un partage de ressources . . . . . . . . . . . . . . . . 11 1.3.3 Fiabilit´ dans les r´seaux . . . . . . . . . . . . e e . . . . . . . . . . . . . . . 12 2 Graphes : un mod`le math´matique e e 15 2.1 D´finitions math´matiques et notations . e e . . . . . . . . . . . . . . . . . . . . . . 15 2.1.1 L’objet math´matique . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . 15 2.1.1.1 Vision ensembliste . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.1.2 Vision fonctionnelle . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.1.3 Vision relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.1.2 Vocabulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.1.3 Propri´t´s de graphes . . . . . . . ee . . . . . . . . . . . . . . . . . . . . . . 18 2.2 Notion de chemin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 Repr´sentations de l’objet math´matique e e . . . . . . . . . . . . . . . . . . . . . . 19 3 Aspect algorithmique : un type de donn´es abstrait e 21 3.1 Les sommets et les arcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.1.1 Le type Sommet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.1.2 Le type Arc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2 Trois exemples de repr´sentation concr`te . . . . . . . e e . . . . . . . . . . . . . . . 22 3.2.1 Repr´sentation par tableaux . . . . . . . . . . . e . . . . . . . . . . . . . . . 22 3.2.2 Repr´sentation par tableaux et listes . . . . . . e . . . . . . . . . . . . . . . 23 3.2.3 Repr´sentation d´centralis´e par listes . . . . . e e e . . . . . . . . . . . . . . . 23 3.3 Le type abstrait Graphe : les m´thodes . . . . . . . . . e . . . . . . . . . . . . . . . 24 3.4 Notations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4 Relations et op´rateurs entre e graphes 29 4.1 Relation d’ordre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.2 Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.3 Composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 c IFSIC 2004
  • 4.
    4 ` TABLE DES MATIERES 4.3.1 D´finition . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . 30 4.3.2 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.3.2.1 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.3.2.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . 32 4.3.3 Complexit´ . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . 32 4.4 Puissances d’un graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.5 Graphe transpos´ . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . 34 4.6 Sous-graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5 Fermeture transitive 37 5.1 Retour sur la transitivit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 37 5.2 Caract´risation du graphe G+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 38 5.3 Algorithme des puissances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.3.1 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.3.2 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 41 5.4 Algorithme de Roy-Warshall . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4.1 Principe de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.4.3 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 43 5.4.4 Routage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.4.4.1 D´finition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 44 5.4.4.2 Construction des routages par l’algorithme de Roy-Warshall . 46 5.4.4.3 Exemple d’ex´cution . . . . . . . . . . . . . . . . . . . . . . . . e . 47 5.4.4.4 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.5 τ -minimalit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 49 6 M´thodes d’exploration e 51 6.1 D´veloppement arborescent issu d’un sommet donn´ . . . . e e . . . . . . . . . . . . 51 6.2 Exploration de la descendance de x . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.2.1 Sp´cification du r´sultat . . . . . . . . . . . . . . . . e e . . . . . . . . . . . . 53 6.2.2 Principe des m´thodes d’exploration . . . . . . . . . e . . . . . . . . . . . . 53 6.2.3 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.2.4 Texte de l’algorithme g´n´ral d’exploration . . . . . e e . . . . . . . . . . . . 56 6.2.5 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . 56 6.3 Strat´gies d’exploration particuli`res : largeur et profondeur e e . . . . . . . . . . . . 56 6.3.1 Exploration en largeur d’abord . . . . . . . . . . . . . . . . . . . . . . . . 58 6.3.1.1 Une structure de donn´es : la file . . . . . . e . . . . . . . . . . . . 58 6.3.1.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . 58 6.3.1.3 Exemple d’ex´cution . . . . . . . . . . . . . e . . . . . . . . . . . . 58 6.3.2 Recherche en profondeur d’abord . . . . . . . . . . . . . . . . . . . . . . . 59 6.3.2.1 Une structure de donn´es : la pile . . . . . e . . . . . . . . . . . . 59 6.3.2.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . 60 6.3.2.3 Exemple d’ex´cution . . . . . . . . . . . . . e . . . . . . . . . . . . 60 6.4 Exemple d’application : calcul de l’ensemble des descendants . . . . . . . . . . . . 62 c IFSIC 2004
  • 5.
    ` TABLE DES MATIERES 5 6.4.1 Cas de la recherche en largeur . . . . . . . . . . . . . . . . . . . . . . . . . 63 6.4.2 Cas de la recherche en profondeur : expression r´cursive e . . . . . . . . . . 63 6.5 ´ Enum´ration des chemins ´l´mentaires issus de x . . e ee . . . . . . . . . . . . . . . . 64 6.5.1 Algorithmes gloutons et non gloutons . . . . . . . . . . . . . . . . . . . . 66 7 Circuits. Composantes fortement connexes 71 7.1 D´termination de l’existence de circuits . . . . . . . . . . . e . . . . . . . . . . . . 71 7.1.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 7.1.2 Algorithme de Marimont . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7.1.2.1 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 7.1.2.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . 72 7.1.2.3 Complexit´ . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . 73 7.2 Application des graphes sans circuit : fonction ordinale . . . . . . . . . . . . . . . 74 7.3 Application : fermeture anti-transitive et τ -minimalit´ . . . e . . . . . . . . . . . . 77 7.4 Composantes fortement connexes . . . . . . . . . . . . . . . . . . . . . . . . . . 81 7.4.1 D´finition . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . 81 7.4.2 Algorithme de FOULKES . . . . . . . . . . . . . . . . . . . . . . . . . . 83 7.4.2.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 7.4.2.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . 84 7.4.2.3 Complexit´ . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . 84 7.4.3 Algorithme descendants-ascendants . . . . . . . . . . . . . . . . . . . . . 85 7.4.3.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 7.4.3.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . 85 7.4.3.3 Complexit´ . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . 85 7.4.4 Algorithme de TARJAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7.4.4.1 Principe de l’algorithme de TARJAN . . . . . . . . . . . . . . . 87 7.4.4.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 7.4.4.3 Mise en œuvre et texte de l’algorithme . . . . . . . . . . . . . . 90 7.4.4.4 Complexit´ . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . 93 7.4.5 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7.4.5.1 Recherche d’un graphe minimal dans τ (G) . . . . . . . . . . . . 93 7.4.5.2 Calcul rapide de la fermeture transitive . . . . . . . . . . . . . . 94 8 Chemins de valeur optimale 97 8.1 D´finitions et probl`mes pos´s . . . . . . . . . . . . . . . . . . e e e . . . . . . . . . . 97 8.2 Chemins de valeur additive minimale issus d’un sommet donn´ e . . . . . . . . . . 99 8.2.1 Existence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 8.2.2 Caract´risation . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . 100 8.3 Algorithme de FORD : exploration . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.3.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 8.3.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 8.3.3 Une heuristique d’am´lioration . . . . . . . . . . . . . . e . . . . . . . . . . 106 8.4 Algorithme de BELLMANN-KALABA . . . . . . . . . . . . . . . . . . . . . . . 106 8.4.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 c IFSIC 2004
  • 6.
    6 ` TABLE DES MATIERES 8.4.2 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 8.4.3 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 8.4.4 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 8.4.5 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 e 8.4.6 Acc´l´ration de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . 110 ee 8.5 Cas des arcs de valeur positive ou nulle : algorithme de DIJKSTRA . . . . . . . 112 8.5.1 Principe de l’algorithme de DIJKSTRA . . . . . . . . . . . . . . . . . . . 113 8.5.2 Analyse de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 8.5.3 Exemple d’ex´cution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 e 8.5.4 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 8.5.5 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 8.5.6 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 e 8.6 Cas des graphes sans circuit : algorithme ORDINAL . . . . . . . . . . . . . . . . 118 8.6.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 8.6.2 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 8.6.3 Preuve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 8.6.4 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 8.6.5 Complexit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 e 8.6.6 Adaptations et am´liorations . . . . . . . . . . . . . . . . . . . . . . . . . 122 e 8.6.6.1 Calcul progressif des attributs . . . . . . . . . . . . . . . . . . . 122 8.6.6.2 Mise ` jour de l’ensemble des points d’entr´e . . . . . . . . . . . 122 a e 8.6.6.3 Nouvelle version de l’algorithme . . . . . . . . . . . . . . . . . . 123 8.6.6.4 G´n´ralisation au cas o` 1 n’est pas n´cessairement point d’entr´e124 e e u e e 8.7 Valeurs optimales de tout sommet ` tout sommet . . . . . . . . . . . . . . . . . 124 a 8.7.1 De la fermeture transitive aux valeurs optimales . . . . . . . . . . . . . . 124 8.7.2 Transformation de l’algorithme des puissances . . . . . . . . . . . . . . . . 124 8.7.3 Transformation de l’algorithme de Roy-Warshall . . . . . . . . . . . . 126 8.8 Alg`bres de chemins : transformations d’algorithmes . . . . . . . . . . . . . . . . 128 e 9 Probl`mes d’ordonnancement e 135 9.1 Nature des probl`mes . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . 135 9.2 Mod´lisation ` l’aide de graphe . . . . . . . . . . . . . . e a . . . . . . . . . . . . . 136 9.2.1 graphe potentiel-tˆche . . . . . . . . . . . . . . . a . . . . . . . . . . . . . 136 9.2.2 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 9.3 Ordonnancements particuliers; chemin critique; marges. . . . . . . . . . . . . . 138 9.4 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 9.5 Choix des algorithmes de r´solution . . . . . . . . . . . . e . . . . . . . . . . . . . 140 9.6 ´ Elimination de contraintes redondantes . . . . . . . . . . . . . . . . . . . . . . . 142 10 Arbres ; arbre partiel de poids optimum 145 10.1 D´finition et propri´t´s caract´ristiques . . . . . e ee e . . . . . . . . . . . . . . . . . . 145 10.2 Arbres partiels dans un graphe non orient´ valu´ e e . . . . . . . . . . . . . . . . . . 147 10.3 Algorithme de KRUSKAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 10.3.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 c IFSIC 2004
  • 7.
    ` TABLE DES MATIERES 7 10.3.2 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 10.3.3 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 10.3.4 Complexit´ . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . 151 10.4 Algorithme de PRIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 10.4.1 Principe de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 10.4.2 Mise en œuvre de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . 153 10.4.3 Texte de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 10.4.4 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 11 Flots dans un r´seau de transport e 157 11.1 Exemple introductif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 11.2 D´finitions et propri´t´s g´n´rales . . . . . . . . . . . . . . e ee e e . . . . . . . . . . . . . 158 11.3 Recherche d’un flot compatible de valeur maximum . . . . . . . . . . . . . . . . . 161 11.3.1 Sch´ma g´n´ral . . . . . . . . . . . . . . . . . . . . e e e . . . . . . . . . . . . . 161 11.3.2 Marquage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 11.3.3 Am´lioration . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . 163 11.4 Algorithme de Ford-Fulkerson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 11.4.1 Fonction marquage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 11.4.2 Proc´dure am´lioration . . . . . . . . . . . . . . . e e . . . . . . . . . . . . . 165 11.4.3 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 11.4.4 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 11.4.5 Complexit´ . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . 168 11.5 Cas des r´seaux bi-partis : mise en œuvre par tableaux . . e . . . . . . . . . . . . . 168 11.6 Application: probl`mes de couplage des graphes bi-partis . e . . . . . . . . . . . . . 176 11.6.1 Le probl`me . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . 176 11.6.2 Mod´lisation en r´seau bi-parti . . . . . . . . . . . e e . . . . . . . . . . . . . 177 11.6.3 Exemple: syst`me de repr´sentants distincts . . . . e e . . . . . . . . . . . . . 179 A Les op´rations de la classe GRAPHE et leur s´mantique e e 181 c IFSIC 2004
  • 8.
    8 ` TABLE DES MATIERES c IFSIC 2004
  • 9.
    Chapitre 1 Introduction, exemples 1.1 Historique La th´orie des graphes a pris naissance en 1736 : le math´maticien allemand L. Euler e e apporta une r´ponse au probl`me que se posaient les habitants de la ville de Koenigsberg ; ` e e a savoir :comment traverser les sept ponts de cette ville sans jamais passer deux fois par le mˆme. e Jusqu’en 1946, la th´orie des graphes reste du domaine des math´matiques; les math´maticiens e e e ayant associ´ leurs noms aux travaux les plus marquants sont, entre autres : e – au 19`me si`cle : Kirchoff, Hamilton, Sylvester, Kempe, Lucas, Petersen, Tarry e e e e e ¨ – au 20`me si`cle (1`re moiti´) : Poincare, Sainte-Lague, Kuratowski, Hall, Polya, e ¨ Konig, Whitney, Tutte. Des recherches militaires li´es au conflit mondial de 1939-45 naˆ la Recherche Op´rationnelle e ıt e provoquant un d´veloppement de la th´orie des graphes comme mod`les de probl`mes concrets ; e e e e cet aspect est encore renforc´, dans les ann´es qui suivent, par le d´veloppement des Sciences e e e ´ Economiques et de Gestion. Les grands sp´cialistes de cette nouvelle orientation des graphes e ¨ seront des auteurs tels que Kuhn, Dantzig, Ford, Fulkerson, Ghouila-Houry, Harary, Saaty, Bellmann, Roy, Berge, Faure, Kaufmann, etc... Une troisi`me ´poque a ´t´ ou- e e ee verte dans les ann´es 1960, avec le d´veloppement des sciences de l’information et de la commu- e e nication. Des informaticiens tels que Dijkstra, Knuth, Wirth, Sakharovitch, Gondran et beaucoup d’autres, participent au d´veloppement de l’algorithmique des graphes autant qu’` e a la mod´lisation de probl`mes n´s de ces nouvelles sciences en terme de graphes. Une approche e e e historique se trouve dans l’introduction de [GM79], qui renvoie d’ailleurs ` un ouvrage historique a complet sur la premi`re ´poque de la th´orie des graphes (1746-1936) [BLW76]. e e e 1.2 Relations graphes et informatique Les relations entre graphes et informatique sont ` double sens : a 1. l’informatique, outil de r´solution de probl`mes de graphes e e 2. les graphes, outil de mod´lisation de probl`mes informatiques. e e On aboutit donc, dans certaines situations, ` l’informatique comme outil de r´solution de ses a e propres probl`mes (via la mod´lisation en termes de graphes). Ce cours s’int´resse essentiellement e e e c IFSIC 2004
  • 10.
    10 Introduction, exemples ` la partie 1. Outre la n´cessit´ qu’il y a, pour un informaticien, de connaˆ a e e ıtre les algorithmes adapt´s aux principaux types de probl`mes de graphe et la mani`re de les programmer, il faut e e e mettre l’accent sur un aspect essentiel : l’´tude des techniques de programmation d’algorithmes e de graphe. Cette ´tude est enrichissante par elle- mˆme car elle donne l’occasion d’aborder sur e e des exemples non triviaux des notions d’algorithmique aussi fondamentales que les structures de donn´es et l’ad´quation de la repr´sentation au probl`me trait´, les niveaux de programmation e e e e e (types abstraits et mise en oeuvre), la complexit´, etc.. e Cependant la mod´lisation de probl`mes en terme de graphes ne doit pas ˆtre n´glig´e. Nous e e e e e donnons dans la section suivante trois exemples de situations– d’origine informatique ou non – qui se prˆtent ` une telle mod´lisation. e a e 1.3 Exemples 1.3.1 Le probl`me du chou, de la ch`vre et du loup e e L’´nonc´ e e Un passeur, disposant d’une barque, doit faire traverser une rivi`re ` un chou, une ch`vre e a e et un loup. Outre le passeur, la barque peut contenir au plus une des trois unit´s qui doivent e traverser. D’autre part, pour des raisons de s´curit´, le passeur ne doit jamais laisser seuls la e e ch`vre et le chou, ou le loup et la ch`vre. (Par contre, le loup ne mangera pas le chou... et e e r´ciproquement). Comment le passeur doit-il s’y prendre? e Mod´lisation e Il s’agit d’une situation tr`s classique d’un syst`me ` ´tats poss´dant un ´tat initial, un ´tat e e ae e e e final, et des transitions autoris´es. Chaque ´tat se traduit par un sommet, ou point. Chaque e e transition autoris´e d’un ´tat ` un autre se traduit par un arc, allant du premier ´tat vers le e e a e second. Dans cet exemple, un ´tat est une configuration possible sur la rive de d´part. D´signons e e e par P le passeur, L le loup, X la ch`vre, C le chou. Une configuration sera alors d´sign´e par e e e l’ensemble des pr´sents sur la rive de d´part. L’´tat initial est PLXC et l’´tat final ∅. Chaque e e e e arc, repr´sentant une transition possible, sera libell´ –pour la clart´ de la mod´lisation– par la e e e e description de l’action entreprise (A signifie : aller , R signifie retour. On obtient alors le graphe suivant : Probl`mee Chaque solution correspond ` un chemin dans le graphe, de PLXC ` ∅ et alternant les ´tiquettes a a e A et R. Un chemin correspond ` une s´quence d’actions enchaˆ a e ınables les unes aux autres (l’´tat e initial d’une action est ´gal ` l’´tat final de la pr´c´dente). e a e e e R´solution e Pour l’instant, ”` la main” (ou ”au pif”, comme on veut !), on trouve deux solutions : a soit 7 travers´es simples, quelle que soit la solution. Laissons au lecteur le soin de fournir au e passeur, en langage naturel, les explications n´cessaires ` l’accomplissement de sa mission. e a c IFSIC 2004
  • 11.
    1.3. Exemples 11 PLX A(PX) L R(PX) A(PX) R(PL) R(PC) PX A(PC) R(P) A(PL) PXLC A(PX) PLC X ∅ R(PL) A(PL) A(PC) LC R(P) R(PC) A(PX) PXC C R(PX) Fig. 1.1 – graphe des transitions L PLX PLXC LC PLC X PX ∅ C PXC Fig. 1.2 – Solution du probl`me des travers´es e e 1.3.2 Blocage mutuel dans un partage de ressources 3 philosophes chinois A, B, C poss`dent, ` eux trois, trois baguettes R, S, T. Pour manger, e a chacun a besoin de 2 baguettes. Lorsqu’un des philosophes d´sire manger, il requiert deux e baguettes et ne les lib`re que lorsqu’il a fini son repas 1 . Par contre, tant qu’il n’a pas obtenu e les deux baguettes, il ne peut rien faire qu’attendre : mˆme s’il a eu la chance d’obtenir une e baguette, il ne la rend pas tant qu’il n’a pas pu aller au bout de son repas. Consid´rons alors la situation suivante : les 3 philosophes ont envie de manger exactement e au mˆme moment, et chacun se pr´cipite sur les baguettes... mais chacun n’en obtient qu’une. e e Pour fixer les id´es : e A poss`de R et requiert S e 1. apr`s les avoir soigneusement lav´es! e e c IFSIC 2004
  • 12.
    12 Introduction, exemples B poss`de S et requiert T e C poss`de T et requiert R e Bigre ! Il va bien falloir faire preuve de patience... et de philosophie. Ils ne peuvent pas sortir de ce blocage mutuel, et vont donc mourir de faim, sauf si quelqu’un (c’est-`-dire l’un d’eux, a ou un personnage ext´rieur) se rend compte de la situation et intervient autoritairement, par e exemple en lib´rant de force une des baguettes pour l’attribuer ` un des deux autres. e a Cette situation est un exemple de ce qui peut se passer dans les syst`mes informatiques e complexes, o` plusieurs entit´s (processeurs, p´riph´riques,etc.) se partagent des ressources. u e e e Les entit´s en question ´tant a priori moins intelligentes que les philosophes chinois, il faut e e pallier cette lacune en ´tant capable de d´tecter automatiquement les situations d’interblocage. e e Quel que soit le nombre d’entit´s et de ressources, les configurations de possession/requˆte des e e ressources par les entit´s peuvent ˆtre mod´lis´es par un graphe de la mani`re suivante : e e e e e . chaque entit´ est repr´sent´ par un sommet e e e . un arc existe, depuis le sommet X vers le sommet Y si X requiert une ressource que poss`de Y.e Ainsi, dans l’exemple des philosophes et des baguettes, on obtient le graphe dessin´ figure 1.3 : e B (S) Le libell´ sur l’arc d´signe e e A (T) la ressource demand´e (par e l’origine) et poss´d´e (par e e l’extr´mit´) e e (R) C Fig. 1.3 – graphe des attentes Un tel graphe est dynamique dans la mesure o` les ressources sont lib´r´es et r´-allou´es au u ee e e cours du temps. Mais ` chaque instant, il y a un graphe et un seul et de plus, si une situation a d’interblocage apparaˆ le graphe n’´volue plus. Maintenant, il est clair que l’interblocage entre ıt, e plusieurs entit´s se produit si et seulement si les sommets correspondants sont situ´s sur un e e circuit, c’est ` dire un chemin dont l’extr´mit´ co¨ a e e ıncide avec l’origine. C’est donc un algorithme de d´tection de circuit qui permettra, ici, de r´soudre le probl`me de d´tection de l’interblocage. e e e e Le probl`me pr´sent´ (interblocage) est un exemple d’un type de situation tr`s courant e e e e mettant en jeu des objets (les entit´s) et des relations entre ces objets (la requˆte d’une ressource e e poss´d´e par un autre). e e 1.3.3 Fiabilit´ dans les r´seaux e e Un r´seau est un syst`me de communication dans lequel des sites communiquent entre eux e e soit directement, soit par l’interm´diaire d’autres sites, en envoyant des messages qui circulent e le long de lignes de communication. La repr´sentation de tels r´seaux par des graphes est ici e e ´vidente, les sites et les lignes correspondant trivialement aux sommets et aux arcs. Mais selon e c IFSIC 2004
  • 13.
    1.3. Exemples 13 le genre d’´tudes que l’on souhaite effectuer, le graphe mod´lisant le r´seau devra ˆtre pr´cis´; e e e e e e par exemple : – les communications sont-elles uni- ou bidirectionnelles? – Un message ´mis parvient-il sˆrement ou de mani`re al´atoire ` destination? e u e e a – Les lignes de communication peuvent-elles acheminer une quantit´ illimit´e ou non d’in- e e formations par unit´ de temps? (d´bit d’une ligne) e e etc... Autant de probl`mes, autant de solutions que l’on cherche ` exprimer en termes d’algorithmes e a de graphe. A titre d’exemple, nous montrons deux probl`mes li´s ` des ´tudes de fiabilit´. e e a e e C A B D Fig. 1.4 – r´seau 1 e C F A D B E G Fig. 1.5 – r´seau 2 e Exemple 1. R´sistance aux pannes Dans un r´seau, il peut se produire qu’une ligne de e e communication soit coup´e, ne transmettant plus aucun message. Il en est de mˆme pour un site e e dont la panne peut ˆtre assimil´e ` la coupure de toutes les lignes qui y aboutissent ou qui en e e a partent. Supposons que, dans un r´seau, on achemine des informations d’un sommet A vers un e sommet B, ´ventuellement via des sites interm´diaires servant de relais. De telles informations e e doivent emprunter des chemins allant de A ` B. Ainsi, une information issue de A parviendra ` B si a a et seulement si au moins un chemin est valide (c’est ` dire la s´quence d’arcs qui le constitue ne a e comporte que des arcs non d´t´rior´s). Le probl`me pos´ est alors le suivant : quel est le nombre ee e e e maximum de pannes auquel cet acheminement peut r´sister? Autrement dit, quel est le nombre e maximum de chemins ind´pendants existant entre A et B? (deux chemins sont ind´pendants si e e et seulement si ils sont disjoints au sens des arcs et des sommets interm´diaires). e c IFSIC 2004
  • 14.
    14 Introduction, exemples Dans le r´seau 1, ce nombre est ´gal ` 2 car, s’il n’y a qu’une panne, quelle que soit sa loca- e e a lisation (site ou ligne) il reste toujours un chemin valide. Par contre il existe des configurations a ` 2 pannes (lignes AC et DB par exemple) auxquelles l’acheminement ne r´siste pas. e Dans le r´seau 2, ce nombre est ´gal ` 3 (sites D, F, G). e e a Exemple 2. Routage de fiabilit´ maximale Dans ce mod`le, chaque ligne (arc) est munie e e d’une valeur, ´gale ` la probabilit´ qu’un message ´mis ` l’origine parvienne sans alt´ration ` e a e e a e a l’extr´mit´. Un ´metteur A ´met vers un r´cepteur B, plusieurs parcours d’acheminement ´tant e e e e e e possibles. Si on suppose que les alt´rations des messages sont des ´v`nements ind´pendants, la e e e e probabilit´ de non alt´ration le long d’un chemin est donc ´gale au produit des probabilit´s de e e e e chaque arc le constituant. On cherche donc ` d´terminer un routage de fiabilit´ maximale de A ` a e e a B (c’est ` dire un chemin de A ` B de probabilit´ maximale), repr´sent´ de la mani`re suivante : a a e e e e a ` chaque sommet de ce chemin, on associe le sommet suivant. c IFSIC 2004
  • 15.
    Chapitre 2 Graphes :un mod`le math´matique e e 2.1 D´finitions math´matiques et notations e e 2.1.1 L’objet math´matique e 2.1.1.1 Vision ensembliste D´finition 2.1 Un graphe est un doublet G = (X,Γ), o` e u X = ensemble –en g´n´ral fini– appel´ ensemble des sommets e e e Γ=ensemble de couples (x,y) ∈ X 2 , appel´ ensemble des arcs. e Ainsi, Γ ⊆ X 2 . Par d´finition d’un ensemble, entre deux sommets donn´s il existe au plus un e e arc; on peut toutefois, dans certains cas, consid´rer des multi-graphes dans lesquels plusieurs e arcs distincts existent entre deux sommets, mais il faut alors adopter une d´finition diff´rente e e pour Γ. Exemple : graphe G1 X = {1,2,3,4,5,6,7,8,9} Γ = {(1,2),(1,3),(2,5),(3,3),(3,4),(3,6),(4,2),(4,5),(5,6),(5,7),(5,8),(6,3),(8,7)} 2.1.1.2 Vision fonctionnelle D´finition 2.2 Un graphe est un doublet G = (X,Γ), o` e u X = ensemble des sommets Γ= fonction de X dans l’ensemble 2X des parties de X. Ainsi, ` tout sommet x est associ´ l’ensemble Γ(x) ⊆ X. La notation 2X pour d´signer l’ensemble a e e des parties de X vient du fait que, si X est de cardinal fini |X|, le nombre de sous-ensembles c IFSIC 2004
  • 16.
    16 Graphes : un mod`le math´matique e e (parties) de X est ´gal ` 2|X| . En effet, si X = {x1 ,x2 , . . . ,xn } la construction d’un sous-ensemble e a de X revient ` d´cider, pour chaque xi , si cet ´l´ment fait partie ou non du sous-ensemble. Il y a a e ee donc n d´cisions binaires ind´pendantes, soit 2 × 2 × . . . × 2 = 2n = 2|X| constructions possibles. e e Exemple : graphe G1 X = {1,2,3,4,5,6,7,8,9} Γ(1) = {2,3} ; Γ(2) = {5} ; Γ(3) = {3,4,6} ; Γ(4) = {2,5} ; Γ(5) = {6,7,8} ; Γ(6) = {3} ; Γ(7) = ∅ ; Γ(8) = {7} ; Γ(9) = ∅ 2.1.1.3 Vision relationnelle A tout graphe G = (X,Γ) est associ´e une relation binaire R sur X, et r´ciproquement, par e e l’´quivalence suivante : e xRy ⇐⇒ (x,y) ∈ Γ Nous verrons ult´rieurement qu’` chaque propri´t´ des relations binaires correspond une e a ee propri´t´ du graphe. ee ´ Equivalences et ordres Parmi les relations binaires, celles qui v´rifient les propri´t´s de e ee r´flexivit´ et transitivit´ sont particuli`rement importantes. On les appelle des pr´-ordres, car e e e e e elles elles expriment en particulier les relations de classement avec ex-aequo. Exemple de pr´-ordre Soit E un ensemble d’´l´ments. Chaque ´l´ment x est muni d’une e ee ee estampille enti`re n(x). Il est facile de voir que la relation x ∼ y ⇔ n(x) ≤ n(y) est un pr´- e e ordre. Deux ´l´ments distincts x et y sont ex-aequo si n(x) = n(y). La figure 2.1.a montre le ee graphe d’une telle relation. Un pr´-ordre est sp´cialis´ en ´quivalence ou en ordre selon qu’il est sym´trique ou anti- e e e e e sym´trique. Ainsi, la relation d’ex-aequo est une ´quivalence car elle est sym´trique (la figure e e e 2.1.b en montre le graphe) tandis que la relation x y ⇔ x = y ∨ n(x) < n(y) est un ordre car elle est antisym´trique (figure 2.1.c). Rappellons qun ordre est dit total si pour tout couple e d’´l´ments x et y, on a toujours xRy ou yRx. Un ordre non complet est dit partiel. C’est le cas ee notamment de l’exemple de la figure 2.1.c), car certains ´l´ments ne sont pas comparables. ee 2.1.2 Vocabulaire Pour un arc (x,y) ∈ Γ, x est l’origine et y est l’extr´mit´ de l’arc e e On dit aussi que y est successeur de x, ou que x est pr´d´cesseur de y. e e On note : Γ(x) = {y ∈ X | (x,y) ∈ Γ} l’ensemble des successeurs de x Γ−1 (x) = {z ∈ X | (z,x) ∈ Γ} l’ensemble des pr´d´cesseurs de x e e c IFSIC 2004
  • 17.
    2.1. D´finitions math´matiqueset notations e e 17 ´e El´ment a b c d e f g h i j k Estampille 10 5 4 5 7 7 3 4 5 2 10 j g c b e a a) preordre (sans les consequences transitives ni les boucles de reflexivite) h d f k i j g c b e a b) equivalence (sans les boucles de reflexivite) h d f k i j g c b e a c) ordre (sans les consequences transitives ni les boucles de reflexivite) h d f k i Fig. 2.1 – Pr´-ordre, ´quivalence et ordre e e c IFSIC 2004
  • 18.
    18 Graphes : un mod`le math´matique e e Si A ⊂ X : Γ(A) = Γ(x) x∈A Γ−1 (A) = Γ−1 (x) x∈A 1 d+ (x) = card(Γ(x)) est le degr´ ext´rieur de x e e 2 1 d− (x) = card(Γ−1 (x)) est le degr´ int´rieur de x e e 2 d(x) = d+ (x) + d− (x) est le degr´ de x e 2.1.3 Propri´t´s de graphes e e On montre, pour quelques propri´t´ des relations binaires, une propri´t´ caract´ristique du ee ee e graphe correspondant. La caract´risation de la transitivit´ ne sera abord´e qu’au chapitre 5 e e e (fermeture transitive). Dans ce qui suit, on pose ∆ = {(x,x)|x ∈ X} (ensemble des “boucles”). R´flexivit´ e e ∀x ∈ X : (x,x) ∈ Γ. Boucle sur chaque sommet . ∆⊂Γ Anti-r´flexivit´ e e ∀x ∈ X : (x,x) ∈ Γ. Graphe sans boucle . ∆∩Γ=∅ Sym´trie e ∀x ∈ X,∀y ∈ X : (x,y) ∈ Γ =⇒ (y,x) ∈ Γ. L’existence d’un arc implique l’existence de l’arc oppos´. e Γ=Γ −1 Anti-sym´trie e ∀x ∈ X,∀y ∈ X : (x,y) ∈ Γ ∧ (y,x) ∈ Γ =⇒ x = y . L’existence d’un arc interdit l’existence de l’arc oppos´, sauf e dans le cas d’une boucle. Γ ∩ Γ−1 ⊂ ∆ c IFSIC 2004
  • 19.
    2.2. Notion dechemin 19 2.2 Notion de chemin D´finition 2.3 Un chemin de G est une suite de sommets e [xi1 ,xi2 , . . . ,xik ] telle que : (xi1 ,xi2 ) ∈ Γ, (xi2 ,xi3 ) ∈ Γ, . . . , (xik−1 ,xik ) ∈ Γ xi1 en est l’origine, xik l’extr´mit´ et les xij (2 ≤ j ≤ k − 1), s’ils e e existent, les sommets interm´diaires. e Un chemin allant de x ` y, dont on ne pr´cise pas les sommets interm´diaires, sera not´ : a e e e u = [x ∗ y] Si l’on souhaite d´signer des sommets interm´diaires, on utilisera la notation telle que : e e u = [x1 ∗ xp ∗ xq ∗ xk ] y est alors un descendant de x et x un ascendant de y. La longueur du chemin u , ou |u|, est le nombre d’arcs qui le composent. u · v d´signe la concat´nation de deux chemins tels que e e extr´mit´ de u = origine de v ; on a alors |u · v| = |u| + |v|. e e Un circuit est un chemin dont l’extr´mit´ co¨ e e ıncide avec l’origine. Un chemin (resp. circuit) ´l´mentaire est d´fini par une suite de sommets sans r´p´tition (sauf ee e e e l’origine et l’extr´mit´ pour un circuit) e e 2.3 Repr´sentations de l’objet math´matique e e On s’int´resse aux repr´sentations visuelles, destin´es au traitement ”` la main”. On peut e e e a utiliser : a)- le graphique (diagramme sagittal) Exemple : graphe G1 2 4 9 1 3 5 7 8 6 Fig. 2.2 – Diagramme Sagittal c IFSIC 2004
  • 20.
    20 Graphes : un mod`le math´matique e e Cette repr´sentation pose des probl`mes de topologie (croisements d’arcs) et de lisibilit´ e e e lorsqu’il y a beaucoup de sommets et/ou d’arcs. Leurs attributs sont port´s sur le graphique, e ce qui peut aussi ˆtre source d’ambigu¨ e. Elle n’est adapt´e en g´n´ral que pour les ”petits” e ıt´ e e e graphes (card(X) ≤ 10). b)- un tableau d’attribution des arcs. S’il s’agit de repr´senter l’existence des arcs, ce ta- e bleau sera une matrice bool´enne. e extr´mit´s → e e 1 2 3 4 5 6 7 8 9 origines ↓ 1 1 1 2 1 3 1 1 1 4 1 1 5 1 1 1 6 1 7 8 1 9 c)- dictionnaire des successeurs resp. des pr´d´cesseurs e e 1 2, 3 1 / 2 5 2 1, 4 3 3, 4, 6 3 1, 3, 6 4 2, 5 4 3 5 6, 7, 8 5 2, 4 6 3 6 3, 5 7 / 7 5, 8 8 7 8 5 9 / 9 / Un seul de ces deux tableaux suffit ` sp´cifier compl`tement le graphe. a e e c IFSIC 2004
  • 21.
    Chapitre 3 Aspect algorithmique: un type de donn´es abstrait e Dans ce chapitre on donne d’abord trois exemples de repr´sentation algorithmique. Puis e on fait abstraction des repr´sentations particuli`res en d´finissant le type de donn´es abstrait e e e e GRAPHE. Le probl`me est de repr´senter, ` l’aide de structures de donn´es algorithmiques, le e e a e doublet math´matique (X,Γ) avec Γ ⊆ X 2 . e 3.1 Les sommets et les arcs La d´finition des types Sommet et Arc est utilis´e dans toutes les repr´sentations de graphes. e e e Elle est pr´sent´e ci-dessous. e e 3.1.1 Le type Sommet Tout sommet est identifi´ par un num´ro (entier), qui sera d´sign´ par num. En g´n´ral, on e e e e e e suppose que num≥ 1. La notation algorithmique est la suivante : ENT SOMMET::num ; signifiant que les objets de type SOMMET ont un attribut de nom num et de type entier. L’expression x.num d´signe alors le num´ro du sommet x. e e 3.1.2 Le type Arc Tout arc poss`de deux sommets (son origine et son extr´mit´). e e e SOMMET ARC::ori ; SOMMET ARC::ext ; Si γ est un objet de type arc, l’expression γ .ori (resp. γ .ext) d´signe le sommet origine e (resp. extr´mit´) de l’arc γ, et γ .ori.num (resp. γ .ext.num) le num´ro du sommet origine (resp. e e e extr´mit´) de γ. e e c IFSIC 2004
  • 22.
    22 Aspect algorithmique : un type de donn´es abstrait e i j Dans une repr´sentation graphique on utilisera souvent le sch´ma ci-dessous pour indiquer e e que l’arc dessin´ relie le sommet de num´ro i au sommet de num´ro j. e e e Par commodit´ de notation, on d´signera souvent par (x,y) l’arc γ tel que γ .ori=x et γ .ext=y, e e ou par (i,j) l’arc γ tel que γ .ori.num=i et γ .ext.num=j. 3.2 Trois exemples de repr´sentation concr`te e e Ces exemples utilisent les structures de donn´es suppos´es connues TABLEAU[G], TABLEAU2[G], e e LISTE[G]. La premi`re d´crit les tableaux ` une dimension, la deuxi`me les tableaux ` deux e e a e a dimensions et la troisi`me les listes chaˆ ees. L’identificateur G d´signe le type des ´l´ments e ın´ e ee contenus dans ces structures (type g´n´rique formel). e e 3.2.1 Repr´sentation par tableaux e ENT GRAPHE::nmax ; -- num´ro maximum de sommet. On repr´sente les graphes dont les sommets peuvent ˆtre num´ e e e TABLEAU[BOOL] GRAPHE::vs ; -- G.vs[i] indique l’existence du sommet de num´ro i, 1 ≤ i ≤ G.nmax e TABLEAU2[BOOL] GRAPHE::m ; -- G.m[i,j] indique l’existence de l’arc (i,j), 1 ≤ i, j ≤ G.nmax On a toujours l’implication ∀i ∀j : G.m[i,j] ⇒ G.vs[i] ∧ G.vs[j] (un arc ne peut relier que des sommets existants). Dans cette repr´sentation de G = (X,Γ), les ensembles X et Γ sont repr´sent´s de la mani`re e e e e suivante : x ∈ X ⇔ G.vs[x.num] (x,y) ∈ Γ ⇔ G.m[x.num,y.num] Exemple : Graphe G1 nmax = 10 ; 1 2 3 4 5 6 7 8 9 10 vs v v v v v v v v v f c IFSIC 2004
  • 23.
    3.2. Trois exemplesde repr´sentation concr`te e e 23 1 2 3 4 5 6 7 8 9 10 1 v v 2 v 3 v v v 4 v v m 5 v v v les cases vides ont 6 v des valeurs faux 7 8 v 9 10 3.2.2 Repr´sentation par tableaux et listes e Les attributs nmax et vs sont d´finis comme pr´c´demment. e e e TABLEAU[LISTE[SOMMET]] GRAPHE::ts ; -- G.ts[i] d´signe la liste des successeurs du sommet e de num´ro i, 1 ≤ i ≤ G.nmax. e On a toujours : si G.vs[i] est faux, alors G.ts[i] est n´cessairement vide (en fait, cette liste e n’est mˆme pas d´finie). Dans cette repr´sentation de G = (X,Γ), les ensembles X et Γ sont e e e repr´sent´s de la mani`re suivante : e e e x ∈ X ⇔ G.vs[x.num] (x,y) ∈ Γ ⇔ G.ts[x.num].contient(y) Exemple : Graphe G1 nmax = 10 ; 1 2 3 4 5 6 7 8 9 10 vs v v v v v v v v v f 3.2.3 Repr´sentation d´centralis´e par listes e e e Le type SOMMET est enrichi : chaque sommet a maintenant comme attribut la liste de ses successeurs. Le graphe se r´duit alors ` la liste de ses sommets. e a ENT SOMMET::num ; -- comme pr´c´demment e e LISTE[SOMMET] SOMMET::ls ; -- x.ls est la liste des sommets successeurs de x. LISTE[SOMMET] GRAPHE::lsom ; -- G.lsom est la liste des sommets du graphe G. Dans cette repr´sentation du graphe G = (X,Γ), les ensembles X et Γ sont repr´sent´s de la e e e mani`re suivante : e x ∈ X ⇔ G.lsom.contient(x) c IFSIC 2004
  • 24.
    24 Aspect algorithmique : un type de donn´es abstrait e ts 1 [ 2; 3 ] 2 [5] 3 [ 3; 4; 6 ] 4 [ 2; 5 ] 5 [ 6; 7; 8 ] 6 [3] 7 [] 8 [7 ] 9 [9] 10 (x,y) ∈ Γ ⇔ G.lsom.contient(x) et G.lsom.contient(y) et x.ls.contient(y) lsom 1 2 3 4 5 6 7 8 9 G1 x.ls [ 2; 3 ] [5] [ 3; 4; 6 ] [ 2; 5 ] [ 6; 7; 8 ] 3 ] [ [] [7 ] [9] Exemple : Graphe G1 3.3 Le type abstrait Graphe : les m´thodes e La plupart des algorithmes de r´solution de probl`mes mod´lis´s par des graphes peuvent ˆtre e e e e e d´crits ` l’aide de traitements plus ou moins ´l´mentaires sur le graphe mod´lisant le probl`me. e a ee e e Cette description –enchaˆ ınement contrˆl´ des actions– est ´videmment, ` un certain niveau, oe e a intrins`que, c’est ` dire ind´pendante de la repr´sentation choisie pour le graphe. e a e e Par exemple, l’algorithme de saisie ci-apr`s construit un graphe ` partir de donn´es lues dans e a e un fichier. Le format de pr´sentation des donn´es est le suivant : e e – S´quence des arcs, chaque arc ´tant donn´ comme un couple d’entiers (num´ro d’origine, e e e e num´ro d’extr´mit´), termin´e par (0,0); e e e e – s´quence des num´ros des sommets isol´s, termin´e par 0. e e e e Exprim´ en faisant abstraction d’une repr´sentation concr`te particuli`re, on obtient le texte: e e e e GRAPHE construction c’est local ENT i, j ; c IFSIC 2004
  • 25.
    3.3. Le typeabstrait Graphe : les m´thodes e 25 GRAPHE G ; d´but e -- initialisation au graphe vide G. creer ; -- lecture de la liste des arcs depuis i ← lire ; j ← lire jusqu a i=0 et j=0 faire G. ajoutarc(i, j) ; i ← lire ; j ← lire fait ; -- lecture de la liste des sommets isol´s e depuis i ← lire jusqua i=0 faire G. ajout sommet(i) ; i ← lire fait ; Result ← G -- Result est une variable exprimant le r´sultat d’une fonction e fin L’algorithme, pr´sent´ sous cette forme, peut s’appliquer ` n’importe quelle repr´sentation e e a e interne du graphe : il suffit, dans chaque cas, de ”traduire” convenablement les op´rations in- e diqu´s en italique. e Dans ce texte, le type GRAPHE n’est pas d´fini concr`tement : on l’appelle type abstrait. e e Cela signifie, qu’` ce niveau d’expression, on n’a pas besoin d’en savoir plus sur les structures a de donn´es qui seront effectivement utilis´es pour repr´senter concr`tement l’objet G. e e e e Les traitements ´l´mentaires en italique ont ´t´ d´nomm´s. On les appelle des m´thodes du ee ee e e e type abstrait GRAPHE, et tout ce que l’on a besoin de connaˆıtre est leur s´mantique. Ainsi, on e aura d´fini une fois pour toutes que : e creer : proc´dure qui initialise le graphe courant au graphe vide (∅,∅). e ajoutarc(ENT i; ENT j) : ajout au graphe courant de l’arc (i, j) (et au besoin des sommets de num´ro i et j) e ajout sommet(ENT i) : ajout au graphe courant du sommet de num´ro i e La liste compl`te des acc`s, avec leur s´mantique, est donn´e en Annexe. e e e e On peut poursuivre cette d´marche. En effet, les structures de donn´es utilis´s dans les e e e repr´sentations ”concr`tes” des graphes peuvent ˆtre elles aussi consid´r´es comme des types de e e e ee donn´es abstraits (c’est le cas par exemple du type g´n´rique LISTE[T]). Ces types de donn´es e e e e abstraits peuvent ` leur tour ˆtre manipul´s ` travers leurs m´thodes, et mis en oeuvre selon a e e a e diverses repr´sentations concr`tes, etc. Dans le cas du type LISTE[T], par exemple, la m´thode e e e c IFSIC 2004
  • 26.
    26 Aspect algorithmique : un type de donn´es abstrait e BOOL contient(T x) est telle que .contient(x) renvoie vrai si et seulement si la liste contient un ´l´ment de type T, de valeur x. ee Nous ne d´taillerons pas ici ces repr´sentations, qui sont ´tudi´es dans les cours de tech- e e e e niques de programmation ou structures de donn´es. Il faut n´anmoins mettre l’accent sur le e e fait essentiel que la d´marche est absolument identique dans le cas des graphes, des listes, etc... : e s´parer la partie intrins`que d’un algorithme des d´tails de mise en oeuvre, ou d’impl´mentation. e e e e On peut toujours d´finir de nouveaux niveaux d’abstraction, ` condition de bien pr´ciser les e a e types abstraits manipul´s et leurs m´thodes. Remarquons enfin que les types pr´d´finis, mˆme e e e e e ´l´mentaires (r´el, entier, caract`re, bool´en) utilis´s dans les langages de haut niveau sont ee e e e e eux aussi des types abstraits par rapport ` la machine, leur impl´mentation concr`te en m´moire a e e e d´pendant du mat´riel utilis´ ; les m´thodes sont alors, dans un langage donn´, les op´rations e e e e e e pr´d´finies du langage telles que : lecture/´criture, op´rations arithm´tiques ou logiques, com- e e e e e paraisons, etc... Cette d´marche de programmation par abstractions successives est r´alis´e, notamment, e e e dans les langages dits de “programmation par objets”, appel´s encore, improprement, “langages e orient´s objets”. Citons, parmi les plus connus, Eiffel, Java, C++, dans une moindre mesure e Turbo-Pascal (` partir de la version 6) ou encore, plus anciens, Simula et Smalltalk. Dans a ces langages, les types sont d´crits dans des classes, contenant tout ` la fois les valeurs des objets e a du type (appel´s attributs) et les m´thodes permettant de manipuler ces valeurs (en lecture ou e e en ´criture). Nous renvoyons, pour plus de d´tail, aux cours de programmation s’appuyant sur e e la d´marche par objets. Dans la suite de ce polycopi´, les notations utilis´es dans la description e e e des algorithmes seront proches de celles utilis´es dans de tels langages, sans pour autant ˆtre li´e e e e a ` l’un d’entre eux en particulier. Le . est l’op´rateur d’application de m´thode ou d’attribut ` e e a l’objet d´sign´. Par exemple, G.ajout arc(i,j) est une instruction, signifiant que l’on applique e e l’op´ration ajout arc, avec les deux param`tres effectifs i et j ` l’objet de type GRAPHE d´sign´ par e e a e e G. De mˆme, G.valid arc(i,j) est une expression dont l’´valuation renvoie une valeur bool´enne, e e e valant vrai si et seulement si l’objet de type GRAPHE d´sign´ par G poss`de l’arc (i, j). e e e 3.4 Notations L’approche objet interdit en g´n´ral d’acc´der directement aux attributs d’un objet distant, e e e que ce soit en ´criture (c’est-`-dire pour affecter directement sa valeur) ou mˆme en lecture e a e (pour obtenir sa valeur). Dans ce cas, des ´critures telles que e x.att := valeur (affectation ”` distance”, c’est-`-dire via x, de l’attribut att), ou mˆme a a e v:=x.att (lecture ”` distance”, c’est-`-dire via x de l’attribut att) a a sont souvent interdites; de telles op´rations ne peuvent en effet ˆtre r´alis´es que par des e e e e m´thodes (proc´dures ou fonctions) ´quipant le type de l’objet d´sign´ par x. e e e e e Par exemple, avec la d´claration e REEL SOMMET::lambda ; la mise ` jour de l’attribut lambda d’un objet de type SOMMET d´sign´ par x ne pourra se faire a e e que si le type SOMMET poss`de une m´thode e e c IFSIC 2004
  • 27.
    3.4. Notations 27 affecter lambda(REEL v) post lambda=v qui effectue, de mani`re interne, l’affectation lambda:=v. L’instruction externe r´alisant une telle e e mise ` jour s’´crira alors : a e x.affecter lambda(4.18) Toutefois, afin d’all´ger l’´criture des algorithmes et d’en faciliter la lecture, nous utiliserons e e le symbole ← ayant la signification suivante: x.lambda ←4.18 suppose que le type SOMMET est ´quip´ d’une m´thode r´alisant cette affecta- e e e e tion. L’´criture e ci-dessus est alors ´quivalente e ` a l’instruction d’appel x.affecter lambda(4.18). Dans un mˆme souci de simplification, une expression telle x.lambda e d´livre la valeur de l’attribut lambda de l’objet d´sign´ par x, en supposant que le type de x est e e e ´quip´ d’une m´thode permettant cette lecture (certains langages, comme Eiffel, permettent de e e e telles lectures directes, ` condition que l’attribut soit ”exportable”). a Enfin, toujours pour all´ger le formalisme, si a et b d´signent deux objets de mˆme type, e e e l’´criture a ←b d´note l’instruction de copie de l’objet d´sign´ par b dans l’objet d´sign´ par a e e e e e e (affectation de valeurs). Finalement, dans les parties “math´matiques” (propri´t´s, d´monstrations, etc.) nous utilise- e ee e rons des notations fonctionnelles plus classiques telles que λ(x) ou pred(x) (au lieu des notations “algorithmiques” x.lambda ou x.pred). D’une mani`re g´n´rale, x d´signant un objet d’un type e e e e C, et att un attribut de ce type, les deux notations att(x) et x.att seront consid´r´es comme ee ayant la mˆme signification. e c IFSIC 2004
  • 28.
    28 Aspect algorithmique : un type de donn´es abstrait e c IFSIC 2004
  • 29.
    Chapitre 4 Relations etop´rateurs entre e graphes Dans ce qui suit, nous d´signerons par G(X) l’ensemble des graphes ayant X comme ensemble e de sommets. Sur G(X), nous pouvons consid´rer un certain nombre de relations ou op´rations; dans ce e e chapitre, nous en ´tudions quelques unes. On note : e G1 = (X,Γ1 ),G2 = (X,Γ2 ) deux ´l´ments de G(X). ee 4.1 Relation d’ordre La relation G1 G2 ⇐⇒ Γ1 ⊂ Γ2 qui se lit : “G1 est un graphe partiel de G2 ” est une relation d’ordre partiel sur G(X). Pour cette relation, G(X) a un minimum : (X,∅) maximum : (X,X 2 ) Toute partie de G(X) poss`de d’ailleurs au moins un minorant et un majorant, comme c’est e le cas de toute partie finie d’un ensemble ordonn´. e 4.2 Union G1 ∪ G2 = (X,Γ1 ∪ Γ2 ) Cet op´rateur poss`de toutes les propri´t´s de l’union ensembliste. e e ee c IFSIC 2004
  • 30.
    30 Relations et op´rateurs entre graphes e 4.3 Composition 4.3.1 D´finition e G3 = G1 ◦ G2 = (X,Γ3 ) est d´fini par : e Γ3 = {(x,y) | ∃z ∈ X : (x,z) ∈ Γ1 ∧ (z,y) ∈ Γ2 } L’op´rateur ◦ n’est pas commutatif. Toutefois, il est associatif et poss`de un ´l´ment neutre, e e ee a ` savoir le graphe ”diagonal” : D = (X,∆) o` ∆ = {(x,x) | x ∈ X} u En effet, ∀G ∈ G(X) : G ◦ D = D ◦ G = G. Par abus de notation, on ´crira parfois e Γ3 = Γ1 ◦ Γ2 lorsque G3 = G1 ◦ G2 Proposition 4.1 ◦ est distributif par rapport ` ∪ a Autrement dit : ∀G1 ,G2 ,G3 ∈ G(X) : (G1 ∪ G2 ) ◦ G3 = (G1 ◦ G3 ) ∪ (G2 ◦ G3 ) G1 ◦ (G2 ∪ G3 ) = (G1 ◦ G2 ) ∪ (G1 ◦ G3 ) (D´monstration laiss´e au lecteur). e e Par contre, ∪ n’est pas distributif par rapport ` ◦ : a (G1 ◦ G2 ) ∪ G3 = (G1 ∪ G3 ) ◦ (G2 ∪ G3 ) contre-exemple G1 = G2 2 2 G3 = D 1 1 G1 ◦ G2 = (X,∅) (G1 ◦ G2 ) ∪ G3 = D 3 3 D’autre part : G1=G2 D (G1 ∪ D) ◦ (G2 ∪ D) = G1 ∪ D Proposition 4.2 L’op´rateur ◦ est compatible ` gauche et ` droite avec e a a la relation d’ordre d´finie en 3.1 e c IFSIC 2004
  • 31.
    4.3. Composition 31 D´monstration : Cet ´nonc´ signifie que e e e ∀G1 ,G2 ,G3 ∈ G(X) : G1 G2 ⇒ (G1 ◦ G3 G2 ◦ G3 ) ∧ (G3 ◦ G1 G3 ◦ G2 ) Si Gi = (X,Γi ) (i = 1,2,3), on a : (x,y) ∈ Γ1 ◦ Γ3 ⇒ ∃z ∈ X : (x,z) ∈ Γ1 ∧ (z,y) ∈ Γ3 ⇒ ∃z ∈ X : (x,z) ∈ Γ2 ∧ (z,y) ∈ Γ3 ⇒ (x,y) ∈ Γ2 ◦ Γ3 ce qui montre que G1 ◦ G3 G2 ◦ G3 . La deuxi`me in´galit´ se montre de mani`re analogue.P e e e e 4.3.2 Algorithme Nous donnons ci-dessous un algorithme de construction de G3 = G1 ◦ G2 , en supposant pour simplifier que X = [1..n] 4.3.2.1 Analyse Pour tout couple (x,y) ∈ X 2 , il faut d´terminer si (x,y) est ou non un arc de G3 . Par e d´finition, e (x,y) ∈ Γ3 ⇐⇒ ∃z (1 ≤ z ≤ n) ∧ ((x,z) ∈ Γ1 ) ∧ ((z,y) ∈ Γ2 ) Notons P(z) la proposition : ((x,z) ∈ Γ1 ) ∧ ((z,y) ∈ Γ2 ). Il s’agit d’´valuer le pr´dicat : e e ∃t 1 ≤ t ≤ n : P (t). Cette ´valuation est mise en œuvre par un calcul it´ratif. La figure e e ci-dessous en d´termine l’invariant : e zone deja examinee zone non encore examinee 1 z z+ 1 n c’est-`-dire, plus formellement : a I ≡ (0 ≤ z ≤ n) ∧ (b = ∃t 1 ≤ t ≤ z : P (t)) Le calcul sera termin´ lorsque : e (z = n) ∨ b et, lorsque ceci se produit : – si b alors (∃t 1 ≤ t ≤ z : P (t)) ∧ (z ≤ n), c’est-`-dire (∃t 1 ≤ t ≤ n : P (t)) (*succes*) a – si ¬b alors (z = n) ∧ ¬(∃t 1 ≤ t ≤ n : P (t)) (* ´chec *) e Le r´sultat est donc ´gal ` b e e a Si le calcul n’est pas termin´, on progresse en mettant ` jour les variables z et b de la mani`re e a e suivante : z←z + 1 ; b←P (z) c IFSIC 2004
  • 32.
    32 Relations et op´rateurs entre graphes e Les valeurs initiales doivent satisfaire l’invariant ; par exemple, on peut prendre : z←0 ; b←f alse De cette analyse d´coule le texte de l’algorithme. e 4.3.2.2 Texte de l’algorithme Il est donn´ page 32. e ALGORITHME DE CONSTRUCTION DE G1◦G2 GRAPHE composer(GRAPHE G1, G2) c’est -- pr´ : G1 et G2 ont le mˆme ensemble de sommets : e e -- G1.ens som=G2.ens som={1,...,n} local SOMMET x,y,z; BOOL b; d´but e Result.creer; -- Result est une variable implicite de type GRAPHE, exprimant le r´sultat de la fonction e pour tout x de G1.ens som pour tout y de G1.ens som depuis z ← 0 ; b ← false jusqua z ≥ n ou b faire z ← z+1; b ← G1.validarc(x,z) et G2.validarc(z,y) fait; si b alors Result.ajoutarc(x,y) fsi fpour fpour fin 4.3.3 Complexit´ e La boucle interne depuis ... jqa comporte au plus n pas , et elle est ex´cut´e exactement n2 e e fois. La complexit´ maximum est donc : e 2n3 acc`s validarc e n3 op´rations et e n2 acc`s ajoutarc e c IFSIC 2004
  • 33.
    4.4. Puissances d’ungraphe 33 On dit que c’est un algorithme en O(n3 ), en termes d’acc`s validarc. e Remarques 1) La complexit´ de mise en œuvre de chacun des acc`s d´pend ´videmment de la repr´sentation e e e e e choisie pour chacun des 3 graphes G1, G2, Result. 2) Si les graphes sont tous les trois repr´sent´s par leur matrice bool´enne, alors il est facile e e e de voir que M3 = M1 · M2 o` le · d´signe le produit matriciel bool´en de deux matrices : u e e n ∀1 ≤ i,j ≤ n : m3ij = (m1ik ∧ m2kj ) k=1 4.4 Puissances d’un graphe On d´finit par r´currence sur p ∈ N le graphe G[p] = (X,Γ[p] ) de la mani`re suivante : e e e D´finition 4.3 e G[0] = D ∀p ≥ 1 : G[p] = G[p−1] ◦ G = G ◦ G[p−1] propri´t´s : G[k] ◦ G[l] = G[k+l] e e (G[k] )[l] = G[kl] (identiques aux puissances des nombres r´els) e Nous allons interpr´ter les puissances d’un graphe. e Proposition 4.4 Soit G[p] = (X,Γ[p] ) la puissance peme d’un graphe ` G = (X,Γ). Alors, (x,y) ∈ Γ[p] si et seulement si il existe, dans G, un chemin de longueur p, allant de x ` y (ce chemin est un circuit si x = a y). D´monstration Par r´currence sur p : e e – Pour p= 1, le r´sultat est ´vident : G[1] = (X,Γ) et les arcs sont les chemins de longueur 1. e e – Supposons d´montr´ jusqu’` p-1. e e a (x,y) ∈ Γ[p] = Γ[p−1] ◦ Γ ⇐⇒ ∃z ∈ X : (x,z) ∈ Γ[p−1] ∧ (z,y) ∈ Γ c IFSIC 2004
  • 34.
    34 Relations et op´rateurs entre graphes e ⇐⇒ ∃z ∈ X : ∃u = [x ∗ z], | u |= p − 1 ∧ ∃v = [zy], | v |= 1 ⇐⇒ ∃w = u.v = [x ∗ y], | w |=| u | + | v |= p ce qui d´montre le r´sultat pour p P e e 4.5 Graphe transpos´ e D´finition 4.5 Le graphe transpos´ de G = (X,Γ) est : e e Gt = (X,Γt ) avec (x,y) ∈ Γt ⇐⇒ (y,x) ∈ Γ C’est donc le graphe d´duit de G par inversion du sens de tous les arcs. On utilise parfois e la notation Γ −1 , lorsqu’on veut exprimer le fait que l’application multivoque associ´e ` Gt e a est l’inverse de l’application multivoque Γ li´e ` G. Remarquons toutefois que les relations e a Γ ◦ Γ−1 = ∆ ou Γ−1 ◦ Γ = ∆ ne sont en g´n´ral pas v´rifi´es. Ainsi, Γ−1 ne doit pas ˆtre e e e e e consid´r´ comme la ”puissance moins un” du graphe, mais bien comme une notation d´signant ee e l’ensemble des arcs du graphe transpos´.e 4.6 Sous-graphe Dans ce paragraphe, les graphes consid´r´s ne sont pas tous construits sur le mˆme ensemble ee e de sommets. En effet, si nous avons un graphe G = (X,Γ), certaines op´rations sur G peuvent e amener ` supprimer des sommets. Or, si un sommet est ˆt´ du graphe, il va de soi que les a oe ´ventuels arcs adjacents ` X doivent aussi ˆtre supprim´s : la suppression d’un objet entraˆ la e a e e ıne suppression de toutes les relations relatives ` cet objet ! Cette remarque pr´liminaire conduit ` a e a la d´finition suivante : e D´finition 4.6 Soit G = (X,Γ) ∈ G(X) et A ⊂ X. e Le sous-graphe engendr´ par A est d´fini par : e e GA = (A,ΓA ) ∈ G(A),avec ΓA = {(x,y) | x ∈ A,y ∈ A,(x,y) ∈ Γ} On peut donner un algorithme de construction du sous-graphe engendr´ par A : e sous graphe(ENS[SOMMET] A) c’est local SOMMET z c IFSIC 2004
  • 35.
    4.6. Sous-graphe 35 d´but e pourtout z de ens som faire si z ∈ A alors oter sommet(z) fsi fpourtout fin c IFSIC 2004
  • 36.
    36 Relations et op´rateurs entre graphes e c IFSIC 2004
  • 37.
    Chapitre 5 Fermeture transitive Le probl`me ´tudi´ dans ce chapitre est celui de l’existence des chemins entre tous les couples e e e de sommets. Plus pr´cis´ment : e e ´ Etant donn´ un graphe G = (X,Γ), construire le graphe G+ = (X,Γ+ ) tel que (x,y) ∈ Γ+ ⇔ e il existe un chemin de G allant de x ` y. G+ s’appelle la fermeture transitive de G. a Nous allons voir successivement les bases th´oriques, puis deux algorithmes permettant de e r´soudre le probl`me, et enfin des exemples d’application. e e 5.1 Retour sur la transitivit´ e Un graphe est transitif si la relation binaire qui lui est associ´e est transitive. En d’autres e termes : ∀x,y,z ∈ X : (x,y) ∈ Γ ∧ (y,z) ∈ Γ =⇒ (x,z) ∈ Γ. Voici une propri´t´ caract´ristique des graphes transitifs: ee e Proposition 5.1 Un graphe G est transitif si et seulement si tout che- min de longueur deux est sous-tendu par un arc, c’est-`-dire : Γ[2] ⊂ Γ a D´monstration e 1. Supposons G transitif. G transitif ⇒ ∀x∀y∀z ((x,y) ∈ Γ ∧ (y,z) ∈ Γ ⇒ (x,z) ∈ Γ) ⇒ ∀x∀z (∃y ((x,y) ∈ Γ ∧ (y,z) ∈ Γ) ⇒ (x,z) ∈ Γ) ⇒ ∀x∀z (x,z) ∈ Γ[2] ⇒ (x,z) ∈ Γ ⇒ Γ[2] ⊆ Γ 2. R´ciproquement, supposons Γ[2] ⊆ Γ. e (x,z) ∈ Γ ∧ (z,y) ∈ Γ ⇒ (x,y) ∈ Γ[2] ⇒ (x,y) ∈ Γ P ⇒ G est transitif Cette propri´t´ admet un corollaire ´vident: ee e c IFSIC 2004
  • 38.
    38 Fermeture transitive Corollaire 5.2 Un graphe G est transitif si et seulement si tout chemin est sous-tendu par un arc, c’est-`-dire : ∀k ≥ 2 : Γ[k] ⊂ Γ a D´monstration Par r´currence sur k : e e – vrai pour k = 2, d’apr`s la proposition pr´c´dente. e e e – Hypoth`se de r´currence : Γ e e [k−1] ⊆ Γ. Cela signifie: G[k−1] G. On a alors : [k] [k−1] G = G ◦G G ◦ G(hypoth`se de r´currence et proposition 4.2) e e G[2] G (proposition 5.1) P L’interpr´tation “concr`te” de ce corollaire est la suivante : dans un graphe transitif, la notion e e de chemin se confond avec la notion d’arc. Nous allons maintenant aborder les caract´risations et les algorithmes de calcul de la fermeture e transitive. Le terme de fermeture transitive provient du fait que, d’une part, G+ est transitif (par construction!), et d’autre part, G+ est le plus petit graphe transitif sup´rieur ou ´gal ` G e e a (au sens de la relation ). Plus pr´cis´ment : e e – G + est transitif, – G G+ – Si H est transitif et G H, alors G+ H Intuitivement, on obtient G+ ` partir de G en rajoutant “juste ce qu’il faut” d’arcs pour rendre a le graphe transitif. La d´monstration de ces propri´t´s ne pr´sente aucune difficult´. Elle est e ee e e laiss´e en exercice au lecteur. e 5.2 Caract´risation du graphe G+ e Proposition 5.3 G+ = G ∪ G[2] ∪ . . . ∪ G[k] ∪ . . . D´monstration Posons G+ = (X,Γ+ ) et, ∀k ≥ 1, G[k] = (X,Γ[k] ). Par d´finition, e e (x,y) ∈ Γ+ ⇔ ∃u = [x y] dans G ⇔ (x,y) ∈ Γ[k] ,o` k = |u| u ⇔ (x,y) ∈ Γ ∪ Γ[2] ∪ . . . ∪ Γ[k] ∪ . . . P La proposition suivante montre que le probl`me se r´duit ` l’existence des chemins ´l´mentaires. e e a ee c IFSIC 2004
  • 39.
    5.2. Caract´risation dugraphe G+ e 39 Proposition 5.4 Les deux propositions suivantes sont ´quivalentes : e i) Dans le graphe G, il existe un chemin de x ` y, a ii) Dans le graphe G, il existe un chemin ´l´mentaire de x ` y ee a e ´ D´monstration ii) ⇒ i). Evident puisque tout chemin ´l´mentaire est un chemin. ee i) ⇒ ii). Supposons qu’il existe un chemin u = [x ∗ y]. S’il est ´l´mentaire, la d´monstration est ee e termin´e; sinon, la suite de sommets le d´finissant comporte au moins une r´p´tition : e e e e u = [x ∗ z ∗ z ∗ y] (´ventuellement, z = x ou z = y) e On a donc : u = u1 · u2 · u3 avec u1 = [x ∗ z],u2 = [z ∗ z],u3 = [z ∗ y] et u’ = u1 · u3 est un chemin de x ` y, obtenu ` a a partir de u en ”court-circuitant” le circuit [z ∗ z]. En it´rant ce raisonnement tant qu’il y a des e r´p´titions (circuits contenus dans le chemin), on obtient n´cessairement un chemin ´l´mentaire e e e ee reliant x ` y. a P Des deux propositions pr´c´dentes r´sulte la caract´risation suivante : e e e e Corollaire 5.5 Soit G = (X,Γ) et n =| X |. On a : G+ = G ∪ G[2] ∪ . . . ∪ G[n] D´monstration Le r´sultat d´coule des deux propositions pr´c´dentes et du fait que tout e e e e e chemin ´l´mentaire est de longueur ≤ n (et mˆme ≤ n − 1 si ce n’est pas un circuit). ee e P On peut encore ˆtre plus pr´cis : e e Proposition 5.6 Soit k la longueur maximum des chemins ´l´mentaires de G. Alors : ee i) k ≤ n, k k+1 ii) G[j] = G[j] j=1 j=1 iii) G+ =G ∪ G[2] ∪ . . . ∪ G[k] D´monstration i) : par d´finition des chemins ´l´mentaires (longueur ≤ n) e e ee k+1 ii) Si (x,y) ∈ G[j] alors il existe dans G un chemin u de longueur ≤ k + 1, allant de x ` y. a j=1 D’apr`s la proposition 5.4, il existe dans G un chemin ´l´mentaire allant de x ` y; autrement dit, e ee a c IFSIC 2004
  • 40.
    40 Fermeture transitive k k k+1 [j] [j] il existe un entier ≤ k tel que (x,y) ∈ G[ ] . Comme G[ ] ⊆ G on a bien G = G[j] . j=1 j=1 j=1 iii) Imm´diat D’apr`s le point pr´c´dent et le corollaire 5.5 e e e e P 5.3 Algorithme des puissances L’algorithme des puissances calcule G+ en se basant sur la proposition 5.6. Il est construit en maintenant invariante la proposition ci-dessous : (G+ = G ∪ ... ∪ G[k] ) ∧ (H = G ∪ ... ∪ G[k−1] ) ∧ (1 ≤ k ≤ n) Le calcul sera donc termin´ lorsque H = G+ e Si le calcul n’est pas termin´, la progression consiste ` mettre ` jour les variables H,G+ : e a a H ← G+ ; G+ ← G ∪ (G+ ◦ G) En effet : k si G+ = G[j] alors j=1 k+1 G+ ◦ G = G[j] (distributivit´ de ◦ par rapport ` ∪) d’o` e a u j=2 k+1 G ∪ (G+ ◦ G) = G[j] j=1 Les valeurs initiales doivent v´rifier l’invariant et ˆtre faciles ` ´valuer en fonction des e e a e donn´es : e G+ ← G, H arbitraire (mais = G+ , par exemple : H ← (∅,∅)). Le texte de l’algorithme en d´coule. e 5.3.1 Texte de l’algorithme Il est donn´ page 41 e c IFSIC 2004
  • 41.
    5.4. Algorithme deRoy-Warshall 41 FERMETURE TRANSITIVE : PUISSANCES GRAPHE fermeture-transitive-puissance(GRAPHE G) c’est local GRAPHE H d´but e depuis Result ← G ; H.creer jusqua H=Result faire H ← Result ; Result ← G ∪(G ◦ Result) fait fin 5.3.2 Complexit´ e Au maximum, n pas d’it´ration sont effectu´s. A chaque pas, sont effectu´s : e e e • 2 affectations de graphe, en O(n2 ) acc`s ´l´mentaires, e ee • 1 comparaison de 2 graphes, en O(n2 ) acc`s ´l´mentaires, e ee • 1 op´ration ◦, e en O(n3 ) acc`s ´l´mentaires (chapitre 4, section4.3.3) e ee • 1 op´ration ∪, e en O(n2 ) acc`s ´l´mentaires. e ee C’est donc un algorithme en O(n4 ) acc`s ´l´mentaires. e ee De plus, l’espace utilis´ est de 3 graphes. e 5.4 Algorithme de Roy-Warshall Par rapport ` l’ algorithme pr´c´dent, bas´ sur les calculs de puissances, celui-ci pr´sente les a e e e e avantages suivants : – sa complexit´ est en O(n3 ) acc`s, e e – l’espace utilis´ n’est que de 1 graphe, e – il offre la possibilit´ de calculer des routages, c’est ` dire d’obtenir le trac´ de chemins e a e ´l´mentaires. ee 5.4.1 Principe de l’algorithme L’algorithme est bas´ sur l’op´ration ´l´mentaire Θ suivante : e e ee c IFSIC 2004
  • 42.
    42 Fermeture transitive D´finition 5.7 Soit x ∈ X. Si G = (X,Γ) ∈ G(X), alors Θx (G) ∈ e G(X) a pour ensemble d’arcs : Θx (Γ) = Γ ∪ {(y,z) | (y,x) ∈ Γ ∧ (x,z) ∈ Γ} Autrement dit, Θx enrichit le graphe en lui ajoutant les arcs reliant les pr´d´cesseurs de x aux e e successeurs de x. L’algorithme est bas´ sur une nouvelle caract´risation de la fermeture transitive : e e G+ = Θx (G) x∈X o` u d´signe le produit (composition) des op´rations Θx , c’est ` dire, si X = {1,2, . . . ,n} e e a est une num´rotation des sommets : e G+ = Θn (Θn−1 (. . . (Θ1 (G)) . . .)) Lemme 5.8 Soit Vi l’ensemble des couples (y,z) ∈ X 2 tels qu’il existe dans G un chemin ´l´mentaire de longueur 1 ou dont tous les sommets ee interm´diaires sont de num´ro inf´rieur ou ´gal ` i. On a alors : e e e e a ∀1 ≤ i ≤ n : Θi · Θi−1 · . . . · Θ1 (Γ) = Vi D´monstration Par r´currence sur i : e e • Pour i= 1, Θ1 (Γ) = Γ ∪ {(y,z) | (y,1) ∈ Γ ∧ (1,z) ∈ Γ} Γ est l’ensemble des couples reli´s par un chemin de longueur 1, {(y,z) | (y,1) ∈ Γ∧(1,z) ∈ Γ} est e l’ensemble des couples reli´s par un chemin ´l´mentaire de longueur 2 de sommet interm´diaire e ee e num´ro 1. La propri´t´ est donc v´rifi´e. e ee e e • Supposons la vraie pour i-1 et montrons qu’elle est vraie pour i. Hypoth`se : Θi−1 · . . . · Θ1 (Γ) = Vi−1 e Il faut montrer : Θi · Θi−1 · . . . · Θ1 (Γ) = Vi . D’apr`s l’hypoth`se de r´currence, cela revient ` montrer que :Θi (Vi−1 ) = Vi . e e e a Mais, par d´finition de Θi : e Θi (Vi−1 ) = Vi−1 ∪ {(y,z) | (y,i) ∈ Vi−1 ∧ (i,z) ∈ Vi−1 } Soit (y,z) ∈ Θi (Vi−1 ). Il y a deux possibilit´s: e 1. Si (y,z) ∈ Vi−1 alors (y,z) ∈ Vi (car Vi−1 ⊆ Vi ) c IFSIC 2004
  • 43.
    5.4. Algorithme deRoy-Warshall 43 2. Si (y,i) ∈ Vi−1 ∧ (i,z) ∈ Vi−1 alors il existe un chemin de y ` z dont tous les sommets a interm´diaires sont de num´ro inf´rieur ou ´gal ` i, donc (proposition 5.4) il existe un e e e e a chemin ´l´mentaire de y ` z dont tous les sommets interm´diaires sont de num´ro inf´rieur ee a e e e ou ´gal ` i, c’est-`-dire (y,z) ∈ Vi . e a a On a donc montr´ Θi (Vi−1 ) ⊆ Vi . e R´ciproquement, soit (y,z) ∈ Vi . Il existe donc un chemin ´l´mentaire u de y ` z, dont tous les e ee a sommets interm´diaires sont de num´ro inf´rieur ou ´gal ` i. Il y a deux cas : e e e e a 1. u ne passe pas par le sommet i. Dans ce cas, tous les sommets interm´diaires sont de e num´ro inf´rieur ou ´gal ` i − 1 donc (y,z) ∈ Vi−1 ⊆ Θi (Vi−1 ) e e e a 2. u passe par le sommet i. Comme il est ´l´mentaire, il se d´compose en deux chemins u1 ee e et u2 , avec u1 ∈ Vi−1 et u2 ∈ Vi−1 . Par cons´quent, (y,i) ∈ Vi−1 et (i,z) ∈ Vi−1 d’o` e u (y,z) ∈ Θi (Vi−1 ). On a donc montr´ Vi ⊆ Θi (Vi−1 ). e P Proposition 5.9 G+ = Θn · Θn−1 · . . . · Θ1 (G) D´monstration Tout chemin de G est de longueur 1, ou poss`de des sommets interm´diaires e e e ∈ {x1 , . . . ,xn } = X. Le th´or`me d´coule donc du lemme pr´c´dent, avec i = n. e e e e e P 5.4.2 Texte de l’algorithme Il est donn´ page 44 e 5.4.3 Complexit´ e Pour chaque op´ration Θ, il y a au plus : e – n + n2 acc`s validarc e – n2 acc`s ajoutarc e soit, globalement : – au plus n2 + n3 acc`s validarc e – au plus n3 acc`s ajoutarc e d’o` un algorithme en O(n3 ) en termes d’acc`s ´l´mentaires. u e ee De plus, l’espace m´moire n’est que de 1 graphe (le graphe courant Result). En effet, le graphe e donn´ G n’est utilis´ que pour “initialiser” Result, il est donc inutile de le garder en m´moire. e e e c IFSIC 2004
  • 44.
    44 Fermeture transitive ALGORITHME DE ROY-WARSHALL GRAPHE roy-warshall(GRAPHE G) c’est local SOMMET x,y,z ; ENS[SOMMET] X; d´but e Result ← G ; X ← G.lst som ; pour tout x de X pour tout y de X si Result.validarc(y,x) alors pour tout z de X si Result.validarc(x,z) alors Result.ajoutarc(y,z) fsi fpourtout fsi fpourtout fpourtout fin 5.4.4 Routage 5.4.4.1 D´finition e L’id´e du routage est la suivante: si l’on calcule la fermeture transitive G+ d’un graphe G, e on est capable de r´pondre ` la question : quels que soient les sommets x et y, existe-t-il dans G e a un chemin de x ` y? Une information de routage doit permettre de compl´ter cette r´ponse, en a e e fournissant le trac´ d’un tel chemin (lorsque celui-ci existe). Il y a plusieurs mani`res d’obtenir e e un routage. Nous en d´crivons une, bas´e sur la notion de table. Rappelons qu’une table est une e e structure de donn´es mettant en oeuvre une correspondance entre un ensemble de clefs et un e ensemble de valeurs. Le type abstrait TABLE[K,E] d´crit les tables dont l’ensemble des clefs est K e et l’ensemble des valeurs E (math´matiquement, ce sont les applications de K dans E). Une table e est d´clar´e TABLE[K,E] T; elle est alors acc´d´e par les op´rations suivantes : e e e e e – T[x] : d´livre la valeur v de type E correspondant ` la clef x (de type K). e a – T[x] ←v affecte la valeur v de type E ` l’´l´ment correspondant ` la clef x (de type K). a ee a Les objets de type SOMMET sont alors munis d’une table, selon la d´claration ci-dessous : e TABLE[SOMMET,SOMMET] SOMMET::R avec la signification suivante: c IFSIC 2004
  • 45.
    5.4. Algorithme deRoy-Warshall 45 Pour tout sommet y, pour tout sommet z,   nil si z ∈ Γ+ (y) o` nil signif ie pas de successeur  u  y.R[z] =  successeur de y sur un chemin de y ` z dans G si  a  z ∈ Γ+ (y) La connaissance des sommets y.R[z] permet-elle de d´terminer le trac´ d’un chemin de y ` e e a z, ` partir de n’importe quel y? La r´ponse n’est pas toujours positive ! En effet, l’algorithme de a e trac´ a l’allure suivante (si y.R[z] = nil) : e d´but e local SOMMET somcour; depuis ecrire ← y ; somcour ← y.R[z]; jusqua somcour = z faire ecrire ← somcour ; somcour ← somcour.R[z]; fait; ecrire ← z fin Mais rien ne prouve que cet algorithme se termine ; par exemple : 1 2 4 y y.R[4] 1 2 avec, pour R[4] : 2 3 3 2 3 4 nil A partir des sommets 1, 2 ou 3, l’algorithme boucle, et pourtant les valeurs R[4] sont bien conformes ` la d´finition. a e Nous allons donc renforcer la d´finition, afin d’´viter cette difficult´, en imposant ` y.R[z], e e e a si z ∈ Γ + (y), d’ˆtre le successeur de y sur un chemin ´l´mentaire de y ` z. Il est alors facile e ee a de v´rifier que l’algorithme de trac´ se termine, puisque les valeurs successives de la variable e e somcour sont distinctes. (Sauf ´ventuellement y = z pour un circuit ´l´mentaire). e ee Pour tout sommet y, pour tout sommet z,   nil si z ∈ Γ+ (y)   y.R[z] =  successeur de y sur un chemin ´l´mentaire de y ` z  ee a  dans G si z ∈ Γ+ (y) Dans l’exemple pr´c´dent, les valeurs y.R[4] deviennent : e e c IFSIC 2004
  • 46.
    46 Fermeture transitive y y.R[4] 1 2 2 4 3 2 4 nil et l’algorithme de trac´ vers le sommet 4, ex´cut´ ` partir de y=1, affiche 1 2 4. e e ea 5.4.4.2 Construction des routages par l’algorithme de Roy-Warshall ∀y ∈ X, on consid`re les valeurs initiales de la table y.R : e nil si (y,z) ∈ Γ ∀z ∈ X : y.R[z] = z si (y,z) ∈ Γ C’est donc l’attribut de routage vers z lorsqu’on se restreint aux chemins de longueur 1. On modifie alors les op´rations Θx , afin qu’elles mettent ` jour les valeurs des tables R : dans le cas e a o` Θx rajoute un arc entre y et z, alors y.R[z] ←y.R[x]. En effet, le chemin ´l´mentaire de y u ee a ` z qui vient d’ˆtre rep´r´ passe par x : pour aller de y ` z, on doit d’abord se diriger vers x. e ee a D’o` le texte de l’algorithme, modifi´ routage : u e ALGORITHME DE ROY-WARSHALL avec ROUTAGE GRAPHE roy-warshall(GRAPHE G) c’est local SOMMET x,y,z ; ENS[SOMMET] X; d´but e Result ← G ; X ← G.lst som ; -- initialisation des tables de routage pour tout y de X pour tout z de X si Result.validarc(y,z) alors y.R[z] ← z sinon y.R[z] ← nil fsi fpourtout fpourtout ; -- op´rations Θ avec gestion des tables de routage e pour tout x de X pour tout y de X si Result.validarc(y,x) alors pour tout z de X si Result.validarc(x,z) alors si non Result.valid arc(y,z) alors Result.ajoutarc(y,z); y.R[z] ← y.R[x] fsi c IFSIC 2004
  • 47.
    5.4. Algorithme deRoy-Warshall 47 fsi fpourtout fsi fpourtout fpourtout fin 5.4.4.3 Exemple d’ex´cution e A la main, la repr´sentation la mieux adapt´e est matricielle. Pour g´rer le routage, au lieu e e e d’utiliser la matrice bool´enne, nous utilisons la matrice de routage R, telle que e y.R[z] si (y,z) ∈ Γ ∀y ∀z : R[y,z] = 0 si (y,z) ∈ Γ Nous traitons l’exemple suivant (les cases de valeur 0 sont laiss´es vides): e 1 2 3 4 5 6 7 8 9 1 6 2 3 2 7 8 4 1 5 5 7 6 4 7 8 8 3 9 1 2 Op´ration θ1 : il s’agit de parcourir la colonne num´ro 1, et de s’arrˆter sur toute ligne de valeur e e e = 0 (correspondant ` Result.validarc(y,1)). Pour une telle ligne, on effectue la “recopie” des a ´l´ments non nuls de la ligne 1 sur la ligne y, en mettant la valeur R[y,1] en toute case nulle ee R[y,z] telle que R[1,z] = 0 (ce qui correspond `: a si Result.validarc(1,z) alors si non Result.valid arc(y,1) alors Result.ajoutarc(y,z); y.R[z] ← y.R[1] fsi fsi L’application de θ1 ne modifie que les lignes 4 et 9, et donne le tableau suivant : c IFSIC 2004
  • 48.
    48 Fermeture transitive 1 2 3 4 5 6 7 8 9 1 6 2 3 2 7 8 4 1 5 1 5 7 6 4 7 8 8 3 9 1 2 1 Le d´tail des diff´rentes ´tapes serait trop long; notons cependant que θ2 ne rajoute aucun arc e e e (le sommet 2 est un point de sortie, c’est-`-dire un sommet sans successeur); de mˆme θ9 , car le a e sommet 9 est un point d’entr´e (c’est-`-dire un sommet sans pr´d´cesseur). On donne ci-dessous e a e e le r´sultat final : e 1 2 3 4 5 6 7 8 9 1 6 6 6 6 6 6 6 6 2 3 2 8 7 8 4 1 5 5 1 5 1 5 5 5 7 7 7 7 6 4 4 4 4 4 4 4 4 7 8 8 8 8 8 3 3 3 3 9 1 2 1 1 1 1 1 1 A titre d’exemple, on va chercher le trac´ d’un chemin du sommet 1 au sommet 2; on obtient e successivement: R[1,2] = 6; R[6,2] = 4; R[4,2] = 5; R[5,2] = 7; R[7,2] = 8; R[8,2] = 3; R[3,2] = 2 d’o` le chemin : [1,6,4,5,7,8,3,2] u 5.4.4.4 Preuve Pour d´montrer la validit´ de cet algorithme, nous ´tablissons les lemmes suivants : e e e Lemme 5.10 Si pour un couple (y, z) on a, ` l’issue de l’algorithme, a y.R[z] = nil, alors y.R[z] est successeur de y sur le premier chemin allant de y ` z rencontr´ au cours de l’algorithme. a e D´monstration Pour tout y et tout z, la valeur y.R[z] est mise ` jour au plus une fois. En effet, e a si (y,z) ∈ Γ, cette affectation a lieu ` l’initialisation, et de plus: a Result.validarc(y,z) est v´rifi´. Si (y,z) ∈ Γ, la pr´condition de cette affectation implique : e e e ¬ Result.validarc(y,z), et sa postcondition implique Result.validarc(y,z) P c IFSIC 2004
  • 49.
    5.5. τ -minimalit´ e 49 Lemme 5.11 Si z ∈ Γ+ (y) alors le premier chemin allant de y ` z a rencontr´ au cours de l’algorithme est un chemin ´l´mentaire. e ee D´monstration Si (y,z) ∈ Γ, ce chemin est un arc et donc il est ´l´mentaire. Supposons e ee que tous les chemins rep´r´s jusqu’` l’op´ration Θi−1 incluse soient ´l´mentaires. Soit alors ee a e ee u = [y ∗ xi ] · [xi ∗ z] un chemin rep´r´ par l’op´ration Θi , c’est-`-dire tel que l’affectation y.R[z] ee e a ←y.R[xi ] ait lieu ; si u n’est pas ´l´mentaire, il existe j < i tel que ee u = [y ∗ xj ∗ xi ] · [xi ∗ xj ∗ z] et tous les autres sommets interm´diaires sont dans {x1 , . . . ,xi−1 } et diff´rents de xj , d’apr`s e e e l’hypoth`se de r´currence. Mais cela signifie qu’il existe un chemin e e u’ = [y ∗ xj ] · [xj ∗ z] avec ∗ ∈ {x1 , . . . ,xi−1 } et donc ∃ ≤ i − 1 : (y,z) ∈ V Au cours du pas d’it´ration no l’affectation y.R[z] ←y.R[x ] a donc lieu, et cela contredit e l’affectation de y.R[z] lors du pas no i > . P De ces deux lemmes on d´duit le r´sultat : e e Th´or`me 5.12 A l’issue de l’algorithme, e e ∀z ∈ X : les valeurs R[z] d´finissent un routage vers z e 5.5 τ -minimalit´ e La τ -minimalit´ constitue une notion int´ressante du point de vue des possibilit´s de che- e e e minement. Il s’agit de mettre en ´vidence un graphe partiel de G, ayant la mˆme fermeture e e transitive que G – donc les mˆmes possibilit´s de cheminement – mais minimal au sens o` e e u la suppression d’un arc quelconque de ce graphe partiel supprime au moins une possibilit´ de e cheminement. Il n’y a en g´n´ral pas unicit´ de la solution. e e e D´finition 5.13 La relation binaire sur G(X) : e Gτ G ⇔ G+ = G + est une relation d’´quivalence, appel´e τ -´quivalence. e e e La classe de G sera not´e : τ (G) e c IFSIC 2004
  • 50.
    50 Fermeture transitive D´finition 5.14 On appelle graphe τ -minimal de G un ´l´ment mini- e ee mal du sous-ensemble τ (G), vis-`-vis de l’ordre (chapitre 4). a Nous verrons au chapitre 7 des techniques pour d´terminer un graphe τ -minimal de G, soit de e mani`re algorithmique si G est sans circuit, soit de mani`re mi-heuristique, mi-algorithmique, en e e utilisant la d´composition de G en composantes fortement connexes, si G poss`de des circuits. e e c IFSIC 2004
  • 51.
    Chapitre 6 M´thodes d’exploration e 6.1 D´veloppement arborescent issu d’un sommet donn´ e e D´finition 6.1 On appelle arborescence un graphe e A = (S,Θ) tel que : i) ∃ un sommet s0 ∈ S et un seul tel que Θ−1 (s0 ) = ∅. ii) ∀s = s0 : Θ−1 (s) poss`de un seul ´l´ment. e ee iii) A est sans circuit. s0 s’appelle racine de A, et tout sommet s sans successeur s’appelle une feuille de l’arborescence. Un chemin de la racine ` une feuille s’appelle branche de l’arborescence. a Soit maintenant G = (X,Γ) un graphe, et x ∈ X. On construit une arborescence Ax de la mani`re suivante : e – x est la racine , – It´rativement sur k ≥ 1 : ∀y ∈ Γ[k] (x) : Θ(y) = Γ(y) e Ax s’appelle d´veloppement arborescent issu d’un sommet donn´ ; chaque branche de l’arbo- e e rescence correspond ` un chemin issu de x (certaines branches peuvent ˆtre infinies). a e c IFSIC 2004
  • 52.
    52 M´thodes d’exploration e Exemple 5.1 2 6 7 1 4 3 G 5 1 A 1 2 4 3 6 2 4 6 7 3 6 2 7 2 4 6 7 7 2 2 2 Fig. 6.1 – Un graphe et son d´veloppement arborescent issu du sommet 1 e c IFSIC 2004
  • 53.
    6.2. Exploration dela descendance de x 53 Les probl`mes de cheminement issus de x que nous allons voir correspondent tous ` des e a parcours d’une partie de l’arborescence Ax , selon diff´rentes strat´gies. De tels parcours sont e e encore connus sous le nom d’exploration de la descendance de x 6.2 Exploration de la descendance de x 6.2.1 Sp´cification du r´sultat e e Explorer la descendance d’un sommet x, c’est effectuer un parcours du graphe Gx = (Γ∗ (x),Γx ) o` u Γ∗ (x) est l’ensemble des descendants de x (rappelons que x ∈ Γ∗ (x)) et Γx = {(y,z) | (y,z) ∈ Γ ∧ y ∈ Γ∗ (x)}. (Remarquons que (y,z) ∈ Γx ⇒ z ∈ Γ∗ (x)). Ce parcours doit permettre de visiter au moins une fois chaque sommet y ∈ Γ∗ (x) et exactement une fois chaque arc (y,z) ∈ Γx . A chaque sommet (resp. arc) on attribue un bool´en sommet visit´ (resp. arc visit´) : y.sommet visit´ e e e e (resp. (y,z).arc visit´) est vrai si et seulement si le sommet y (resp. l’arc (y,z)) a ´t´ visit´. La e ee e coh´rence des ´tats visit´s est exprim´e par les axiomes suivants : e e e e (1) x.sommet visit´ e (2) ∀z = x : z.sommet visit´ ⇒ ∃y (y,z).arc visit´ ∧ z ∈ Γ∗ (x) e e (3) ∀y ∀z : (y,z).arc visit´ ⇒ y.sommet visit´ ∧ z.sommet visit´ ∧ (y,z) ∈ Γx e e e Dans l’´tat initial, on a e x.sommet visit´ e ∀z = x ¬z.sommet visit´ e ∀y ∀z : ¬(y,z).arc visit´e et dans l’´tat final, on doit avoir : e ∀z : z.sommet visit´ ⇔ z ∈ Γ∗ (x) e ∀y ∀z : (y,z)z.arc visit´ ⇔ (y,z) ∈ Γx e 6.2.2 Principe des m´thodes d’exploration e Invariant. Au cours d’une exploration issue de x, – tout sommet y ∈ X est dans l’un des trois ´tats suivants : e dehors : ¬y.visit´ e en attente : y.visit´ ∧ ∃z (y,z) ∈ Γ ∧ ¬(y,z).visit´ e e termin´ y.visit´ ∧ ∀z (y,z) ∈ Γ ⇒ (y,z).arc visit´. e e e – tout arc est dans l’´tat visit´ ou non visit´ e e e Si l’on d´signe par D (resp. A, T ) l’ensemble des sommets d’´tat dehors (resp en attente, e e termin´) et V l’ensemble des arcs d’´tat visit´, les axiomes se traduisent par : e e e A1 x ∈ A ∪ T c IFSIC 2004
  • 54.
    54 M´thodes d’exploration e A2 ∀z = x : z ∈ A ∪ T ⇒ (∃y(y,z) ∈ V ) ∧ z ∈ Γ∗ (x) A3 ∀y ∀z (y,z) ∈ V ⇒ y ∈ A ∪ T ∧ z ∈ A ∪ T ∧ (y,z) ∈ Γx Condition d’arrˆt e Proposition 6.2 A = ∅ ⇔ (T = Γ∗ (x) ∧ V = Γx ) D´monstration e i) Supposons A = ∅. Montrons que T = Γ∗ (x) et V = Γx . – Comme A ∪ T ⊆ Γ∗ (x), on a T ⊆ Γ∗ (x). – Soit y ∈ Γ∗ (x). Il existe un chemin u = [x,z1 , . . . ,zk ,y](k ≥ 0). Mais x ∈ T ⇒ arc visit´(x,z1 ) ⇒ e sommet visit´(z1 ) ⇒ z1 ∈ A ∪ T = T . En r´p´tant ce raisonnement, on obtient zk ∈ T ⇒ e e e arc visit´(zk ,y) ⇒ sommet visit´(y) ⇒ y ∈ A ∪ T = T . Donc Γ∗ (x) ⊆ T . e e – V ⊆ Γx , par construction. – Soit (y,z) ∈ Γx . On a donc y ∈ Γ∗ (x), c’est-`-dire y ∈ T d’o` arc visit´(y,z) soit (y,z) ∈ V . a u e Donc, Γx ⊆ V . ii) R´ciproquement, supposons T = Γ∗ (x) ∧ V = Γx ). Si A = ∅, il existe y ∈ A. On a donc e y ∈ Γ∗ (x) (car A ⊆ Γ∗ (x)) et ∃z (y,z) ∈ Γ, (y,z) ∈ V . Mais y ∈ Γ∗ (x) ⇒ (y,z) ∈ Γx = V . Contradiction. Donc A = ∅. P Progression (* A = ∅ *) Soit y un sommet de A Soit S un ensemble de successeurs de y tel que ∀z ∈ S : (y,z) ∈ V . Pour tout z ∈ S, l’´tat de (y,z) devient visit´ e e si z est dans l’´tat dehors e alors (premi`re visite de z) e si Γ(z) = ∅ alors z passe dans l’´tat termin´ e e sinon z passe dans l’´tat en attente e fsi sinon z a d´j` ´t´ visit´ ` partir d’un autre de eaee ea ses pr´decesseurs e fsi si ∀z ∈ Γ(y) l’´tat de (y,z) est visit´ alors l’´tat de y devient termin´ fsi e e e e Valeurs initiales D = X {x} A = si Γ(x) = ∅ alors ∅ sinon {x} T = si Γ(x) = ∅ alors {x} sinon ∅ V = ∅ c IFSIC 2004
  • 55.
    6.2. Exploration dela descendance de x 55 6.2.3 Preuve Proposition 6.3 Les valeurs initiales satisfont l’invariant D´monstration e A1 x ∈ A ∪ T A2 Si z = x on a z ∈ D donc z ∈ A ∪ T . A3 V = ∅ P Proposition 6.4 La progression maintient l’invariant D´monstration Soit D, A , T , V les valeurs au d´but d’une ´tape de l’it´ration, y le sommet e e e e et S l’ensemble des successeurs de y s´lectionn´s au d´but de cette ´tape; par hypoth`se, ces e e e e e valeurs satisfont (A1) ` (A3). Soit D , A , T , V les valeurs ` la fin du pas. Prouvons qu’elles a a v´rifient les trois axiomes. e A1 A ∪ T ⊆ A ∪ T donc x ∈ A ∪ T A2 Soit z = x. Si z ∈ A ∪ T . Il y a deux cas : 1) z ∈ A∪T . Comme (A2) est satisfait au d´but de l’´tape, on a (∃y(y,z) ∈ V )∧z ∈ Γ∗ (x). e e Comme V ⊆ V , on a bien (∃y(y,z) ∈ V ) ∧ z ∈ Γ∗ (x). 2) z ∈ D. Alors z a ´t´ visit´ ` partir de y ∈ A ∪ T , donc (y,z) a ´t´ visit´ lors de cette ee ea ee e ´tape : V = V ∪ {(y,z). De plus, d’apr`s (A2) au d´but de l’´tape, y ∈ Γ∗ (x) ce qui e e e e implique z ∈ Γ∗ (x). Donc on a bien (∃y(y,z) ∈ V ) ∧ z ∈ Γ∗ (x). A3 Soit (y,z) ∈ V . Il y a deux cas : 1) (y,z) ∈ V . Comme (A3) est satisfait au d´but de l’´tape, on a y ∈ A ∪ T ∧ z ∈ e e A ∪ T ∧ (y,z) ∈ Γx . Comme A ∪ T ⊆ A ∪ T , on a aussi y ∈ A ∪ T ∧ z ∈ A ∪ T ∧ (y,z) ∈ Γx . 2) (y,z) ∈ V . Cet arc a donc ´t´ visit´ lors de cette ´tape, donc y ∈ A ⊆ A ∪ T et, ` l’issue ee e e a de la visite, z ∈ A ∪ T . De plus, (A2) ´tant vrai au d´but de l’´tape, y ∈ A ⇒ y ∈ Γ∗ (x) e e e et donc (y,z) ∈ Γx . On a donc bien y ∈ A ∪ T ∧ z ∈ A ∪ T ∧ (y,z) ∈ Γx . P Proposition 6.5 L’invariant et la condition d’arrˆt impliquent le e r´sultat e D´monstration D’apr`s la proposition 6.2 e e P Proposition 6.6 L’algorithme s’arrˆte apr`s un nombre fini d’´tapes e e e c IFSIC 2004
  • 56.
    56 M´thodes d’exploration e D´monstration La r`gle de progression fait d´croˆ strictement la quantit´ enti`re card(Γ)- e e e ıtre e e card(V ) et cette quantit´ est minor´e par 0. e e P 6.2.4 Texte de l’algorithme g´n´ral d’exploration e e L’´tat des sommets est mis en œuvre ` l’aide des trois ensembles D, A, T et celui des arcs ` e a a l’aide de l’ensemble V ; en outre, ` chaque sommet de y ∈ A est associ´ un ensemble de sommets a e a visiter contenant les successeurs z de y tels que (y,z) ∈ V (si y ∈ D, a visiter n’est pas d´fini e et, si y ∈ T , on a a visiter = ∅). La fonction sous ensemble, appliqu´e ` un ensemble non vide, d´livre un sous-ensemble de cet e a e ensemble. La fonction ´l´ment, appliqu´e ` un ensemble non vide, d´livre un ´l´ment quelconque ee e a e ee de cet ensemble (sans le retirer). Le texte de l’algorithme est donn´ page 57 e 6.2.5 Complexit´ e Chaque sommet de Γ∗ (x) passe une fois et une seule dans l’´tat en attente. Lorsqu’un sommet e z passe de l’´tat dehors ` l’´tat en attente, l’ensemble a visiter(z) est ´tabli, par l’appel de l’acc`s e a e e e lst succ. Il y a donc card(Γ∗ (x)) appels de l’acc`s lst succ e et, chaque acc`s ´tant, selon sa mise en œuvre, au pire en O(n), on a un algorithme en O(n2 ) e e (en termes d’op´rations du type validarc) e 6.3 Strat´gies d’exploration particuli`res : largeur et profondeur e e Les strat´gies d’exploration que nous allons maintenant d´velopper d´pendent de la gestion e e e de l’ensemble A, du crit`re de choix d’un ´l´ment y dans cet ensemble (celui ` partir duquel on e ee a tente de prolonger l’exploration lors d’un pas d’it´ration) et du choix de l’ensemble S. Nous en e d´veloppons deux, appel´es respectivement : e e 1. recherche en largeur d’abord (breadth-first ou width first search) 2. recherche en profondeur d’abord (depth-first search) D’autre part, le canevas d’exploration de la descendance d’un sommet x peut ˆtre utilis´ e e pour effectuer un calcul particulier sur le graphe, par exemple : – Ensemble des descendants de x ´ – Enum´ration des chemins et circuits ´l´mentaires issus de x e ee – d´veloppement arborescent de hauteur minimum issu de x e – Arborescence de chemins de valeur optimum issus de x dans un graphe valu´ (ce probl`me e e sera trait´ au chapitre 8) e – etc. Dans la suite de ce chapitre, les deux premiers exemples seront examin´s; la strat´gie d’explo- e e ration en largeur et une expression r´cursive de la strat´gie d’exploration en profondeur seront e e explicit´es sur le premier d’entre eux, et l’exploration en profondeur sur le second. e c IFSIC 2004
  • 57.
    6.3. Strat´gies d’explorationparticuli`res : largeur et profondeur e e 57 ALGORITHME GENERAL D’EXPLORATION ENS[SOMMET] D, T; ENS[ARC] V ; exploration-generale(GRAPHE G; SOMMET x) c’est local ENS[SOMMET] A, S; ENS[SOMMET] SOMMET::a visiter ; SOMMET y, z ; d´but e depuis D ← G.lst som{x} ; V ← ∅ ; x.a visiter ← G.lst succ(x) ; si x.a visiter = ∅ alors A ← ∅ ; T ← {x} sinon A ← {x} ; T ← ∅ fsi jusqua A = ∅ faire y ← A.element ; S ← y.a visiter.sous ensemble; -- mise ` jour du statut de y a y.a visiter ← y.a visiter S; si y.a visiter=∅ alors A ← A{y} ; T ← T ∪ {y} fsi ; pour tout z de S V ← V ∪ {(y,z)} ; -- mise ` jour du statut de z a si z ∈ D alors D ← D{z} ; z.a visiter ← lst succ(G,z) ; si z.a visiter = ∅ alors T ← T ∪ {z} sinon A ← A ∪ {z} fsi fsi fpourtout fait -- exploration termin´e : Γ∗ (x) = T , Γx = V e fin c IFSIC 2004
  • 58.
    58 M´thodes d’exploration e 6.3.1 Exploration en largeur d’abord 6.3.1.1 Une structure de donn´es : la file e Cette strat´gie consiste ` s´lectionner dans A le sommet y le plus anciennement ajout´ et ` e a e e a choisir S = Γ(y). Au niveau de l’arborescence, cela revient ` effectuer un parcours en largeur ( a niveau par niveau) : x est visit´, puis tous les arcs issus de x; ensuite, tous les successeurs de x e et les arcs qui en sont issus, puis tous les sommets de Γ[2] (x) – qui n’ont pas ´t´ visit´s – , et ee e ainsi de suite. L’algorithme qui r´sulte de cette strat´gie visite donc les ´l´ments de Γ∗ (x) dans e e ee l’ordre suivant : k−1 x; Γ(x) {x}; Γ[2] (x) Γ(x) {x}; . . . ; Γ[k] (x) Γ[j] (x); . . . j=0 Pour cette raison, il est parfois qualifi´ de ”concentrique”. e Nous allons mettre en oeuvre cette technique avec une structure de donn´es qui s’appelle e une file. Une file est une liste sur laquelle les seules modifications possibles sont : 1. ajout d’un ´l´ment en queue (mettreenfile) ee 2. retrait de l’´l´ment de tˆte (oterdefile) ee e On dit encore que cette liste est g´r´e selon la discipline P.A.P.S. (Premier Arriv´ Premier ee e Sorti) ou F.I.F.O. (First In First Out). Nous consid´rons une file comme un type abstrait et la d´claration e e FILE[E] f d´clare un objet f de type file d’objets de type E. e Les primitives d’acc`s sont : e creer cr´e une nouvelle file, vide e BOOL filevide pr´dicat ` valeur vrai si et seulement si la file courante est vide e a mettreenfile(E v) ajoute l’objet d´sign´ par v en queue de file e e E oterdefile d´livre le premier ´l´ment et l’enl`ve de la file. e ee e Le principe de mise en œuvre est alors le suivant : pour le sommet y en tˆte de file, on examine e s´quentiellement tous les successeurs et chacun d’eux est imm´diatement ajout´ en queue de file e e e s’il n’a pas encore ´t´ visit´; puis y est ˆt´ de la file puisqu’il ne peut plus apporter d’information ee e oe nouvelle. Il est donc inutile, avec cette strat´gie, de g´rer les ensembles de successeurs a visiter, e e puisque tous les arcs issus du sommet s´lectionn´ (tˆte de file) sont visit´s lors du mˆme pas e e e e e d’it´ration. e 6.3.1.2 Texte de l’algorithme Le texte de l’algorithme est donn´ ci-apr`s, page 59. e e 6.3.1.3 Exemple d’ex´cution e La figure 6.2 montre le r´sultat de l’exploration en largeur d’abord issue du sommet 1 dans e le graphe de la figure 6.1 c IFSIC 2004
  • 59.
    6.3. Strat´gies d’explorationparticuli`res : largeur et profondeur e e 59 EXPLORATION LARGEUR D’ABORD ENS[SOMMET] D, T; ENS[ARC] V; exploration-largeur(GRAPHE G; SOMMET x) c’est local ENS[SOMMET] S; -- ensemble des successeurs de la tˆte de file e FILE[SOMMET] A; SOMMET y, z; d´but e depuis D ← G.lst som{x} ; A.creer ; A.mettreenfile(x) ; T ← ∅; V ← ∅; jusqua A.filevide faire y ← A.oterdefile ; T ← T ∪ {y} ; S ← G.lst succ(y) ; pour tout z de S V ← V ∪ {(y,z)} ; si z ∈ D alors D ← D{z} ; A.mettreenfile(z) fsi fpourtout fait -- exploration termin´ee fin 6.3.2 Recherche en profondeur d’abord 6.3.2.1 Une structure de donn´es : la pile e Cette recherche consiste ` s´lectionner dans A le sommet y le plus r´cemment ajout´, et pour a e e e S un arc non visit´ issu de y. Au niveau de l’arborescence, cela revient ` effectuer un parcours e a en descendant le plus loin possible sur chaque branche. Lorsqu’un sommet est rencontr´ : e – s’il est dans l’´tat dehors, il devient en attente e – s’il n’est pas dans l’´tat dehors, il marque l’arrˆt de la descente, et la recherche reprend ` e e a partir de son pr´d´cesseur dans l’arborescence. e e Pour mettre en oeuvre cette technique, on utilise une structure de donn´es qui s’appelle une e pile; il s’agit d’une liste sur laquelle les seules modifications possibles sont : 1. ajout d’un ´l´ment en queue de liste (empiler) ee 2. retrait du dernier ´l´ment de la liste (d´piler). ee e c IFSIC 2004
  • 60.
    60 M´thodes d’exploration e file D R arborescence 1 2, 3, 4, 5, 6, 7 ∅ 1 2, 4 3, 5, 6, 7 1 2 4 4, 3, 6 5, 7 1, 2 3 6 3, 6 5, 7 1, 2, 4 2 6 5, 7 1, 2, 4, 3 4 6 7 5 1, 2, 4, 3, 6 7 5 1, 2, 4, 3, 6, 7 2 R = Γ (1) = {1,2,3,4,6,7} = X {5} V = Γ1 = {(1,2),(1,4),(2,3),(2,6),(3,4),(3,6),(4,2),(6,7),(7,2)} = Γ {(5,4)} Fig. 6.2 – exploration en largeur L’´l´ment de queue de cette liste est aussi d´sign´ sous le nom de sommet de pile. ee e e On dit encore que cette liste est g´r´e selon la discipline DAPS (Dernier Arriv´ Premier ee e Sorti) ou encore LIFO (Last In First Out). Nous consid´rons donc une pile comme un type abstrait, et la d´claration e e PILE[E] d´clare une liste d’objets de type E g´r´s en pile. e ee Les op´rations sur les piles sont alors : e creer cr´e une nouvelle pile vide e BOOL pilevide pr´dicat ` valeur vrai si et seulement si la pile est vide e a empiler(E z) ajout de z en queue d´piler e retrait de l’´l´ment de queue (erreur si la pile est vide) ee E sommetpile d´livre la valeur du sommet de pile (consultation sans d´piler) e e 6.3.2.2 Texte de l’algorithme Il est donn´ ci-apr`s, page 61 e e 6.3.2.3 Exemple d’ex´cution e La figure 6.3 montre le r´sultat de l’exploration en profondeur d’abord issue du sommet 1 e dans le graphe de la figure 6.1 c IFSIC 2004
  • 61.
    6.3. Strat´gies d’explorationparticuli`res : largeur et profondeur e e 61 EXPLORATION PROFONDEUR D’ABORD ENS[SOMMET] D, T; ENS[ARC] V; recherche-profondeur(GRAPHE G; SOMMET x) c’est local PILE[SOMMET] A; ENS[SOMMET] SOMMET::a visiter ; SOMMET y; -- sommet de pile SOMMET z; -- sommet courant d´but e depuis D ← G.lst som{x} ; V ← ∅ A.creer ; x.a visiter ← G.lst succ(x) ; si x.a visiter = ∅ alors T ← {x} sinon A.empiler(x); T ← ∅ fsi ; jusqua A.pilevide faire y ← A.sommetpile ; si y.a visiter = ∅ alors z ← (y.a visiter).element ; y.a visiter ← y.a visiter{z} ; V ← V ∪ {(y,z)} ; si z ∈ D alors D ← D{z} ; z.a visiter ← G.lst succ(z) ; si z.a visiter = ∅ alors T ← T ∪ {z} sinon A.empiler(z) fsi fsi sinon T ← T ∪ {y} ; A.depiler fsi fait -- exploration termin´e e fin c IFSIC 2004
  • 62.
    62 M´thodes d’exploration e pile D R arborescence 1 2, 3, 4, 5, 6, 7 ∅ 1 1, 2 3, 4, 5, 6, 7 ∅ 2 1, 2, 3 4, 5, 6, 7 ∅ 3 1, 2, 3, 4 5, 6, 7 ∅ 4 1, 2, 3, 4 5, 6, 7 ∅ 2 1, 2, 3 5, 5, 7 4 1, 2, 3, 6 5, 7 4 6 1, 2, 3, 6, 7 5 4 7 1, 2, 3, 6, 7 5 4 2 1, 2, 3, 6 5 4, 7 1, 2, 3 5 4, 7, 6 1, 2 5 4, 7, 6, 3 6 1, 2 5 4, 7, 6, 3 1 5 4, 7, 6, 3, 2 4 1 5 4, 7, 6, 3, 2 5 4, 7, 6, 3, 2, 1 Fig. 6.3 – exploration en profondeur 6.4 Exemple d’application : calcul de l’ensemble des descendants L’algorithme g´n´ral de recherche permet d’obtenir l’ensemble des descendants du sommet e e de d´part : en effet, cet ensemble est ´gal, ` l’issue de l’algorithme, ` T . Toutefois, l’exploration e e a a peut ˆtre simplifi´e, dans la mesure o` l’on ne cherche pas ` calculer l’ensemble V des arcs e e u a du graphe Gx , mais seulement l’ensemble Γ∗ (x) de ses sommets. Quelle que soit la strat´gie e d’exploration retenue, la simplification est la suivante : – Suppression de la variable V – Le statut des sommets peut ˆtre m´moris´ ` l’aide de 2 ensembles seulement :A et DESC, e e ea c IFSIC 2004
  • 63.
    6.4. Exemple d’application: calcul de l’ensemble des descendants 63 ce dernier contenant ` tout instant du calcul l’ensemble des sommets reconnus comme a descendants de x, c’est-`-dire A ∪ T . En effet, a – y ∈ D ⇔ y ∈ DESC – y ∈ T ⇔ y ∈ A ∧ y ∈ DESC 6.4.1 Cas de la recherche en largeur Nous donnons le texte de l’algorithme simplifi´ dans le cas de l’exploration en largeur (page e 63). CALCUL DES DESCENDANTS : LARGEUR D’ABORD ENS[SOMMET] DESC; descendants-largeur(GRAPHE G;SOMMET x) c’est local ENS[SOMMET] S; FILE[SOMMET] A; SOMMET y, z ; d´but e depuis DESC ← {x} ; A.creer ; A.mettreenfile(x) jusqua A.filevide faire y ← A.oterdefile ; S ← G.lst succ(y) ; pour tout z de S si z ∈ DESC alors DESC ← DESC ∪ {z} ; A.mettreenfile(z) fsi fpourtout fait fin La figure 6.4 montre, ` titre de comparaison avec l’exploration compl`te (figure 6.2), le a e r´sultat de la recherche des descendants du sommet 1 dans le graphe de la figure 6.1 e 6.4.2 Cas de la recherche en profondeur : expression r´cursive e Le texte de cet algorithme est donn´ page 65 e c IFSIC 2004
  • 64.
    64 M´thodes d’exploration e file DESC arborescence 1 1 1 2, 4 1, 2, 4 2 4 4, 3, 6 1, 2, 4, 3, 6 3 6 3, 6 1, 2, 4, 3, 6 6 1, 2, 4, 3, 6 7 1, 2, 4, 3, 6, 7 7 1, 2, 4, 3, 6, 7 DESC = Γ (1) = {1,2,3,4,6,7} = X {5} Fig. 6.4 – calcul des descendants (largeur) On peut alors v´rifier que le mode de recherche correspond ` une recherche profondeur e a d’abord. Dans une expression it´rative de cet algorithme r´cursif, la manipulation de la pile e e serait alors explicite, via la variable A (cette manipulation correspond ` la m´morisation des a e contextes de retour des diff´rents appels de la proc´dure desc local). e e 6.5 ´ Enum´ration des chemins ´l´mentaires issus de x e ee Le probl`me pos´ ici est plus complexe, puisqu’il s’agit d’obtenir les trac´s de tous les chemins e e e ´l´mentaires issus du sommet x. Il faut donc parcourir une sous-arborescence plus importante, ee puisqu’un mˆme sommet peut apparaˆ plusieurs fois (comme extr´mit´ de plusieurs chemins e ıtre e e distincts de G). En fait, les chemins ´l´mentaires issus de x sont les branches de l’arborescence, ee parcourues jusqu’` trouver une r´p´tition dans la suite des sommets situ´s sur une branche. a e e e Dans l’exemple de la figure 6.1, il s’agit de l’arborescence repr´sent´e graphiquement. e e Le choix d’une exploration en profondeur s’explique par la propri´t´ suivante : ee Proposition 6.7 Lors d’une exploration en profondeur, l’´tat de la pile e est un chemin ´l´mentaire d’origine x et d’extr´mit´ le sommet de pile. ee e e D´monstration Elle se fait par induction sur l’´tat de la pile. e e – Le premier ´tat non vide de la pile est x, donc v´rifie la propri´t´. e e ee – Supposons la propri´t´ v´rifi´e au d´but d’un pas d’it´ration, ee e e e e et soit c IFSIC 2004
  • 65.
    ´ 6.5. Enum´ration deschemins ´l´mentaires issus de x e ee 65 CALCUL DES DESCENDANTS : FORMULATION RECURSIVE ENS[SOMMET] DESC; desc local (SOMMET y) c’est local ENS[SOMMET] S; SOMMET z; d´but e DESC ← DESC ∪ {y} ; S ← G.lst succ(y) ; pour tout z de S faire si z ∈ DESC alors desc local(z) fsi fpourtout fin descendants-recursif(GRAPHE G; SOMMET x) c’est d´but e DESC ← ∅ ; desc local(x) fin x . . . t y l’´tat de la pile. Montrons qu’elle reste v´rifi´e ` la fin du pas. e e e a cas 1 Le pas courant ne modifie pas l’´tat de la pile. Ce cas est trivial; e cas 2 Le pas courant effectue une op´ration d´piler; le r´sultat est ´vident puisqu’un e e e e chemin ´l´mentaire priv´ de son dernier sommet reste un chemin ´l´mentaire; ici, le ee e ee chemin obtenu va de x ` t, ce dernier sommet ´tant le sommet de pile; a e cas 3 Le pas courant effectue une op´ration empiler. Soit z le sommet empil´. Par construc- e e tion, z est un successeur de y, donc le nouvel ´tat de la pile x . . . t y z est bien un e chemin de x au sommet de pile z. De plus le sommet z ´tant empil´ ` cette ´tape, il e ea e appartenait ` D, donc ne figurait pas dans la pile au d´but du pas; par cons´quent, a e e l’´tat de la pile ` la fin du pas est un chemin ´l´mentaire. e a ee P Par rapport ` l’algorithme d’exploration vu au §6.3.2, il faut consid´rer toutes les occurrences a e possibles d’un sommet dans l’arborescence d’exploration : chacune d’elles, provenant d’un pr´d´cesseur e e diff´rent, engendre un nouvel ensemble de chemins via sa descendance. Ainsi, la progression doit e ˆtre modifi´e de la mani`re suivante : e e e Progression Soit y le sommet de la pile; s´lectionner un successeur de y, non encore visit´. S’il e e n’y en a pas, alors d´piler y, qui passe dans l’´tat termin´; s’il y en a un soit z ; si z ∈ A e e e c IFSIC 2004
  • 66.
    66 M´thodes d’exploration e alors il ne d´finit pas de nouveau chemin (sauf si z = x : circuit ´l´mentaire); si z ∈ D, on e ee l’empile (c’est la premi`re fois qu’il est visit´), et donc tous ses arcs sortants deviennent e e ` visiter (a visiter(z) ←lst succ(G,z)); si z ∈ T (il est d´j` pass´ dans la pile puis en est a ea e ressorti), il faut proc´der de mˆme puisque l’´tat de la pile est un chemin ´l´mentaire de e e e ee x ` z, et tous les chemins ´l´mentaires ayant cet ´tat de pile comme pr´fixe vont alors ˆtre a ee e e e reconnus. Un exemple d’ex´cution est donn´ page 67. Le texte de l’algorithme est donn´ page 68, et e e e une version r´cursive page 69. N.B. : l’acc`s ecrirechemin permet d’afficher l’´tat d’une pile, e e e qui correspond alors ` un chemin ´l´mentaire issu de x. Un circuit ´l´mentaire passant par un a ee ee sommet z pr´sent dans la pile est obtenu par l’acc`s ecrirecircuit(z) qui affiche l’´tat de la e e e pile depuis le sommet z, suivi du sommet z. Ces acc`s permettent d’ailleurs d’incorporer des e restrictions sur la nature des chemins que l’on souhaite ´num´rer : conditions sur la longueur, e e sur les sommets travers´s, etc. e 6.5.1 Algorithmes gloutons et non gloutons Les algorithmes d’exploration pr´sent´s dans ce chapitre se classent en gloutons et non glou- e e tons. L’exploration de la descendance rentre dans la cat´gorie des gloutons, ce qui signifie que e certains r´sultats sont d´finitivement acquis avant la fin de l’ex´cution de l’algorithme : c’est le e e e cas, ici, lorsqu’un sommet passe de l’´tat en attente ` l’´tat termin´ : on enregistre ainsi le fait e a e e que toute l’information que l’on peut obtenir ` partir de ce sommet a ´t´ obtenue. a ee Au contraire, l’´num´ration des chemins ´l´mentaires est un algorithme non glouton, car e e ee aucun r´sultat ne peut ˆtre consid´r´ comme d´finitif avant d’avoir rencontr´ la condition d’arrˆt; e e ee e e e ce qui se traduit, ici, par le fait que le statut termin´ d’un sommet peut ˆtre remis en cause - e e lorsque ce sommet est ` nouveau visit´ ` partir d’un nouveau pr´d´cesseur, toute l’exploration a ea e e issue de ce sommet doit ˆtre refaite, et donc le sommet “r´gresse” dans l’´tat o` il ´tait lors de e e e u e son passage dehors → en attente. Nous retrouverons au chapitre 8 cette distinction entre algorithmes gloutons et non gloutons, a ` l’occasion des calculs de chemins de valeur optimale. c IFSIC 2004
  • 67.
    ´ 6.5. Enum´ration deschemins ´l´mentaires issus de x e ee 67 e ´ Exemple d’ex´cution Enum´ration des chemins et circuits ´l´mentaires issus du sommet 1 e ee dans le graphe de la figure 6.1 : pile chemin circuit 1 1,2 1,2 1,2,3 1,2,3 1,2,3,4 1,2,3,4 1,2,3,4,2 2,3,4,2 1,2,3,4 1,2,3 1,2,3,6 1,2,3,6 1,2,3,6,7 1,2,3,6,7 1,2,3,6,7,2 2,3,6,7,2 1,2,3,6,7 1,2,3,6 1,2,3 1,2 1,2,6 1,2,6 1,2,6,7 1,2,6,7 1,2,6,7,2 2,6,7,2 1,2,6,7 1,2,6 1,2 1 1,4 1,4 1,4,2 1,4,2 1,4,2,3 1,4,2,3 1,4,2,3,6 1,4,2,3,6 1,4,2,3,6,7 1,4,2,3,6,7 1,4,2,3,6,7,2 2,3,6,7,2 1,4,2,3,6,7 1,4,2,3,6 1,4,2,3 1,4,2,3,4 4,2,3,4 1,4,2,3 1,4,2 1,4,2,6 1,4,2,6 1,4,2,6,7 1,4,2,6,7 1,4,2,6,7,2 2,6,7,2 1,4,2,6,7 1,4,2,6 1,4,2 1,4 1 c IFSIC 2004
  • 68.
    68 M´thodes d’exploration e ENUMERATION DES CHEMINS ELEMENTAIRES ENS[SOMMET] D, T ENS[ARC] V; enumeration-chemins(GRAPHE G; SOMMET x) c’est local PILE[SOMMET] A; ENS[SOMMET] SOMMET.a visiter ; SOMMET y; -- sommet de pile SOMMET z; -- sommet courant d´but e depuis D ← G.lst som{x} ; A.creer; x.a visiter ← G.lst succ(x){x} ; si x.a visiter = ∅ alors A.empiler(x) fsi jusqua A.pilevide faire y ← A.sommetpile ; si y.a visiter = ∅ alors z ← (y.a visiter).element ; y.a visiter ← y.a visiter{z} ; si z ∈ A alors si z ∈ D alors D← D{z} fsi ; z.a visiter ← G.lst succ(z) ; A.empiler(z) ; A.ecrirechemin sinon A.ecrirecircuit(z) fsi sinon T ← T ∪ {y} ; A.depiler fsi fait fin c IFSIC 2004
  • 69.
    ´ 6.5. Enum´ration deschemins ´l´mentaires issus de x e ee 69 ENUMERATION DES CHEMINS ELEMENTAIRES : VERSION RECURSIVE ENUM[dehors, en attente, termin´] SOMMET::etat ;-- e type ´num´r´ e e e PILE[SOMMET] chemin courant ; enumerer(SOMMET y) c’est -- pre : y.etat=en attente local SOMMET z d´but e pour tout z de G.lst succ(y) -- y est le p`re de z dans l’arborescence d’exploration e cas z.etat= dehors,termin´ → e chemin courant.empiler(z) ; chemin courant.ecrirechemin ; z.etat ← en attente ; enumerer(z) z.etat=en attente → chemin courant.ecrirecircuit(z) fcas fpourtout; chemin courant.depiler ; -- le sommet y est d´pil´ e e y.etat ← termin´e fin -- enumerer enumeration-recursive(GRAPHE G; SOMMET x) c’est d´but e chemin courant.creer ; pour tout y de G.lst som y.etat ← dehors fpourtout ; x.etat ← en attente ; chemin courant.empiler(x); enumerer(x) fin c IFSIC 2004
  • 70.
    70 M´thodes d’exploration e c IFSIC 2004
  • 71.
    Chapitre 7 Circuits. Composantesfortement connexes 7.1 D´termination de l’existence de circuits e 7.1.1 Principe Dans de nombreuses applications, on souhaite savoir si un graphe donn´ poss`de ou non des e e circuits (cf. exemple de l’interblocage). Certains des algorithmes que nous avons vus pr´c´demment e e (Roy-Warshall, descendants) pourraient ˆtre utilis´s : e e £ avec Roy-Warshall on obtient l’ensemble des sommets situ´s sur un circuit, puisque de tels e sommets v´rifient (x,x) ∈ G e + . £ si on se restreint ` l’existence de circuits situ´s dans le sous-graphe engendr´ par Γ∗ (x), x a e e ´tant un sommet donn´, on peut utiliser l’ algorithme de recherche des descendants de x e e en profondeur, sachant qu’un circuit existe d`s lors qu’on trouve un sommet successeur du e sommet de pile, et appartenant d´j` ` desc. eaa Mais, avec Roy-Warshall, la complexit´ est ´lev´e (cet algorithme r´sout le probl`me plus e e e e e g´n´ral de la fermeture transitive), et avec la recherche des descendants de x, on ne d´tecte que e e e les circuits passant par les sommets de Γ∗ (x). Nous allons voir un algorithme sp´cifique, appel´ e e algorithme de Marimont, permettant de r´soudre le probl`me avec une complexit´ moindre e e e que celle de Roy-Warshall. Cet algorithme est fond´ sur la propri´t´ suivante : e ee Proposition 7.1 Les propositions suivantes sont ´quivalentes : e i) G est sans circuit, ii) G et tous ses sous-graphes poss`dent au moins un point d’entr´e e e (sommet sans pr´d´cesseur) et un point de sortie (sommet sans succes- e e seur). D´monstration. i) ⇒ ii) Supposons G = (X,Γ) sans circuit, et que G n’a pas de point de e c IFSIC 2004
  • 72.
    72 Circuits. Composantes fortement connexes sortie. Alors : ∀x ∈ X,∃y ∈ X : y ∈ Γ(x) Autrement dit, partant d’un sommet xi quelconque, on peut construire un chemin xi ,xi1 ,xi2 , . . . ,xik , . . . de longueur aussi grande que l’on veut ; et d`s que la longueur est > n, on e obtient un circuit. D’o` contradiction avec l’hypoth`se. On montre de mani`re identique que G u e e a au moins un point d’entr´e. Enfin, si G est sans circuit, tout sous-graphe engendr´ par une e e partie de X est aussi sans circuit, ce qui montre la premi`re partie de la proposition. e ii) ⇒ i) Supposons que G ait un circuit γ et soit Gγ le sous-graphe engendr´ par les sommetse de ce circuit. Par construction, Gγ n’a ni point d’entr´e ni point de sortie, ce qui contredit e l’hypoth`se. P e Le principe de l’algorithme est alors tr`s simple : si G ne poss`de pas de points d’entr´e ou e e e de points de sortie, on peut conclure que G a des circuits. Sinon, on ˆte les points d’entr´e et les o e points de sortie, et on recommence sur le sous-graphe engendr´. Si on aboutit au graphe vide e (tous les sommets de G ont ´t´ ˆt´s), on conclut que G est sans circuit. Remarquons que cet eeoe algorithme peut ˆtre mis en oeuvre uniquement ` partir des points d’entr´e, ou des points de e a e sortie, ou ` partir des deux. Nous ne donnons, ci-dessous, que cette derni`re variante. a e 7.1.2 Algorithme de Marimont 7.1.2.1 Analyse Invariant : H sous-graphe de G ; E = ensemble des points d’entr´e de H ; e S = ensemble des points de sortie de H. Arrˆt : e H vide ou E = ∅ ou S = ∅ Traitement de sortie : il y a des circuits si et seulement si H est non vide. Progression : ( H non vide et E = ∅ et S = ∅ ) H ←ˆter de H les points d’entr´e et les points de sortie. o e Valeurs initiales : H ←G Pour am´liorer l’efficacit´ au niveau de la programmation, nous m´morisons dans une variable e e e bool´enne h vide le r´sultat du test vide(H) e e 7.1.2.2 Texte de l’algorithme Il est donn´ page 73 e c IFSIC 2004
  • 73.
    7.1. D´termination del’existence de circuits e 73 EXISTENCE DE CIRCUITS : MARIMONT BOOL marimont(GRAPHE G) c’est local GRAPHE H ; -- graphe de travail ENS[SOMMET] E, S; -- points d’entr´e, de sortie e BOOL h vide ; d´but e depuis H ← G ; h vide ← H.vide ; si non h vide alors E ← H.points entree ; S ← H.points sortie fsi ; jusqua h vide ou E= ∅ ou S =∅ faire H ← H.sous graphe(G.lst som E ∪ S) ; h vide ← H.vide ; si non h vide alors E ← H.points entree; S ← H.points sortie fsi fait ; -- ici, h vide ou E = ∅ ou S = ∅ Result ← non h vide fin 7.1.2.3 Complexit´ e Dans le cas le pire (tous les sommets de G sont ˆt´s, et seulement 2 sommets ` chaque pas oe a d’it´ration), il y a n/2 pas d’ it´ration. Le pas n e e o k n´cessite e 1 acc`s points entr´e e e 1 acc`s points sortie e sur un sous-graphe ` n − 2(k − 1) sommets, soit : a n − 2k + 2 acc`s lst pred e n − 2k + 2 acc`s lst succ e Au total, il y a donc au pire : n/2 (n − 2k + 2) acc`s lst pred et autant d’acc`s lst succ. e e k=1 c IFSIC 2004
  • 74.
    74 Circuits. Composantes fortement connexes Mais : n/2 n(n+2) 4 si n est pair, (n − 2k + 2) = (n+1)2 k=1 4 si n est impair soit O(n2 ) acc`s lst pred, lst succ. e 7.2 Application des graphes sans circuit : fonction ordinale D´finition 7.2 On appelle fonction ordinale d’un graphe G = (X,Γ) e une fonction f : X → N telle que (x,y) ∈ Γ ⇒ f (x) < f (y) On peut aussi d´finir une fonction ordinale inverse f t , qui n’est autre qu’une fonction ordinale e du graphe transpos´ : e (x,y) ∈ Γ ⇒ f t (x) > f t (y) Th´or`me 7.3 Un graphe poss`de une fonction ordinale si et seulement e e e si il est sans circuit. D´monstration. Supposons que G poss`de une fonction ordinale, et qu’il ait un circuit : e e γ = [xi1 ,xi2 , . . . ,xik ,xi1 ] On a : f (xi1 ) < f (xi2 ) < . . . < f (xik ) < f (xi1 ) d’o`, par transitivit´ : u e f (xi1 ) < f (xi1 ) ce qui est absurde. R´ciproquement supposons G sans circuit et consid´rons l’algorithme de Marimont ne e e prenant en compte que les points d’entr´e. Au pas d’it´ration no k, le sous-graphe courant a des e e points d’entr´e E. On pose alors, par d´finition : e e ∀x ∈ E : f (x) = k (k = 1,2, . . . ,p) o` p est le nombre de pas, major´ par n. u e f d´finit bien une fonction ordinale : si (y,z) ∈ Γ alors le sommet y est ˆt´ avant le sommet e oe z, car z ne peut pas ˆtre point d’entr´e d’un sous-graphe poss´dant le sommet y ; donc : (y,z) ∈ e e e Γ ⇒ f (y) < f (z). De plus, tous les sommets ´tant ˆt´s, f est bien d´finie sur X. P e oe e c IFSIC 2004
  • 75.
    7.2. Application desgraphes sans circuit : fonction ordinale 75 La d´monstration du th´or`me montre que l’on peut obtenir une fonction ordinale en ap- e e e pliquant l’algorithme de Marimont ` partir des points d’entr´e, ` condition d’introduire un a e a compteur de marquage des sommets. Nous laissons au lecteur le soin de r´-´crire l’algorithme. ee Remarquons qu’une fonction ordinale inverse peut aussi ˆtre obtenue en op´rant ` partir des e e a points de sortie. Enfin, ces deux fonctions ordinales s’interpr`tent concr`tement comme suit : e e • ` partir des points d’entr´e : a e ∀x ∈ X : f (x) = 1 + longueur maximum des chemins issus d’un point d’entr´e et aboutissant ` x e a La relation suivante est v´rifi´e : e e 1 si Γ−1 (x) = ∅ ∀x ∈ X : f (x) = maxy∈Γ−1 (x) (f (y)) + 1 si Γ−1 (x) = ∅ • ` partir des points de sortie : a ∀x ∈ X : f t (x) = 1 + longueur maximum des chemins issus de x et aboutissant ` un point de sortie a La relation suivante est v´rifi´e : e e t 1 si Γ(x) = ∅ ∀x ∈ X : f (x) = maxy∈Γ(x) (f (y)) + 1 si Γ(x) = ∅ Une fonction ordinale n’est pas n´cessairement injective : deux sommets distincts x = y peuvent e avoir une mˆme image f (x) = f (y). Une fonction non injective ne convient donc pas pour e num´roter les sommets. C’est pourquoi l’on introduit la notion de num´rotation conforme, qui e e n’est autre qu’une fonction ordinale injective. D´finition 7.4 Soit G = (X,Γ) avec card(X) = n. On appelle e num´rotation conforme de X une injection e num : X ⇒ N telle que (x,y) ∈ Γ ⇒ num(x) < num(y) Th´or`me 7.5 Un graphe G poss`de une num´rotation conforme si et e e e e seulement si il est sans circuit. D´monstration. On peut d´montrer ce th´or`me comme corollaire du th´or`me pr´c´dent 7.3. e e e e e e e e Toutefois, nous pr´f´rons en donner une d´monstration directe: celle-ci montre comment obtenir ee e une telle num´rotation ` partir d’une exploration en profondeur. e a i) Si G poss`de une num´rotation conforme, il est clairement sans circuit. e e ii) Pour montrer la r´ciproque, on suppose le graphe sans circuit, et on utilise l’algorithme e suivant, bas´ sur l’ exploration en profondeur: partant d’un sommet quelconque, on explore la e descendance de ce sommet, en num´rotant les sommets visit´s de mani`re d´croissante lors de e e e e leur sortie de la pile. Tant qu’il reste des sommets non num´rot´s, on r´it`re le proc´d´, en e e e e e e se limitant au sous-graphe engendr´ par les sommets non encore num´rot´s. L’analyse de cet e e e algorithme est donn´e ci-dessous: e Invariant : c IFSIC 2004
  • 76.
    76 Circuits. Composantes fortement connexes T =ensemble des sommets d´j` num´rot´s, D = X T ea e e Le sous-graphe engendr´ par T poss`de une num´rotation conforme, e e e der num=plus petit num´ro de sommet dans T (dernier num´ro attribu´). e e e Arrˆt : D = ∅. e Progression : Soit x ∈ D. Explorer en num´rotant la descendance de x (voir d´tail de ce e e traitement ci-apr`s). e Valeurs initiales : D = X, T = ∅, der num=une valeur quelconque telle que der num > n(= card(X)). Explorer en num´rotant: effectuer l’exploration en profondeur de la descendance de x dans e le sous-graphe engendr´ par les sommets de D (non encore num´rot´s). La num´rotation des nou- e e e e veaux sommets visit´s se fait lors de leur sortie de pile, en faisant d´croˆ le compteur der num. e e ıtre Ce traitement se termine lorsque l’exploration est finie. A ce moment, tous les descendants de x dans le graphe sont num´rot´s, et cette num´rotation est conforme. e e e Avant de d´montrer que cet algorithme permet bien d’obtenir une num´rotation conforme, e e nous en donnons un exemple afin de faciliter la compr´hension. e 1. sommet de d´part: h (choix arbitraire) e 3. sommet de d´part: c e pile pile h c hk ce hkl cef hklo ce num(f)=6 hkl num(o)=15 cei hk num(l)=14 ce num(i)=5 hkm c num(e)=4 hk num(m)=13 ε num(c)=3 hkn fin de la troisi`me ´tape; der num = 3 e e hk num(n)=12 h num(k)=11 4. sommet de d´part: a e ε num(h)=10 pile fin de la premi`re ´tape; der num = 10 e e a ε num(a)=2 2. sommet de d´part: d e fin de la quatri`me ´tape; der num = 2 e e pile d 5. sommet de d´part: b e dg pile dgj b dg num(j)=9 ε num(b)=1 d num(g)=8 fin de la num´rotation e ε num(d)=7 fin de la deuxi`me ´tape; der num = 7 e e c IFSIC 2004
  • 77.
    7.3. Application :fermeture anti-transitive et τ -minimalit´ e 77 a f l d g j b m o e h k c i n Fig. 7.1 – Construction d’une num´rotation conforme e Preuve. Il faut montrer que (x,y) ∈ Γ ⇒ num(x) < num(y). pour cela, il suffit de montrer que (x,y) ∈ Γ ⇒ y sort de la pile avant x. Soit donc (x,y) ∈ Γ. Lorsque y passe de l’´tat dehors ` l’´tat en attente, c’est-`-dire lorsque e a e a y est empil´, trois cas sont ` consid´rer selon le statut de x: e a e 1. x est dehors. Cela veut dire que x n’a pas encore ´t´ empil´. Mais, par hypoth`se, le graphe ee e e est sans circuit, et comme (x,y) ∈ Γ, on a n´cessairement (y,x) ∈ Γ+ . Donc, x ne sera pas e empil´ tant que y est dans la pile (les sommets empil´s pendant que y est dans la pile sont e e n´cessairement des descendants de y). Il en r´sulte que y sort de la pile avant que x soit e e empil´, donc a fortiori avant que x soit d´pil´. e e e Dans l’exemple, ce cas se produit notamment pour x=e, y=h. 2. x est en attente. Cela veut dire que x est dans la pile lorsque y est empil´. D’apr`s les e e propri´t´s structurelles de la pile, y sera n´cessairement d´pil´ avant x. ee e e e Dans l’exemple, ce cas se produit notamment pour x=k, y=l ou m ou n. 3. x est termin´ (c’est-`-dire d´j` num´rot´). Ce cas ne peut se produire, car il impliquerait e a ea e e que x ait ´t´ empil´, puis d´pil´, sans que son successeur y n’ait ´t´ visit´. ee e e e ee e P Remarques. 1. Si, dans l’algorithme pr´c´dent, on avait num´rot´ les sommets dans l’ordre de leur sortie de e e e e pile (et non pas en d´croissant) on aurait obtenu une num´rotation conforme inverse c’est-`-dire e e a une fonction ordinale inverse injective, v´rifiant e (x,y) ∈ Γ ⇒ num(x) > num(y) 2. Une num´rotation conforme peut aussi ˆtre obtenue pratiquement ` partir de la fonction e e a ordinale des points d’entr´e, en num´rotant arbitrairement les sommets de niveau 1, puis ceux e e de niveau 2, etc., avec une num´rotation strictement croissante. e 7.3 Application : fermeture anti-transitive et τ -minimalit´ e A la section 5.5 nous avons mis en ´vidence la notion de τ -minimalit´, tout en faisant e e remarquer qu’un graphe donn´ pouvait poss´der plusieurs ´quivalents τ -minimaux. e e e Par contre, comme va le montrer le th`or`me suivant, un graphe sans circuit G poss`de un e e e ∨ ∨ seul ´quivalent τ -mimimal, not´ G. L’int´rˆt de G provient du fait que c’est le seul graphe offrant e e ee les mˆmes possibilit´s de cheminement que G, sans qu’aucun arc ne soit redondant. e e c IFSIC 2004
  • 78.
    78 Circuits. Composantes fortement connexes On pr´cise d’abord la notion de graphe fortement anti-transitif : e D´finition 7.6 Un graphe est fortement anti-transitif si (∃u = [x ∗ y] ∧ e |u| ≥ 2) ⇒ (x,y) ∈ Γ. Autrement dit, aucun chemin de longueur sup´rieure ou ´gale ` 2 ne peut ˆtre sous-tendu e e a e par un arc. On a le r´sultat suivant : e Proposition 7.7 Soit G = (X,Γ) un graphe sans circuit. Il existe un seul graphe partiel de G τ -minimal τ -´quivalent ` G (D´f. 5.13 et 5.14). e a e ∨ Ce graphe G est un ´l´ment maximal de l’ensemble des graphes partiels ee de G fortement anti-transitifs. D´monstration. Soit τ (G) la classe d’´quivalence de G. Si H ∈ τ (G), alors H est sans circuit. e e En effet, si H poss´dait un circuit passant par x, alors (x,x) serait une boucle de H + (= G+ ) et e G aurait un circuit passant par x. Supposons alors que τ (G) ait deux ´l´ments minimaux G1 = (X,Γ1 ) et G2 = (X,Γ2 ) et soit ee (x,y) ∈ Γ1 et (x,y) ∈ Γ2 On a donc (x,y) ∈ Γ+ = Γ+ d’o` : 1 2 u ∃z ∈ X,z = x,z = y : (x,z) ∈ Γ+ ∧ (z,y) ∈ Γ+ 2 2 soit encore : (x,z) ∈ Γ+ ∧ (z,y) ∈ Γ+ 1 1 Mais aucun chemin allant de x ` z dans G1 ne peut passer par y, sans quoi on aurait : a (y,z) ∈ Γ+ ∧ (z,y) ∈ Γ+ ⇒ (y,y) ∈ Γ+ donc G1 aurait un circuit. 1 1 1 De mˆme, aucun chemin allant de z ` y dans G1 ne peut passer par x. e a Il existe donc, dans G1 , un chemin allant de x ` y, distinct de l’arc (x,y), ce qui contredit la a ∨ τ -minimalit´ de G1 . L’hypoth`se (x,y) ∈ Γ1 et (x,y) ∈ Γ2 est donc absurde, d’o` G1 = G2 =G. e e u D’autre part on sait que dans une partie finie, l’unicit´ de l’´l´ment minimal en fait un e ee ∨ minimum, c’est ` dire un ´l´ment comparable ` tous les ´l´ments de cette partie. G est donc un a ee a ee graphe partiel de G. ∨ Enfin, montrons que G est un ´l´ment maximal de l’ensemble des graphes partiels de G, ee ∨ fortement anti-transitifs. On remarque d’abord que G est le seul graphe fortement anti-transitif de τ (G). En effet, soit H = (X,Σ), H ∈ τ (G) et H fortement anti-transitif. Alors : ∀H = (X,Σ ) H, H’ est fortement anti-transitif. Soit (x,y) ∈ Σ et (x,y) ∈ Σ . Alors (x,y) ∈ Σ + et ∨ par cons´quent, H ∈ τ (G) d’o` on conclut que H est minimal dans τ (G), et donc H = G. e u c IFSIC 2004
  • 79.
    7.3. Application :fermeture anti-transitive et τ -minimalit´ e 79 Enfin, si G’ est un graphe partiel de G, fortement anti-transitif, on a : G G et donc : (1) G + G+ ∨ ∨+ ∨+ Si par ailleurs G G alors G G + mais comme G = G+ on en d´duit : e (2) G+ G + . De (1) et (2) d´coule : e ∨ G ∈ τ (G) c’est ` dire G =G a P Nous proposons ci-dessous (texte page 80) un algorithme, adapt´ de l’algorithme de Roy- e ∨ Warshall, permettant d’obtenir G. Il consiste ` construire la fermeture transitive de G et ` a a rep´rer les arcs nouveaux introduits par les op´rations Θ. On travaille sur deux copies de G, et e e ` l’issue de l’algorithme on v´rifie, sur G+ , que G ´tait bien sans circuit. (On se place dans le a e e cas o` X = 1..n). u a b d c f g e Fig. 7.2 – Un graphe sans circuit Exemple Soit le graphe repr´sent´ figure 7.2. Les op´rations Θ successives produisent les e e e r´sultats suivants: e Op´ration ajout dans G2 e retrait dans G1 Θa (d,b) (c,b) Θb (a,f),(d,f) (c,f) Θc (d,e),(g,a),(g,b),(g,f) (d,a) Θd (g,c),(g,e) Θe Θf (a,e),(b,e) (c,e),(c,f) Θg D’o` la fermeture τ -minimale repr´sent´e figure 7.3 u e e c IFSIC 2004
  • 80.
    80 Circuits. Composantes fortement connexes a b d c f g e Fig. 7.3 – Fermeture τ -mininale GRAPHE SANS CIRCUIT : τ -MINIMALITE GRAPHE tau-minimalite(GRAPHE G) c’est local GRAPHE G1, G2 ; SOMMET x, y, z; ENS[SOMMET] X; d´but e G1 ← G ; G2 ← G ; X ← G.lst som ; pour tout x de X pour tout y de X si G2.validarc(y, x) alors pour tout z de X si G2validarc(x, z) alors G1.oter arc(y,z) ; G2.ajout arc(y,z) fsi fpourtout fsi fpourtout fpourtout ; si existe x de G2.lst som telque G2.validarc(x, x) alors -- G a un circuit : pas de fermeture τ -minimale sinon Result ← G1 fsi fin c IFSIC 2004
  • 81.
    7.4. Composantes fortementconnexes 81 7.4 Composantes fortement connexes 7.4.1 D´finition e D´finition 7.8 Soit G = (X,Γ) un graphe. On consid`re la relation e e binaire sur X : xRy ≡ (x ∈ Γ∗ (y)) ∧ (y ∈ Γ∗ (x)) C’est une relation d’´quivalence dont les classes s’appellent composantes e fortement connexes de G (en abr´g´ : c.f.c.). e e Proposition 7.9 Deux sommets appartiennent ` la mˆme c.f.c. si et a e seulement si ils sont situ´s sur un mˆme circuit. e e e ´ D´monstration. Evident, puisque (x ∈ Γ∗ (y))∧(y ∈ Γ∗ (x)) ⇔ x et y sont sur un mˆme circuit. e P Proposition 7.10 Si deux sommets x et y appartiennent ` une mˆme a e c.f.c. C, alors tout chemin de x ` y est enti`rement inclus dans C. a e D´monstration. Soit u un chemin de x ` y (par hypoth`se, de tels chemins existent), et z un e a e sommet de ce chemin. On a donc : u = u1 · u2 , avec u1 chemin de x ` z, et u2 chemin de z ` a a y.Par hypoth`se, on a aussi : il existe un chemin u de y ` x. Consid´rant u2 · u · u1 , on obtient e a e un circuit de z ` z, passant par x et y. Donc z appartient ` la mˆme c.f.c. que x et y. a a e D´finition 7.11 Un graphe est fortement connexe s’il poss`de une seule e e composante fortement connexe. On remarque donc que, si |X| = n, un graphe G ∈ G(X) poss`de e - au plus n c.f.c.; ce cas extrˆme est obtenu si et seulement si G est sans circuit (chacune e c.f.c. est alors r´duite ` un seul sommet), e a - au moins une c.f.c. : ce cas extrˆme est obtenu lorsque le graphe est fortement connexe e (tous les sommets sont sur un mˆme circuit, ou encore, chaque couple de sommets est reli´ par e e au moins un chemin). c IFSIC 2004
  • 82.
    82 Circuits. Composantes fortement connexes D´finition 7.12 Soit R une relation d’´quivalence sur X. Le graphe e e r´duit selon les classes de R est d´fini par : e e GR = (X/R,ΓR ), o` u X/R = ensemble des classes de la relation R (ensemble quotient) (Ci ,Cj ) ∈ ΓR ⇔ ∃x ∈ Ci ,∃y ∈ Cj : ((x,y) ∈ Γ) ∧ (Ci = Cj ) Autrement dit, tous les sommets situ´s dans une mˆme classe sont confondus en un seul sommet e e (on ne les distingue plus les uns des autres), et un arc relie une classe ` une autre chaque fois que, a dans le graphe initial, un repr´sentant de la premi`re classe ´tait pr´d´cesseur d’un repr´sentant e e e e e e de la seconde classe. Si on prend pour R la relation ayant servi ` d´finir les composantes fortement a e connexes, on obtient le graphe r´duit selon les c.f.c.. e Proposition 7.13 Le graphe r´duit selon les composantes fortement e connexes est sans circuit. D´monstration. Si il existait un circuit e Ci1 , . . . ,Cik ,Ci1 dans GR , alors il existerait un circuit xi1 ∗ . . . ∗ xik ∗ xi1 dans G, avec xi1 ∈ Ci1 , . . . ,xik ∈ Cik et ceci impliquerait Ci1 = . . . = Cik P La propri´t´ pr´c´dente signifie en particulier que, en suivant un chemin de G, si on sort ee e e d’une c.f.c. on ne peut plus y revenir. D´finition 7.14 On appelle composante fortement connexe terminale e de G un point de sortie du graphe r´duit. e Autrement dit, si en parcourant un chemin de G on atteint une c.f.c. terminale, on ne peut plus en sortir. Proposition 7.15 Soit C un sous-ensemble de sommets tel que, ∀x ∈ C, ∀y ∈ C, (x ∈ Γ∗ (y)) ∧ (y ∈ Γ∗ (x)). Si C n’a pas d’arc sortant, alors C est une c.f.c. terminale. D´monstration. Clairement, tous les sommets de C sont dans une mˆme c.f.c. C . On a donc e e C ⊆ C . Supposons que C = C . Cela signifie qu’il existe un sommet z, tel que z ∈ C et z ∈ C. Puisque x ∈ C on a x ∈ C et donc il existe un chemin de x ` z. Comme x ∈ C et z ∈ C, ce a chemin comporte un arc sortant de C, ce qui contredit l’hypoth`se. Donc, C = C , c’est-`-dire e a C est une c.f.c. Comme elle n’a pas d’arc sortant, elle est terminale. P Dans les sections suivantes, on donne trois algorithmes permettant de d´terminer les c.f.c. e d’un graphe. Puis nous verrons quelles applications on peut tirer de cette d´composition. e c IFSIC 2004
  • 83.
    7.4. Composantes fortementconnexes 83 7.4.2 Algorithme de FOULKES Cet algorithme s’applique ` la fermeture transitive G+ de G. (Il suppose donc celle-ci d´j` a ea d´termin´e). Il est bas´ directement sur la d´finition, qui peut s’´crire encore : e e e e e xRy ⇔ (x = y) ∨ (x,y) ∈ Γ+ ∧ (y,x) ∈ Γ+ 7.4.2.1 Principe Il est tr`s simple, et s’appuie sur trois constatations : e – un sommet appartient ` sa propre classe a – un sommet ne peut appartenir qu’` une seule classe a – si un sommet n’est pas son propre descendant, il est seul dans sa classe (il n’est pas situ´ e sur un circuit). Les sommets sont examin´s s´quentiellement; soit x le sommet courant. Trois cas sont ` distin- e e a guer quant ` la situation de x : a 1. x a d´j` ´t´ rang´ comme ´l´ment de la classe d’un sommet y examin´ avant lui (c’est-`-dire eae e e ee e a y ≤ x). Dans ce cas, cl(x) = cl(y) (d´j` calcul´e) ea e 2. x n’est pas encore class´ et n’est pas son propre descendant, c’est-`-dire (x,x) ∈ Γ+ . Dans e a ce cas, cl(x) = {x}. 3. x n’est pas encore class´, et (x,x) ∈ Γ+ . Dans ce cas, les ´l´ments de cl(x), outre x lui- e ee mˆme, sont ` rechercher parmi les y tels que y > x; en effet, s’il existait y ≤ x avec e a y ∈ cl(x), x aurait ´t´ class´ lors de l’examen de y, ant´rieur ` celui de x. ee e e a L’analyse de l’algorithme en d´coule imm´diatement : e e Invariant (1 ≤ x ≤ n) ∧ P RIS = {y | cl(y) est calcul´ } ∧ e {1 .. x − 1} ⊆ P RIS Condition d’arrˆt x = n e Progression cas x ∈ P RIS ⇒ cl(x)←cl(y) (x ∈ P RIS) ∧ ((x,x) ∈ Γ+ ) ⇒ cl(x)←{x} (x ∈ P RIS) ∧ ((x,x) ∈ Γ+ ) ⇒ cl(x)←{x}; pourtout y de [x + 1..n] faire si ((x,y) ∈ Γ+ ) ∧ ((y,x) ∈ Γ+ ) alors cl(x)←cl(x) ∪ {y} ; fsi fpour fcas ; P RIS←P RIS ∪ cl(x) ; c IFSIC 2004
  • 84.
    84 Circuits. Composantes fortement connexes x←x + 1 Valeurs initiales x←1 ; P RIS←∅ 7.4.2.2 Texte de l’algorithme Il est donn´ page 84 e ALGORITHME DE FOULKES ENS[SOMMET] SOMMET::cl : ; foulkes(GRAPHE G+ ) c’est local ENS[SOMMET] PRIS; SOMMET x, y; d´but e PRIS ← ∅ ; pour x depuis 1 jqa n faire si x ∈ PRIS alors x.cl ←{x} ; si G+ .validarc(x, x) alors -- x est sur un circuit ; recherche des sommets de sa classe pour y depuis x + 1 jqa n faire si G+ .validarc(x, y) et G+ .validarc(y, x) alors x.cl ← x.cl ∪{y} fsi fpour ; pour tout y de x.cl faire y.cl ← x.cl fpourtout ; PRIS ← PRIS ∪ x.cl fsi fsi fpour fin 7.4.2.3 Complexit´ e – construction de la fermeture transitive : au moins O(n3 ) – le nombre d’acc`s validarc est ≤ n2 e c IFSIC 2004
  • 85.
    7.4. Composantes fortementconnexes 85 7.4.3 Algorithme descendants-ascendants 7.4.3.1 Principe Il op`re directement sur le graphe donn´ G, et utilise les algorithmes de recherche des ascen- e e dants et des descendants d’un sommet donn´. e Si on d´signe par asc(x) (resp. desc(x)) la fonction d´livrant l’ensemble des ascendants (resp. e e descendants) de x, on peut ´crire : e cl(x) = asc(x) ∩ desc(x) En fait, lorsqu’on calcule la c.f.c. d’un sommet x, il n’est pas n´cessaire de calculer l’ensemble de e tous les ascendants (resp. descendants) de x. En effet, comme le montre la proposition suivante, lors de l’exploration de la descendance de x (calcul de desc(x)), si on rencontre un sommet y d´j` ea class´, alors aucun descendant de y ne peut ˆtre dans la classe de x. (Mˆme chose en rempla¸ant e e e c descendant par ascendant). Par cons´quent, dans la proc´dure de recherche des descendants de x (resp. ascendants) on e e peut se limiter au sous-graphe engendr´ par les sommets de G non encore class´s. e e Proposition 7.16 Soit y ∈ desc(x); si y ∈ cl(x) alors (desc(y)∩cl(x) = ∅) Soit y ∈ asc(x); si y ∈ cl(x) alors (asc(y) ∩ cl(x) = ∅) D´monstration. Soit y ∈ Γ∗ (x) ∧ y ∈ cl(x); supposons que z ∈ Γ∗ (y) ∩ cl(x). On a alors : e z ∈ Γ∗ (y) ∧ x ∈ Γ∗ (z) ⇒ x ∈ Γ∗ (y) et comme y ∈ Γ∗ (x) ceci contredit y ∈ cl(x). On d´montre de mˆme la deuxi`me partie de la proposition (ascendants) P e e e Ici, on donne une version r´cursive du calcul des ascendants, mais les autres versions (largeur e ou profondeur it´ratives) conviendraient. e 7.4.3.2 Texte de l’algorithme Le texte est donn´ page 86 e 7.4.3.3 Complexit´ e Chaque recherche de descendants-non-pris et ascendants-non-pris n´cessite exactement e card(Γ∗ (x) ∩ (X P RIS)) ≤ n − #(sommets class´s) acc`s lst succ e e card (Γ−1 )∗ (x) ∩ (X P RIS) ≤ n − #(sommets class´s) acc`s lst pred e e Or ` l’examen de x, il y a au moins x − 1 sommets class´s, et donc la complexit´ est, au a e e plus : n(n + 1) acc`s lst succ, autant d’acc`s lst pred, soit e e 2 n2 O( ) acc`s lst succ, lst pred e 2 c IFSIC 2004
  • 86.
    86 Circuits. Composantes fortement connexes COMPOSANTES FORTEMENT CONNEXES : ASCENDANTS-DESCENDANTS ENS[SOMMET] SOMMET::cl : ; ascendants-descendants(GRAPHE G) c’est local ENS[SOMMET] D, A, PRIS; d´but e -- initialisation PRIS ← ∅ ; -- classement pour tout x de G.lst som si x ∈ PRIS alors A ← asc non pris(x) ; D ← desc non pris(x) ; x.cl ← A ∩ D ; pour tout y de x.cl faire y.cl ← x.cl fpourtout ; PRIS ← PRIS ∪ x.cl fsi fpourtout fin ENS[SOMMET] S; ENS[SOMMET] asc non pris (SOMMET x) c’est d´but e S ← ∅ ; anp(x) ; Result ← S fin; anp(SOMMET y) c’est local ENS[SOMMET] E; SOMMET z; d´but e S ← S ∪{y} ; E ← G.lst pred(y) ; E ← E PRIS ; pour tout z de E faire si z ∈ S alors anp(z) fsi fpourtout fin;; ENS[SOMMET] desc non pris (SOMMET x) c’est ; -- identique ` asc non pris en rempla¸ant lst pred par lst succ a c c IFSIC 2004
  • 87.
    7.4. Composantes fortementconnexes 87 7.4.4 Algorithme de TARJAN Cet algorithme fournit non seulement la d´composition du graphe en composantes fortement e connexes, mais de plus il d´livre les composantes avec une num´rotation conforme (par rapport e e au graphe r´duit selon ses composantes fortement connexes). e 7.4.4.1 Principe de l’algorithme de TARJAN Cet algorithme g´n´ralise aux graphes quelconques l’algorithme de num´rotation conforme e e e des graphes sans circuit, bas´ sur l’exploration en profondeur, vu en 6.3.2. Il est bas´ sur l’ob- e e servation suivante : si le graphe ´tait sans circuit, les c.f.c. se confondraient avec les sommets, et e l’algorithme de num´rotation conforme des sommets r´pond ` la question. Si le graphe poss`de e e a e des circuits, on se ram`ne ` un graphe sans circuit en consid´rant le graphe r´duit selon les c.f.c., e a e e ce qui revient ` traiter des sous-ensembles de sommets situ´s sur un mˆme circuit comme un a e e seul “macro-sommet”. Or, lors d’une exploration en profondeur, on est capable de d´terminer e des “segments” de pile dont tous les ´l´ments appartiennent ` un mˆme circuit : chaque fois ee a e que l’on visite un arc allant du sommet de pile y ` un sommet z appartenant ` la pile, tous les a a sommets situ´s dans la pile depuis z jusqu’` y sont sur un mˆme circuit (donc appartiennent ` e a e a une mˆme c.f.c.). De plus, d’apr`s la proposition 7.15, on saura qu’un tel ensemble de sommets e e constitue une c.f.c. (terminale dans le sous-graphe engendr´ par les sommets non encore class´s) e e d`s que tous les arcs sortants de ce sous-ensemble sont visit´s. e e Pour mettre en oeuvre cette id´e, il suffit de remplacer les sommets par des sous-ensembles e de sommets dans l’algorithme de num´rotation conforme. On va donc travailler sur un graphe e qui, ` chaque ´tape, sera une r´duction du graphe initial selon des sous-ensembles de sommets a e e reconnus comme faisant partie d’une mˆme c.f.c. e Invariant – X est partitionn´ en C1 , . . . ,Ck : e X = C1 ∪ . . . Ck , et ∀i = j : Ci ∩ Cj = ∅ – Chaque sous-ensemble C est dans l’un des trois ´tats suivants: e – dehors, et dans ce cas, |C| = 1, et le sommet constituant C n’a pas ´t´ visit´; ee e – en attente (dans la pile): ∀y ∈ C, y est visit´ et au moins un arc sortant de C n’est e pas visit´; e – termin´: ∀y ∈ C, y est visit´ et tous les arcs sortants de C ont ´t´ visit´s. Dans ce e e ee e cas, C est une c.f.c. Arrˆt Pile vide (pas de sous-ensemble en attente). Ceux qui sont termin´s constituent les c.f.c. e e d´j` d´termin´es. S’il reste des sous-ensembles dehors, on recommence une exploration ` partir ea e e a de l’un des ces sous-ensembles. Sinon, toutes les c.f.c. ont ´t´ obtenues. ee Initialement Soit {x} le sous-ensemble (` un sommet) dont est issu l’exploration a – X = {1} ∪ {2} ∪ . . . {n} (en supposant que les sommets sont num´rot´s de 1 ` n. e e a c IFSIC 2004
  • 88.
    88 Circuits. Composantes fortement connexes – num=num´ro initial de c.f.c e – {x} est empil´ si Γ(x) = ∅, termin´ sinon (dans ce cas, c’est la c.f.c. num´ro num). e e e – Tous les autres sous-ensembles sont dehors. – Aucun arc n’a ´t´ visit´. ee e Cette situation initiale v´rifie bien l’invariant. En particulier, si Γ(x) = ∅, {x} = cf c(x) puisque e x est alors point de sortie. Progression Soit C le sommet de pile. – Si C n’a pas d’arc sortant non visit´, alors e – A.depiler ; mettre C dans T , ensemble des sommets termin´s ; e – num ←num − 1 (C constitue une c.f.c, on lui attribue le num´ro num) e – Sinon, soit (y,z) un arc sortant de C, non visit´, et Cz le sous-ensemble contenant z (par e construction, il y en a un et un seul, cf. invariant). – l’arc (y,z) devient visit´; e – Si Cz ∈ D (dans ce cas, Cz = {z}), alors A.empiler(Cz ); enlever Cz de D – Si Cz ∈ A, fusionner dans C tous les sous-ensembles qui sont dans la pile depuis Cz jusqu’` C (tous les sommets de ces sous-ensembles sont sur un mˆme circuit) a e – Si Cz ∈ T , pas d’action Nous ne d´montrerons pas formellement que la progression maintient l’invariant, mais le e lecteur peut ais´ment s’en convaincre. e 7.4.4.2 Exemple Nous allons d’abord montrer sur l’exemple de la figure 7.4 le fonctionnement de l’algorithme. n k a d c g h o m l b f e i j Fig. 7.4 – Exemple pour l’ algorithme de TARJAN c IFSIC 2004
  • 89.
    7.4. Composantes fortementconnexes 89 PILE {a} {a} {b} {a} {b} {d} {a} {b} {d} (b) Circuit d´tect´ vers b e e {a} {b, d} {a} {b, d} {c} {a} {b, d} {c} {g} {a} {b, d} {c} {g} {h} {a} {b, d} {c} {g} {h} {o} {a} {b, d} {c} {g} {h} {o} (h) Circuit d´tect´ vers h e e {a} {b, d} {c} {g} {h, o} {a} {b, d} {c} {g} {h, o} (g) Circuit d´tect´ vers g e e {a} {b, d} {c} {g, h, o} Tous les arcs issus de o sont visit´s: on ”remonte” ` h e a {a} {b, d} {c} {g, h, o} {i} {a} {b, d} {c} {g, h, o} {i} {j} {a} {b, d} {c} {g, h, o} {i} {j} (h) Circuit d´tect´ vers h e e Tous les arcs issus de j sont visit´s: on ”remonte” ` i puis e a {a} {b, d} {c} {g, h, o, i, j} ` h puis ` g a a Tous les arcs sortant de {g,h,o,i,j} sont visit´s: on d´pile e e ce sous-ensemble, qui est la c.f.c. C15 = {g,h,o,i,j} {a} {b, d} {c} {a} {b, d} {c} {f } {a} {b, d} {c} {f } {e} g est d´j` class´; tous les arcs sortant de {e} sont visit´s: ea e e {a} {b, d} {c} {f } {e} (g) on d´pile cette c.f.c C14 = {e} e {a} {b, d} {c} {f } (d) Circuit d´tect´ vers d e e Tous les arcs issus de f sont visit´s: on ”remonte” ` c puis e a {a} {b, d, c, f } ` d puis ` b a a {a} {b, d, c, f } (f ) f appartient d´j` au sommet d e pile: pas de nouveau circuit. ea {a} {b, d, c, f } Tous les arcs sortants de {b,d,c,f } sont visit´s : e on d´pile cette c.f.c C13 = {b,d,c,f } e {a} {a} (d) d est d´j` class´; tous les arcs sortant de {a} sont visit´s: ea e e on d´pile cette c.f.c C12 = {a} e ε Pile vide : toute la descendance de f a a ´t´ class´e. ee e ¯ c IFSIC 2004
  • 90.
    90 Circuits. Composantes fortement connexes Repartir d’un sommet non class´. e {k} {k} (a) a est d´j` class´. ea e {k} {m} {k} {m} {n} {k} {m} {n} (m) Circuit d´tect´ vers m e e {k} {m, n} Tous les arcs issus de n sont visit´s: on ”remonte” ` m e a Tous les arcs sortant de {m,n} sont visit´s: e on d´pile cette c.f.c C11 = {m,n} e {k} Tous les arcs sortant de {k} sont visit´s: e on d´pile cette c.f.c C10 = {k} e ε { } { } (b) b est d´j` class´. ea e { } (m) m est d´j` class´. ea e Tous les arcs sortant de {l} sont visit´s: e on d´pile cette c.f.c C9 = { } e ε ´ ´ Pile vide et tous les sommets sont class´s : EXECUTION TERMINEE. e On a obtenu 7 c.f.c, num´rot´es de 9 ` 15. On effectue une translation de num´ros, en e e a e retranchant 8, pour avoir une num´rotation contigu¨ de 1 ` 7. On obtient alors le graphe r´duit e e a e (figure 7.5) qui montre qu’on a bien une num´rotation conforme e (Ci ,Cj ) ∈ ΓR ⇒ i < j C5 C1 {b,c,d,f } C7 {k} {g,h,o,i,j} C3 C4 {m,n} {a} C6 C2 {e} { } Fig. 7.5 – Graphe r´duit de la figure 7.4 e 7.4.4.3 Mise en œuvre et texte de l’algorithme Pour r´aliser l’algorithme ci-dessus, en plus de la pile, on attache ` chaque sommet y ∈ X e a les attributs suivants : c IFSIC 2004
  • 91.
    7.4. Composantes fortementconnexes 91 ENT SOMMET::pospile d´finit la position de y dans la pile (non d´fini si y n’a e e pas encore ´t´ atteint). ee ENT SOMMET::marque - 0 si y n’a pas encore ´t´ atteint, ee - y.pospile lorsque y est empil´, e - puis, ´ventuellement diminu´e lorsque y est rep´r´ e e ee comme appartenant ` la c.f.c. d’un sommet empil´ a e avant lui. SOMMET SOMMET::pred p`re du sommet y dans l’arborescence d’exploration. e ENS[SOMMET] SOMMET::S ensemble des successeurs de y, dans le sous- graphe partiel des sommets non class´s, qui ne sont pas encore e empil´s (comme dans l’algorithme d’´num´ration des e e e chemins ´l´mentaires). ee ENT SOMMET::ncl num´ro de la c.f.c. ` laquelle appartient y (ind´fini tant e a e que y n’est pas class´). e Le texte de l’algorithme est donn´ page 92 et suivantes. e c IFSIC 2004
  • 92.
    92 Circuits. Composantes fortement connexes ALGORITHME DE TARJAN tarjan(GRAPHE G) c’est local PILE[SOMMET] L; ENS[SOMMET] NC; -- sommets non class´s e SOMMET finchemin, z ; ENT compt ; -- compteur du num´ro de la cfc courante e d´but e depuis NC ← G.lst som ; L.creer ; compt ← 0 ; pourtout y de NC y.marque ← 0 fpourtout ; jusqua NC = ∅ faire finchemin ← ´l´ment(NC) ; L.empiler(finchemin) ; ee finchemin.S ← G.lst succ(finchemin) ; finchemin.S ← finchemin.S ∩ NC ; finchemin.marque ← L.taille ; finchemin.pospile ← L.taille ; depuis jusqua L.vide faire si finchemin.S = ∅ alors z ← ´l´ment(finchemin.S) ; ee si z.marque = 0 alors L.empiler(z) ; z.S ← G.lst succ(z) ; z.S ← z.S ∩ NC ; z.marque ← L.taille ; z.pospile ← L.taille ; z.pred ← finchemin ; finchemin ← z sinon si finchemin.marque > z.marque alors finchemin.marque ← z.marque fsi fsi sinon si finchemin.marque = finchemin.pospile alors z ← finchemin ; finchemin ← z.pred ; finchemin.marque ← z.marque sinon -- sortie d’une nouvelle cfc depuis compt ← compt + 1 ; jusqua L.taille < finchemin.pospile c IFSIC 2004
  • 93.
    7.4. Composantes fortementconnexes 93 faire z ← L.sommetpile ; z.ncl ← compt ; NC ← NC {z} ; L.d´piler e fait ; finchemin ← finchemin.pred fsi fsi fait fait fin 7.4.4.4 Complexit´ e Elle est du mˆme ordre que l’algorithme de recherche profondeur d’abord, puisque chaque e sommet de X est empil´ exactement une fois, et l’acc`s lst succ est appel´ une fois pour chaque e e e sommet. C’est donc un algorithme en 0(n) acc`s lst succ. e 7.4.5 Applications 7.4.5.1 Recherche d’un graphe minimal dans τ (G) Nous avons pr´c´demment montr´ (§7.3) que, si G est sans circuit, il poss`de une fermeture e e e e ∨ fortement anti-transitive G (´l´ment minimum de τ (G) ). Il n’en est pas n´cessairement de mˆme ee e e lorsque G poss`de des circuits. On peut cependant mettre en ´vidence un graphe minimal dans e e τ (G) , c’est ` dire un graphe G tel que : a – G + = G+ (mˆmes possibilit´s de cheminement) e e – la suppression d’un arc quelconque de G supprime une possibilit´ de cheminement. e Pour cela, on peut proc´der comme suit : e 1. D´terminer les c.f.c. de G, et construire le graphe r´duit GR . e e ∨ 2. D´terminer la fermeture anti-transitive GR . Tout arc (Ci ,Cj ) ainsi supprim´ dans GR e e entraˆ la suppression de tous les arcs (x,y) de G tels que x ∈ Ci et y ∈ Cj . ıne ∨ 3. Pour les couples (Ci ,Cj ) ∈GR , ne conserver qu’un seul arc (x,y) dans G, tel que x ∈ Ci et y ∈ Cj . 4. A l’int´rieur de chaque c.f.c., on ordonne arbitrairement les sommets, ce qui d´finit un e e ensemble d’arcs formant un circuit hamiltonien (passant une fois et une seule par chaque sommet). Le lecteur v´rifiera qu’un graphe G ainsi obtenu v´rifie bien les propri´t´s voulues. Remarquer e e ee que G n’est pas n´cessairement un graphe partiel de G (` cause du point 4). Si l’on souhaite e a en outre que G ≤ G, le traitement ` effectuer ` l’int´rieur de chaque c.f.c. est heuristique, et il a a e est difficile d’assurer la τ -minimalit´. (Il faut obtenir un circuit passant par tous les sommets, e en n’empruntant que des arcs de G). Exemple voir figures 7.6 et 7.7 c IFSIC 2004
  • 94.
    94 Circuits. Composantes fortement connexes 3 4 1 12 14 5 2 13 6 7 8 9 10 11 Fig. 7.6 – Graphe donn´ e 3 4 1 12 14 5 2 13 6 7 8 9 10 11 Fig. 7.7 – Graphe G , minimal dans τ (G) 7.4.5.2 Calcul rapide de la fermeture transitive Nous avons vu (§5.4) que l’algorithme de Roy-Warshall calcule la fermeture transitive d’un graphe quelconque en O(n3 ). Dans le cas o` G est sans circuit, l’utilisation d’une num´rotation u e conforme (ou conforme inverse) r´duit la complexit´ ; l’algorithme simplifi´ est donn´ page 95. e e e e c IFSIC 2004
  • 95.
    7.4. Composantes fortementconnexes 95 GRAPHE SANS CIRCUIT : ROY-WARSHALL SIMPLIFIE GRAPHE roy warshall conforme(GRAPHE G) c’est local SOMMET x, y, z d´but e Result ← G ; pour x depuis 2 jqa n-1 pour y depuis 1 jqa x-1 si Result.validarc(y, x) alors pour z depuis x+1 jqa n si Result.validarc(x, z) alors Result.ajoutarc(y, z) fsi fpour fsi fpour fpour fin Le nombre maximum d’op´rations est alors : e n−1 n(n − 1)(n − 2) n3 (x − 1)(n − x) = 6 6 x=2 en termes d’acc`s validarc, ajoutarc e Consid´rons alors le proc´d´ suivant : e e e 1. Appliquer l’algorithme de Tarjan pour obtenir le graphe r´duit GR , avec une num´rotation e e conforme inverse . 2. Appliquer l’algorithme de Roy-Warshall am´lior´ au graphe GR e e + 3. Pour tout couple (Ci ,Cj ) ∈ GR tel que card(Ci ) > 1 ou card(Cj ) > 1 rajouter ` G tous a les arcs (x,y) avec x ∈ Ci ,y ∈ Cj 4. A l’int´rieur de chaque c.f.c., cr´er tous les arcs (x,y). e e S’il y a p composantes C1 ,C2 , . . . ,Cp , de cardinal respectif k1 ,k2 , . . . ,kp , et si on d´signe par e m le nombre d’arcs de G, la complexit´ est en : e – O(n) acc`s lst succ pour le 1) e 3 – p6 pour le 2) – au plus 2 p−1 n n2 (p − 1) (p − i) = p 2p i=1 pour le 3) [maximum obtenu lorsque k1 = k2 = . . . = kp = n ] p c IFSIC 2004
  • 96.
    96 Circuits. Composantes fortement connexes – k1 + k2 + . . . + kp ≤ n2 pour le 4) 2 2 2 On peut observer que, lorsque p → 1 (graphe fortement connexe), la complexit´ est en O(n2 ) e (op´ration 4) pr´pond´rante), et lorsque p → n (graphe sans circuit) c’est l’op´ration 2) qui e e e e 3 domine, et la complexit´ est alors en O( n ). e 6 c IFSIC 2004
  • 97.
    Chapitre 8 Chemins de valeur optimale 8.1 D´finitions et probl`mes pos´s e e e Nous avons vu au chapitre 2 que les arcs d’un graphe peuvent ˆtre munis d’attributs de e diff´rents types: pour un graphe non valu´, ces attributs sont de type bool´en (l’arc existe ou e e e n’existe pas), pour un graphe mod´lisant des distances, ce seront des attributs de type num´rique, e e etc. Les attributs peuvent ˆtre statiques (donn´s avec le graphe) ou dynamiques (calcul´s lors de e e e l’ex´cution d’un algorithme: cf. par exemple le chapitre 10 sur les flots). Dans ce chapitre et les e suivants, nous allons manipuler des graphes valu´s sur les arcs, c’est-`-dire des graphes dont un e a attribut d’arc est pr´cis´ dans la d´finition du graphe, avec sa valeur (attribut statique). e e e D´finition 8.1 On appelle graphe valu´ un doublet G = (X,v), o` v est e e u une fonction d´finie sur X × X et ` valeurs dans un ensemble E. e a Nous supposerons que l’ensemble E poss`de une loi de composition ⊗, associative et munie d’un e ´l´ment neutre e et d’un ´l´ment absorbant α : ee ee ∀w ∈ E : w ⊗ e = e⊗w = w ∀w ∈ E : w ⊗ α = α⊗w = α w1 ⊗ w2 = α ⇒ w1 = α ∨ w2 = α L’´l´ment absorbant α permet de caract´riser l’ensemble Γ des arcs de la mani`re suivante: ee e e (x,y) ∈ Γ ⇔ v(x,y) = α Exemples : E ⊗ e α 1) B={vrai, faux} ∧ vrai faux (valeurs d’existence) 2) R + 0 ∞ (valeurs additives) 3) [0 , 1] × 1 0 (probabilit´s) e 4) N ∪ {∞} min ∞ 0 (capacit´s) e L’associativit´ de la loi ⊗ permet de prolonger v ` l’ensemble des suites de sommets de e a longueur ≥ 2: v[x1 , . . . ,xp ] = v(xj ,xj+1 ) j=1...p−1 c IFSIC 2004
  • 98.
    98 Chemins de valeur optimale De plus, l’´l´ment α caract´rise les chemins de la mani`re suivante: ee e e Proposition 8.2 Soit [x1 , . . . ,xp ] (p ≥ 2) une suite de sommets de X. Cette suite d´finit un chemin de G si,et seulement si: e v[x1 , . . . ,xp ] = α D´monstration e v[x1 , . . . ,xp ] = j=1...p−1 v(xj ,xj+1 ) =α⇔ ∀j, 1 = j = p − 1 ⇒ (xj ,xj+1 ) ∈ Γ ⇔ [x1 , . . . ,xp ] est un chemin de G P Le but de ce chapitre ´tant l’´tude de chemins de valeur optimale, il nous faut d´finir un e e e crit`re de comparaison sur les valeurs des chemins. Autrement dit, ´tant donn´ deux sommets x e e e et y et deux chemins reliant x ` y, lequel des deux est pr´f´rable? Pour cela, l’ensemble E doit a ee aussi ˆtre muni d’une relation d’ordre totale, not´e , telle que: e e i) est compatible avec ⊗, c’est-`-dire: a w1 w2 ⇒ w1 ⊗ w3 w2 ⊗ w3 ∧ w3 ⊗ w1 w3 ⊗ w2 ii) α est maximum pour : ∀w ∈ E : w α Soit alors deux suites u1 = [x,y1 , . . . ,yk ,y], u2 = [x,z1 , . . . ,zp ,y]. On dira que u1 est meilleur que u2 si, et seulement si: v(u1 ) v(u2 ). En particulier, une suite d´finissant un chemin sera toujours pr´f´r´e ` une suite ne d´finissant e eee a e pas de chemin, grˆce ` la propri´t´ ii) ci-dessus. a a ee Exemples de relations d’ordre: E ⊗ α B={vrai, faux} ∧ faux vrai<faux existence R + ∞ ≤ valeurs additives minimales [0,1] × 0 ≥ probabilit´s maximales e N ∪ {∞} min 0 ≥ capacit´s maximales e Ces d´finitions ´tant donn´es, nous posons e e e les probl`mes : e Probl`me 8.1 (x-optimal-y) Soit x,y deux sommets donn´s de G = e e (X,Γ,v). D´terminer un chemin u = (x ∗ y) de G, de valeur optimale e parmi tous les chemins de x ` y dans G. a Probl`me 8.2 (x-optimal ou optimal-y) Il s’agit du probl`me x- e e optimal-y pour tout y ∈ X (resp. x-optimal-y pour tout x ∈ X) : chemins de valeur optimale issus de x (resp. aboutissant ` y) a c IFSIC 2004
  • 99.
    8.2. Chemins devaleur additive minimale issus d’un sommet donn´ e 99 Probl`me 8.3 (∗-optimal-∗) Il s’agit du probl`me x-optimal pour tout e e x ∈ X (chemins de valeur optimale entre tous les couples de sommets). L’optimalit´ est ` prendre, bien sˆr, au sens de la relation d’ordre sur E. e a u Dans ce qui suit, et jusqu’au paragraphe 8.8, nous prendrons : E ≡ R; ⊗ ≡ +; ≡≤ c’est-`-dire le cas des valeurs additives minimales. Ceci n’est pas une restriction car nous verrons a au §8.8 comment adapter les r´sultats et algorithmes aux autres cas, sous r´serve d’une structure e e ad´quate de (E, ⊗ , ) e Nous ´tudions successivement les probl`mes de type 8.2 (et 8.1 comme cas particulier) avec e e plusieurs algorithmes, puis les probl`mes de type 8.3 dans le cadre de la transformation d’algo- e rithmes. 8.2 Chemins de valeur additive minimale issus d’un sommet donn´ e Nous supposons, dans cette section, que les sommets sont num´rot´s de 1 ` n, et que le e e a sommet de d´part est le sommet de num´ro 1 (quitte ` renum´roter). e e a e 8.2.1 Existence Proposition 8.3 Le probl`me 1-minimal admet des solutions si et e seulement si le sous-graphe G1 = (Γ∗ (1),Γ1 ) ne contient pas de circuit de valeur < 0. D´monstration. Soit c = [x ∗ x] un circuit de valeur ρ < 0 dans G1 . Comme x ∈ Γ∗ (1), e ∃γ = [1 ∗ x] de valeur ω; par suite, γ.c a pour valeur ω + ρ, γ.c.c a pour valeur ω + 2ρ, ..., ∀k ∈ N : γ.ck a pour valeur ω + kρ d’o` : u lim (ω + kρ)] = −∞ k→∞ Donc la valeur des chemins de 1 ` x n’est pas minor´e, et il en est de mˆme pour tous les a e e descendants de x. R´ciproquement, si G1 n’a pas de circuit de valeur < 0, alors : si u est un chemin de 1 ` e a x et ue un chemin ´l´mentaire, inclus dans u, de 1 ` x, on a : v(u) ≥ v(ue ) ≥ min v(ue ) (o` ee a u min v(ue ) d´note le minimum des valeurs des chemins ´l´mentaires). Comme l’ensemble des e ee chemins ´l´mentaires est fini, min v(ue ) est d´fini et de plus min v(u) ≥ min v(ue ) ((o` min v(u) ee e u d´note le minimum des valeurs des chemins). D’autre part, un chemin ´l´mentaire est un chemin, e ee c IFSIC 2004
  • 100.
    100 Chemins de valeur optimale et donc min v(u) = min v(ue ) D´finition 8.4 Un circuit de valeur < 0 s’appelle circuit absorbant e (sous entendu pour les valeurs additives minimales). 8.2.2 Caract´risation e Nous donnons maintenant un th´or`me de caract´risation des valeurs minimales, dans le cas e e e o` ces valeurs existent. On note C1i l’ensemble de tous les chemins de 1 ` i. On consid`re les u a e attributs de sommets suivants : ∀i ∈ X : λ(i) = minu∈C1i v(u), avec λ(i) = +∞ si C1i = ∅ (valeur minimale des chemins de 1 ` i). a Si λ(i) < +∞, pred(i) = pr´d´cesseur de i sur un chemin ´l´mentaire de va- e e ee leur optimale de 1 ` i. (pred(1) n’est pas d´fini). En abr´g´, a e e e pred(i) sera d´sign´ comme pr´d´cesseur optimal de i. e e e e Le couple (λ(i),pred(i)) constitue les attributs minimaux (relativement au probl`me pos´) e e du sommet i. On montre d’abord que les attributs λ(i) (i = 1, . . . ,n) sont solutions d’un syst`me d’in´quations e e et d’un syst`me d’´quations. e e Proposition 8.5 Les attributs λ(i) (i = 1, . . . ,n) sont solution du syst`me: ∀i ∀j : xi ≤ xj + v(j,i) e D´monstration Il y a trois cas ` consid´rer : e a e 1. (j,i) ∈ Γ. Alors v(j,i) = +∞ et la proposition est vraie. 2. j ∈ Γ∗ (1). Alors λ(j) = +∞ et la proposition est vraie. 3. (j,i) ∈ Γ ∧ j ∈ Γ∗ (1). Soit u ∈ C1j tel que v(u) = λ(j). Alors u = u · (j,i) ∈ C1i donc λ(i) ≤ v(u ) = v(u) + v(j,i) = λ(j) + v(j,i). La proposition est donc vraie. P Proposition 8.6 Les attributs λ(i) (i = 1, . . . ,n) sont solution du syst`me: ∀i : xi = minj (xj + v(j,i)) e D´monstration D’apr`s la proposition 8.5, e e ∀i : λ(i) ≤ min(λ(j) + v(j,i)) (8.1) j Il y a deux cas ` consid´rer: a e – i ∈ C1i . Comme λ(i) = minu∈C1i v(u), il existe u ∈ C1i tel que v(u) = λ(i). Soit p l’avant- dernier sommet de u. On a donc u = u · (p,i) o` u ∈ C1p . On peut donc ´crire : u e c IFSIC 2004
  • 101.
    8.2. Chemins devaleur additive minimale issus d’un sommet donn´ e 101 λ(i) = v(u) = v(u ) + v(p,i) ≥ λ(p) + v(p,i) ≥ minj (λ(j) + v(j,i), d’o` u λ(i) ≥ min(λ(j) + v(j,i)) (8.2) j – i ∈ C1i . Dans ce cas, λ(i) = +∞ ≥ minj (λ(j) + v(j,i)), on obtient donc aussi l’´quation 8.2 e Des ´quations 8.1 et 8.2 on d´duit λ(i) = minj (λ(j) + v(j,i)) e e P Toutefois, les conditions ´nonc´es dans les deux propositions pr´c´dentes ne sont pas suffi- e e e e santes, comme le contre-exemple ci-apr`s (figure 8.1) va le montrer: e 2 1 2 4 5 2 1 4 1 1 4 0 -2 3 6 2 Fig. 8.1 – Contre-exemple Le syst`me d’´quations de la proposition 8.6 s’´crit : e e e   x1 = 0   x = min(x + 2) = x + 2  2   1 1  x3 = min(x1 + 4,x2 + 1,x4 + 2,x6 + 2)  x4 = min(x2 + 2,x5 + 1)    x5 = min(x3 − 2,x4 + 1)    x6 = min(x5 + 0) = x5 Les valeurs µ1 = 0,µ2 = 2,µ3 = 2,µ4 = 1,µ5 = 0,µ6 = 0 satisfont ce syst`me. Et pourtant, ce e ne sont pas les valeurs minimales des chemins issus du sommet 1. Par exemple, la valeur minimale des chemins de 1 ` 3 est ´gale ` 3, alors que µ3 = 2. Les valeurs propos´es ici constituent bien a e a e des minorants des valeurs de chemins, mais pas n´cessairement des minima : elles peuvent ˆtre e e trop petites. Le th´or`me de caract´risation suivant montre en effet que les valeurs minimales de chemins e e e issus de 1 constituent LA solution maximale du syst`me d’´quations. e e Th´or`me 8.7 Les attributs λ(i) (i = 1, . . . ,n) constituent la solution maximale du syst`me: e e e 0 si i = 1 xi = minxj ∈Γ−1 (xi ) (xj + v(j,i))si i = 2, . . . ,n D´monstration Soit µ(i) (i = 1, . . . ,n) la solution maximale du syst`me d’´quations. Il faut e e e montrer : ∀i (1 ≤ i ≤ n) : λ(i) = µ(i). – D’apr`s la proposition 8.6, les λ(i) constituent une solution du syst`me et donc : e e ∀i (1 ≤ i ≤ n) : λ(i) ≤ µ(i) (8.3) c IFSIC 2004
  • 102.
    102 Chemins de valeur optimale – Pour montrer les in´galit´s contraires, on consid`re les deux cas possibles : e e e 1. i ∈ Γ (1). Dans ce cas, λ(i) = +∞ et donc λ(i) ≥ µ(i). 2. i ∈ Γ (1). Dans ce cas, il existe dans G un chemin u = [1,i1 , . . . ,ik ,i], de valeur λ(i). Puisque les µ(i) sont solution du syst`me, les in´galit´s suivantes sont v´rifi´es: e e e e e   µ(i1 ) ≤ µ(1) + v(1,i1 )   µ(i2 ) ≤ µ(i1 ) + v(i1 ,i2 )   ...  µ(i) ≤ µ(ik ) + v(ik ,i) En sommant membre ` membre, et comme µ(1) = 0, on obtient: a µ(i) ≤ v(1,i1 ) + v(i1 ,i2 ) + . . . + v(ik ,i) = v(u) = λ(i) Regroupant les deux cas, on obtient : ∀i (1 ≤ i ≤ n) : λ(i) ≥ µ(i) (8.4) – Des ´quations 8.3 et 8.4 on d´duit : e e ∀i (1 ≤ i ≤ n) : λ(i) = µ(i) P Remarque. Consid´rons le graphe Gmin (1) dont l’ensemble des sommets est l’ensemble des e descendants du sommet 1, et l’ensemble des arcs est l’ensemble des couples (pred(i),i) pour tout i descendant du sommet 1. Formellement : Gmin (1) = (Γ∗ (1),{(pred(i),i) | i ∈ Γ∗ (1)}) = ({i | λ(i) < +∞},{(i,j) | λ(j) = λ(i) + v(i,j)} Les caract´risations pr´c´dentes montrent que ce graphe est une arborescence de racine 1. e e e Les algorithmes de calcul des chemins minimaux issus de 1 que nous ´tudions ci-apr`s pourront e e donc ˆtre vus comme des algorithmes d’exploration de la descendance de 1, avec une strat´gie e e de s´lection sp´cifique ` chacun d’eux. e e a 8.3 Algorithme de FORD : exploration 8.3.1 Principe On note x0 le sommet initial. Le principe de cet algorithme consiste ` ajuster progressivement a les valeurs des attributs λ jusqu’` ce qu’ils v´rifient le syst`me caract´ristique. Pour assurer qu’on a e e e obtient bien la solution maximale, on part de valeurs initiales dont on sait a priori qu’elles majorent les valeurs λ. Pour cela, nous allons tester tous les arcs du graphe selon un ordre de parcours induit par une exploration en profondeur analogue ` celle r´alis´e pour l’´num´ration a e e e e des chemins ´l´mentaires issus de x0 (cf. §6.3). ee Un arc (y,z) est test´ lorsque y est sommet de pile et z est le successeur courant de y; en effet, e y est alors reconnu comme descendant de x0 , et l’´tat de la pile d´finit le chemin courant de x0 e e c IFSIC 2004
  • 103.
    8.3. Algorithme deFORD : exploration 103 ` y : (λ(y), pred(y)) ont ´t´ initialis´s ou mis ` jour lorsque y a ´t´ empil´ pour la premi`re fois. a ee e a ee e e Quant ` z, plusieurs cas peuvent se pr´senter selon son ´tat relatif ` l’exploration (cf terminologie a e e a du chapitre 5) : 1er cas £z est dehors. Il devient alors en attente (et va ˆtre empil´), et (λ(z), pred(z)) sont e e initialis´s : e λ(z) ← λ(y) + v(y,z); pred(z) ← y 2eme cas £ z est termin´; cela signifie que z a ´t´ pr´c´demment empil´ ` partir d’un pr´d´cesseur ` e ee e e ea e e = y puis d´pil´ – apr`s que toute sa descendance ait ´t´ explor´e; les attributs de z ont donc e e e ee e d´j` une valeur, mais celle-ci peut ˆtre remise en cause par l’arc (y,z) qui doit donc ˆtre test´: ea e e e si λ(y) + v(y,z) < λ(z) alors λ(z) ←− λ(y) + v(y,z) ; pred(z) ←− y; z est empil´ car la modification de λ(z) peut remettre en cause e les valeurs pr´c´demment attribu´es aux descendants de z, d’o` la e e e u n´cessit´ de refaire l’exploration ` partir de z. e e a sinoninutile d’empiler z ` nouveau : ses attributs ne sont pas modifi´s a e donc ceux de ses descendants non plus. fsi 3eme cas £ z est en attente (il appartient donc ` la pile.) ` a x 0 Cela signifie qu’un circuit passant par y u 1 et z est rencontr´, puisque z est ` la fois e a ant´c´dent et successeur de y. Le test de e e z mise ` jour des attributs de z permet alors a de d´tecter si ce circuit est absorbant; exa- e u minons la figure ci-contre : 2 y Proposition : le circuit u2 · (y,z) est de valeur <0 si et seulement si : λ(y) + v(y,z) < λ(z) D´monstration Il existe un chemin u1 = [1 ∗ z], de valeur λ(z). Comme u1 · u2 est le chemin e courant de 1 ` y, on a : a (1) λ(y) ≤ v(u1 ) + v(u2 ) = λ(z) + v(u2 ) i) £ Supposons v(u2 ) + v(y,z) < 0. D’apr`s (1), on a : e λ(y) + v(y,z) ≤ λ(z) + v(u2 ) + v(y,z) < λ(z) d’apr`s l’hypoth`se. e e ii) £ R´ciproquement, supposons λ(y) + v(y,z) < λ(z). L’in´galit´ (1) ne peut pas ˆtre stricte : e e e e en effet, si λ(y) < λ(z) + v(u2 ), cela signifie que y a ´t´ visit´ pr´c´demment comme extr´mit´ ee e e e e e d’un chemin ne passant pas par z; y a alors ´t´ empil´ et sa descendance explor´e. L’arc (y,z) ee e e c IFSIC 2004
  • 104.
    104 Chemins de valeur optimale a donc ´t´ test´ et on doit avoir λ(z) ≤ λ(y) + v(y,z), ce qui contredit (1). ee e Par cons´quent on a n´cessairement : e e λ(y) = λ(z) + v(u2 ), ce qui, avec l’hypoth`se, permet de d´duire : e e λ(y) > λ(y) + v(y,z) + v(u2 ) d’o` : 0 > v(y,z) + v(u2 ) u P La d´tection d’un circuit absorbant est un crit`re d’arrˆt de l’algorithme; il suffit de g´rer e e e e une variable bool´enne absorbant, initialement ` faux et qui passe ` vrai lorsqu’un tel circuit e a a est d´tect´. e e 8.3.2 Texte de l’algorithme Celui-ci est une adaptation de l’algorithme d’´num´ration des chemins ´l´mentaires vu au e e ee 6.5. Le texte est donn´ page 105 (voir la signification des acc`s ` l’annexe A). e e a c IFSIC 2004
  • 105.
    8.3. Algorithme deFORD : exploration 105 FORD : EXPLORATION EN PROFONDEUR REEL SOMMET::λ ; SOMMET SOMMET::pred ; ford-profondeur(GRAPHE G, SOMMET x) c’est local ENS[SOMMET] SOMMET::a visiter: ; ENUM[dehors, en attente, termin´] SOMMET::etat ; e PILE[SOMMET] A; BOOL absorbant ; SOMMET y, z ; d´but e depuis pourtout y de G.lst som faire y.´tat ← dehors fpourtout ; e absorbant ← faux ; A.creer ; A.empiler(x) ; x.´tat ← en attente ; x.λ ← 0 ; x.a visiter ← G.lst succ(x) ; e jusqua A.vide ou absorbant faire y ← A.sommetpile ; si y.a visiter = ∅ alors y.´tat ← termin´ ; A.depiler e e sinon z ← y.a visiter.element ; y.a visiter ← y.a visiter {z} ; cas z.´tat = e dehors −→ z.´tat ← en attente ; z.λ ← y.λ+ G.v(y,z) ; z.pred ← y ; e A.empiler(z) ; z.a visiter ← G.lst succ(z) en attente −→ absorbant ← (z.λ > y.λ + G.v(y,z)) termin´ −→ e si z.λ > y.λ+ G.v(y,z) alors z.´tat ← en attente ; e z.λ ← y.λ+ G.v(y,z) ; z.pred ← y ; A.empiler(z) ; z.a visiter ← G.lst succ(z) fsi fcas fsi fait ; -- si absorbant alors il y a un circuit absorbant sinon les sommets ∈ en attente sont inaccessibles fin c IFSIC 2004
  • 106.
    106 Chemins de valeur optimale 8.3.3 Une heuristique d’am´lioration e Dans la strat´gie d’exploration en profondeur utilis´e, le choix d’un successeur du sommet e e de pile est laiss´ arbitraire. Il est posible de d´finir un crit`re de choix d’un tel successeur, tenant e e e compte de la nature du probl`me ` r´soudre, ` savoir la recherche de chemins de valeur minimale e a e a sur un graphe dont les arcs sont valu´s. Un tel crit`re doit laisser esp´rer une am´lioration du e e e e temps d’ex´cution de l’algorithme, mais sans que le prix ` payer pour sa mise en œuvre ne e a devienne prohibitif: ce crit`re ne devra donc prendre en compte que des informations locales, e c’est-`-dire relatives ` l’´tat courant du sommet courant. Par contre, l’am´lioration cens´e r´sulter a a e e e e de l’application de ce crit`re ne pourra ˆtre ´tablie sˆrement; dans certains cas, il pourrait e e e u mˆme en r´sulter une d´t´rioration du comportement, mais en moyenne une am´lioration doit e e ee e intervenir. Un crit`re possible et simple ` mettre en œuvre consiste ` choisir, parmi les successeurs e a a possibles du sommet de pile y, un sommet z tel que v(y,z) soit minimum. L’am´lioration attendue e r´side dans une diminution du nombre de retours dans la pile, donc de reprise de parcours d´j` e ea effectu´s. Le prix ` payer est un tri sur l’ensemble des valeurs des arcs issus de y. e a 8.4 Algorithme de BELLMANN-KALABA 8.4.1 Principe Il s’applique ` tout graphe valu´, et permet de d´tecter d’´ventuels circuits absorbants. Nous a e e e poserons, par convention : v(1,1) = 0 et, si | u |= 0,v(u) = 0. (k) Pour tout x ∈ X et tout entier k ≥ 1, on notera Cx l’ensemble des chemins de 1 ` x, de a (k) longueur ≤ k. Remarquer que Cx = ∅ si et seulement si tout chemin de 1 ` x, s’il en existe, a est de longueur > k. L’algorithme de Bellmann-Kalaba est fond´ sur le r´sultat suivant : e e (k) Proposition 8.8 On consid`re les valeurs λx d´finies par : e e   v(1,x) si (1,x) ∈ Γ (1) λx = 0 si x = 1  +∞ si (1,x) ∈ Γ ∀k ≥ 2 : λ(k) = x min [λ(k−1) + v(x,y)] y y∈Γ−1 (x) (k) (k) Alors λx = minu∈C (k) v(u) (+∞ si Cx = ∅). x D´monstration. Par r´currence sur k : e e Base : V´rifi´ pour k = 1, par d´finition. e e e Induction : Supposons la proposition v´rifi´e pour k − 1 ≥ 1 e e 1er cas : C (k) = ∅. x c IFSIC 2004
  • 107.
    8.4. Algorithme deBELLMANN-KALABA 107 (k) Soit u ∈ Cx et y le pr´d´cesseur de x sur ce chemin. On a donc e e (k−1) u = u1 .(y,x) avec u1 ∈ Cy Avec la convention | u1 |= 0 =⇒ v(u1 ) = 0, on obtient, d’apr`s l’hypoth`se de r´currence et e e e (k) la d´finition de λx : e v(u) = v(u1 ) + v(x,y) ≥ λ(k−1) + v(x,y) ≥ λ(k) y x (k) Donc, λx ≤ minu∈C (k) v(u). x (k) D’autre part, par d´finition de λx , il existe y0 tel que e λ(k) = λ(k−1) + v(y0 ,x) x y0 et d’apr`s l’hypoth`se de r´currence, il existe e e e (k−1) u1 ∈ Cy0 avec v(u1 ) = λ(k−1) y0 d’o` u = u1 · (y0 ,x) v´rifie u e u ∈ Cx et v(u) = λ(k) (k) x (k) Donc, dans ce cas, λx = minu∈C (k) v(u). x (k) (k−1) (k−1) 2eme cas : Cx = ∅. Pour tout sommet y ∈ Γ−1 (x) on a Cy ` = ∅, et donc λy = +∞ (k) (hypoth`se de r´currence). D’o`, par d´finition, λx = +∞ . P e e u e Corollaire 8.9 Il existe k ≤ n tel que ∀x ∈ X : λ(k) = λ(k−1) x x si et seulement si le sous-graphe G0 ne comporte pas de circuit absorbant D´monstration. e (n) (n−1) (n) (n) £ Supposons que ∃x ∈ X : λx < λx Alors : ∃u ∈ Cx tel que λx = v(u) et, pour tout (n−1) chemin u ∈ Cx , on a : v(u) < v(u ). Par cons´quent, | u |= n et donc u n’est pas ´l´mentaire, d’o` l’on d´duit l’existence d’un e ee u e circuit de valeur < 0 inclus dans u, donc dans le sous-graphe G0 . £ R´ciproquement, d’apr`s la proposition 8.8, le probl`me 1-minimal admet alors une solution, e e e ce qui prouve l’inexistence de circuit absorbant dans le sous-graphe G0 . P Corollaire 8.10 ∀k ≥ 1,∀x ∈ Γ∗ (1), le pr´d´cesseur de x sur un che- e e (k) min de Cx de valeur minimale est un sommet y k pour lequel le mini- (k) mum est atteint lors du calcul de λx D´monstration. Elle r´sulte imm´diatement de la d´monstration de la proposition 8.8 P e e e e c IFSIC 2004
  • 108.
    108 Chemins de valeur optimale 8.4.2 Analyse Invariant 1 ≤ k ≤ n∧ A = ∪k Γ[j] (1)∧ j=1 (k−1) ∀x ∈ A λ anc(x) = valeur minimale des chemins de Cx ∧ (k) λ(x) = valeur minimale des chemins de Cx ∧ pred(x) = pr´d´cesseur optimal de x sur de tels che- e e mins ∧ stab ≡ λ = λ anc Termin´ e (k = n) ∨ stab resultat si stab alors (λ, pred) sinon il y a des circuits absorbants fsi Progression (* k < n ∧ ¬stab *) λ anc←λ ; stab← vrai ; ∀x ∈ X : λ(x)← min λ anc(y) + v(y,x) | y ∈ Γ−1 ∩ A ; pred(x)← valeur de y pour laquelle ce min est atteint ; si x ∈ A alors stab←(stab ∧ λ(x) = λ anc(x)) sinon stab← faux ; A←A ∪ {x} fsi ; k←k + 1 Valeurs initiales λ(1)←0; ∀x ∈ Γ(1) : λ(x)←v(1,x); pred(x)←1; A←{1} ∪ Γ(1); k←1 8.4.3 Texte de l’algorithme Il est donn´ page 109. e 8.4.4 Preuve Nous ne la d´taillerons pas, la laissant en exercice au lecteur. Les quatre r´sultats suivants e e doivent ˆtre montr´s : e e Lemme 8.11 Les valeurs initiales satisfont l’invariant. e ´ D´monstration. Evidente, grˆce ` la convention v(1,1) = 0 a a c IFSIC 2004
  • 109.
    8.4. Algorithme deBELLMANN-KALABA 109 ALGORITHME DE BELLMANN-KALABA REEL SOMMET::λ ; SOMMET SOMMET::pred ; REEL SOMMET::λ anc ; bellmann-kalaba(GRAPHE G, SOMMET x) c’est local ENS[SOMMET] A, E; BOOL stab; ENT k; SOMMET x, y ; d´but e depuis k ← 1 ; stab ← faux ; x.λ ← 0 ; A ← {x0 } ; E ← G.lst succ(x) ; pourtout x de E x.λ ← G.v(x,x) ; A ← A ∪{x} fpourtout ; jusqua stab ou k ≥ n faire k ← k+1 ; pourtout x de G.lst som faire x.λ anc ← x.λ fpourtout ; stab ← vrai ; pourtout x de G.lst som faire E ← G.lst pred(x) ; E ← E ∩ A ; si E = ∅ alors (x.λ, x.pred) ← min(y.λ anc + G.v(y,x), E) ; si x ∈ A alors stab ← stab et (x.λ =x.λ anc) sinon stab ← faux ; A ← A ∪{x} fsi fsi fpourtout ; fait ; -- si k < n alors Resultat : ← (λ , pred) -- sinon circuit absorbant d´tect´ e e fin (w,y0) ← min (f (y),E) est une primitive, signifiant que w = min (f (y) | y ∈ E) = f (y0), o` f est une fonction E → R u c IFSIC 2004
  • 110.
    110 Chemins de valeur optimale Lemme 8.12 La progression maintient l’invariant. D´monstration. Utiliser : e – La proposition 8.8 pour les valeurs λ – Le corollaire 8.10 pour les valeurs pred – Le corollaire 8.9 pour le bool´en stab e Proposition 8.13 (Correction partielle). Lorsque l’algorithme s’arrˆte, e on a l’alternative : – ou bien stab et dans ce cas, ∀x ∈ Γ∗ (1) les attributs (λ(x), pred(x)) sont minimaux – ou bien non stab et k = n et dans ce cas, il y a des circuits absorbants D´monstration. Cons´quence de (stab∧ Invariant) ∨ (k = n ∧ ¬stab∧ Invariant) e e Proposition 8.14 (Terminaison). L’algorithme s’arrˆte en un nombre e fini d’´tapes e D´monstration. Consid´rer la fonction n − k e e 8.4.5 Complexit´ e L’algorithme ex´cute au plus n − 1 pas d’it´ration, et pour chacun d’eux : e e n acc`s lst pred e n calculs de min, sur un ensemble E, impliquant chacun : card(E) acc`s valarc, e card(E) comparaisons et additions de r´els; e comme card(E) ≤ n, on obtient un algorithme en 0(n3 ). Remarque. L’algorithme de Bellmann-Kalaba met en œuvre, au niveau du probl`me 8.2, e le principe d’optimalit´ de Bellmann qui fonde les m´thodes de programmation dynamique : e e les ´tapes sont les longueurs des chemins examin´s, les ´tats ` l’´tape k sont les sommets qui e e e a e peuvent ˆtre atteints par un chemin de longueur k et les transitions possibles de l’´tape k-1 ` e e a l’´tape k sont d´finies par les arcs issus des sommets ´tats ` l’´tape k-1. La relation e e e a e λ(k) = min (λ(k−1) + v(x,y)) x y y∈Γ−1 (x) n’est autre, dans ce contexte, que la traduction du principe d’optimalit´. e 8.4.6 Acc´l´ration de l’algorithme ee (k) (k) Il est possible d’acc´l´rer l’algorithme en utilisant, dans le calcul de λx , les valeurs λy ee (avec y < x), d`s leur mise ` jour dans l’´tape courante. En effet, on a les r´sultats suivants : e a e e c IFSIC 2004
  • 111.
    8.4. Algorithme deBELLMANN-KALABA 111 Proposition 8.15 On d´finit, par r´currence : e e (1) λx comme dans la proposition 8.8 ∀k ≥ 2 : λ(k) = x min (µ(k) + v(y,x)) y y∈Γ−1 (x) avec : (k) λy si y < x, µ(k) = y (k−1) λy si y ≥ x On a alors : (k) si Cx = ∅ : (k) (k) i) λx minore la valeur minimale des chemins de Cx . (k) ii) il existe un chemin de 1 ` x, ayant pour valeur λx . a D´monstration Elle s’effectue par r´currence sur k, et pour chaque k, par r´currence sur x. e e e £ Pour k = 1, la proposition est v´rifi´e. e e (k) £ Supposons l` v´rifi´e pour k - 1, et soit x tel que Cx = ∅. a e e (k) Il existe u ∈ Cx et soit y le pr´d´cesseur de x sur u. Alors : e e (k−1) u = u .(y,x), u ∈ Cy , v(u) = v(u ) + v(y,x) c’est ` dire, d’apr`s l’hypoth`se de r´currence : a e e e v(u) ≥ λ(k−1) + v(y,x) y (k) Montrons, par r´currence sur x, que λx ≥ v(u) e (k−1) (k−1) Pour x=1, on a y ≥ 1 donc λy = µy et par cons´quent : e v(u) ≥ µ(k) + v(y,x) ≥ λ(k) y x Supposons que cette in´galit´ est v´rifi´e jusqu’` x-1. On a alors : e e e e a si y < x alors v(u ) ≥ min v(γ) ≥ min v(γ) ≥ λ(k) = µ(k) y y (k−1) (k) γ∈Cy γ∈Cy d’o` u v(u) ≥ µ(k) + v(x,y) ≥ λ(k) tandis que si y ≥ x : y y λ(k−1) = µ(k) et par cons´quent : y y e v(u) ≥ µ(k) + v(x,y) ≥ λ(k) y y Ceci montre la partie i) de la proposition. c IFSIC 2004
  • 112.
    112 Chemins de valeur optimale Pour montrer la partie ii), consid´rons la suite de sommets e x = y0 > y1 > . . . > yν et yν ≥ yν+1 telle que :  (k) (k)  λx  = λy1 + v(y1 ,x)  (k)   λ (k) = λy2 + v(y1 ,y2 ) y1  . .   .  (k)  (k) λν = λν+1 + v(yν+1 ,yν ) yν existe n´cessairement (´ventuellement ν =0), puisque la suite est d´croissante et minor´e par e e e e 1. Si on somme cette suite d’´galit´s, il vient : e e λ(k) = λ(k−1) + v(yν+1 ,yν ) + ... + v(y1 ,x) x yν+1 (k−1) D’apr`s l’hypoth`se de r´currence, il existe un chemin u = [1 ∗ yν+1 ] avec v(u ) = λyν+1 . Le e e e (k) chemin u · (yν+1 ,yν , . . . ,y1 ,x) a donc pour valeur λx . P Corollaire 8.16 Il existe k ≤ n tel que ∀x ∈ X : λ(k) = λ(k−1) x x si et seulement si le sous-graphe G0 ne comporte pas de circuit absorbant La d´monstration est identique ` celle du corollaire 8.9 e a Nous ne d´crivons pas l’algorithme acc´l´r´ en entier, mais seulement les modifications ` e ee e a apporter ` l’algorithme pr´c´dent : le tableau λ anc devient inutile ; on le remplace par une a e e simple variable r´elle δ. (L’affectation λ anc←λ est donc ` supprimer). e a Remarque. Comme pour l’algorithme de Ford, l’algorithme de Bellmann-Kalaba rentre dans une classe d’algorithmes par ajustements successifs, et donc n’apporte pas de solution sp´cifique au probl`me 8.1. Par contre, l’algorithme dans sa version non acc´l´r´e permet de e e ee e restreindre le calcul aux chemins ayant une longueur maximum donn´e. e Les deux algorithmes qui vont suivre rentrent dans la classe des algorithmes gloutons, c’est a ` dire qu’ils calculent le r´sultat d´finitif de chaque sommet, examin´s dans un certain ordre, e e e sans jamais revenir en arri`re - c’est ` dire sans jamais remettre en cause les r´sultats partiels e a e d´j` acquis. A ce titre, ils peuvent ˆtre adapt´s au probl`me 8.1. Toutefois, ils ne s’appliquent ea e e e qu’` des graphes ayant des propri´t´s particuli`res : valeurs positives ou nulles pour le premier, a ee e graphes sans circuit pour le second. 8.5 Cas des arcs de valeur positive ou nulle : algorithme de DIJKSTRA G = (X,Γ,v) est un graphe valu´, avec ∀γ ∈ Γ : v(γ) ≥ 0 si bien que G ne poss`de aucun e e circuit absorbant. c IFSIC 2004
  • 113.
    8.5. Cas desarcs de valeur positive ou nulle : algorithme de DIJKSTRA 113 8.5.1 Principe de l’algorithme de DIJKSTRA L’ algorithme de Dijkstra est une strat´gie particuli`re de l’algorithme d’exploration pour e e le calcul de la descendance du sommet 1 vu au 6.2. Il est donc plus simple que l’algorithme d’exploration de Ford du §8.3, bas´ sur l’exploration de tous les chemins ´l´mentaires issus de e ee 1 : ceci est du ` l’hypoth`se plus restrictive sur les valeurs des arcs. a e Par rapport au sch´ma g´n´ral du §6.2, les pr´cisions et modifications suivantes sont ap- e e e e port´es : e – Lorsqu’un sommet z devient en attente, ses attributs sont initialis´s : e λ(z)←λ(y) + v(y,z); pred(z)←y, o` y est son p`re dans l’arborescence d’exploration. u e – Lorsqu’un sommet z est termin´, ses attributs (λ(z), pred(z)) sont d´finitifs (leur valeur e e est correcte) – La s´lection d’un sommet d’´tat en attente se fait selon le crit`re suivant : on choisit le som- e e e met y d’´tat en attente dont l’attribut λ(y) est minimum. Le sommet s´lectionn´ devient e e e alors termin´ et, pour tout z ∈ Γ(y) : e – si z est dehors, il devient en attente et ses attributs sont initialis´s e – si z est en attente ses attributs sont r´´valu´s de la mani`re habituelle : ee e e si λ(y) + v(y,z) < λ(z) alors λ(z)←λ(y) + v(y,z); pred(z)←y fsi – si z est termin´, il est ignor´. e e Le fait que les attributs des sommets puissent atteindre leur valeur finale avant la fin de l’algorithme, et que l’on sache ` quel moment de l’ex´cution ce fait se produit, indique que cet a e algorithme rentre dans la classe des algorithmes gloutons. Remarque. Au §6.2 nous avions mis en ´vidence les strat´gies en largeur d’abord et en pro- e e fondeur d’abord. La strat´gie utilis´ ici peut ˆtre qualifi´e, elle, de meilleur d’abord (best-first e e e e search). Relativement au probl`me trait´, cette strat´gie est informante, c’est-`-dire qu’elle tient e e e a compte des informations d´j` obtenues sur les valeurs de chemins (informations s´mantiques), ea e alors que les deux premi`res sont aveugles, c’est-`-dire purement syntaxiques. e a La gestion de l’ensemble des sommets d’´tat en attente, not´ A, va ˆtre effectu´e selon e e e e la structure de donn´es appel´e tas, qui est une structure ordonn´e dans laquelle l’acc`s ` un e e e e a ´l´ment de valeur minimum parmi tous les ´l´ments de l’ensemble se fait en temps constant, c’est- ee ee a `-dire ind´pendant du nombre d’´l´ments contenus dans cette structure. De mani`re analogue e ee e aux files (§6.3.1) et aux piles (§6.3.2), on consid`re le type tas comme un type de donn´es e e abstrait. La d´claration e TAS[E ORD] t d´clare un tas d’objets de type E ORD, o` E ORD est un type dont les valeurs sont e u ordonn´es. e Les op´rations sur les tas sont alors : e creer cr´e un nouveau tas vide e BOOL tasvide pr´dicat ` valeur vrai si et seulement si le tas est vide e a mettre en tas(E ORD v) ajout dans le tas de l’´l´ment de valeur v ee c IFSIC 2004
  • 114.
    114 Chemins de valeur optimale ^ter de tas o retrait d’un ´l´ment de valeur minimum (erreur si le tas est ee vide) E ORD mintas d´livre un ´l´ment du tas de valeur minimum, sans modifier e ee le tas (erreur si le tas est vide) reorg(E ORD v1, v2) remplacement dans le tas de la valeur v1 par la valeur v2 (erreur si la valeur v1 est absente). nb: t.reorg(v1,v2) est ´quivalent ` la s´quence : t.^ter de tas(v1); e a e o t.mettre en tas(v2) La mise en œuvre concr`te d’une telle structure abstraite et des acc`s est vue dans les cours e e de techniques ou m´thodes de programmation (elle se fait sous forme d’arbre binaire ordonn´, e e complet ` gauche, souvent repr´sent´ en tableau). Noter que le terme liste de priorit´ (priority a e e e queue) est aussi utilis´ pour d´signer un tas. e e 8.5.2 Analyse de l’algorithme L’analyse correspondant au principe expos´ ci-dessus est donc d´riv´e de celle de l’algorithme e e e g´n´ral d’exploration de la descendance de 1. Les ´l´ments du tas sont ici des objets ` deux e e ee a champs (SOMMET, RE ´EL), o` ` chaque sommet x du graphe valu´ est associ´ son attribut λ(x) ua e e ee e e ´ (lorsque celui-ci a ´t´ initialis´). Les valeurs du type de base sont ordonn´es par le champ REEL (attributs λ) Invariant : (I1) : A = sommets d’´tat en attente ⊆ Γ∗ (1) e (I2) : T = sommets d’´tat termin´ ⊆ Γ∗ (1) e e (I3) : ∀x ∈ T : Γ(x) ⊆ T ∪ A (I4) : ∀x ∈ T : (λ(x), pred(x)) = attributs minimaux de x (I5) : ∀x ∈ A : λ(x) = miny∈T ∩Γ−1 (x) (λ(y) + v(y,x)) pred(x) = sommet pour lequel ce minimum est at- teint Termin´ :e A.tasvide Progression : (nouv, λ) ←A.mintas ; A.oter de tas ; T ←T ∪ {nouv} ; M OD ←Γ(nouv) ; ∀x ∈ M OD : si x ∈ A alors mise ` jour de (λ(x), pred(x)) a sinon initialisation de (λ(x), pred(x)) ; A.mettre en tas(x, λ(x)) fsi Valeurs initiales : T ←∅ ; A.creer λ(x0 ) ←0 ; A.mettre en tas((x0 ,0)) c IFSIC 2004
  • 115.
    8.5. Cas desarcs de valeur positive ou nulle : algorithme de DIJKSTRA 115 8.5.3 Exemple d’ex´cution e 1 1 1 5 8 3 2 2 2 4 4 1 0 2 6 5 2 4 5 1 3 4 7 2 2 Fig. 8.2 – Exemple pour l’algorithme de Dijkstra Etape nouv MOD tas Termin´s e init (0,0) 1 0 1,2,3 (1,3),(2,4),(3,5) 0 2 1 2,5 (2,4),(5,4),(3,5) 0,1 3 2 3,4 (5,4),(3,5),(4,8) 0,1,2 4 5 2,6 (3,5),(4,8),(6,6) 0,1,2,5 5 3 4 (6,6),(4,7) 0,1,2,5,3 6 6 2,7 (4,7),(7,11) 0,1,2,5,3,6 7 4 -,7 (7,9) 0,1,2,5,3,6,4 8 7 ∅ ∅ 0,1,2,5,3,6,4,7 fin de l’algorithme. Le sommet 8 est inaccessible 8.5.4 Texte de l’algorithme 8.5.5 Preuve Lemme 8.17 Les valeurs initiales v´rifient l’invariant e D´monstration. Evident. e Lemme 8.18 L’invariant est maintenu par la progression. D´monstration. Les parties I1, I2 et I3 de l’invariant sont maintenues par la progression : seul e c IFSIC 2004
  • 116.
    116 Chemins de valeur optimale ALGORITHME DE DIJKSTRA REEL SOMMET::λ ; SOMMET SOMMET::pred ; dijkstra(GRAPHE G, SOMMET x) c’est local ENUM[dehors,en attente,termin´] SOMMET::´tat ; e e TAS[DOUBLET[SOMMET, REEL]] A; ENS[SOMMET] MOD -- sommets modifiables SOMMET z, nouv ; REEL w; d´but e depuis pourtout x de G.lst som faire x.´tat ← dehors fpourtout ; e A.creer ; x.´tat ← en attente ; x.λ ← 0 ; e A.mettre en tas((x,0)) ; jusqua A.vide faire (nouv,w) ← A.mintas ; -- w=nouv.λ A.^ter de tas; o nouv.´tat ← termin´ ;MOD ← G.lst succ(nouv) ; e e -- mise ` jour des marques des sommets modifiables a pourtout z de MOD cas z.´tat = dehors −→ z.´tat ← en attente ; e e z.λ ← w + G.v(nouv, z) ; z.pred ← nouv ; A.mettre en tas((z, z.λ)) z.´tat = en attente −→ si w + G.v(nouv, z) < z.λ e alors A.reorg((z, z.λ),(z, w + G.v(nouv, z))); z.λ ← w + G.v(nouv, z) ; z.pred ← nouv fsi z.´tat = termin´ −→ rien e e fcas fpourtout fait -- les sommets d’´tat dehors sont inaccessibles e fin le sommet nouv passe de l’´tat en attente ` l’´tat termin´; il est ˆt´ de A, ajout´ ` T et il e a e e oe e a est descendant de 1. D’autre part, les nouveaux ´l´ments de A sont successeurs de nouv, donc ee c IFSIC 2004
  • 117.
    8.5. Cas desarcs de valeur positive ou nulle : algorithme de DIJKSTRA 117 descendants de 1. Pour I4 et I5, il faut montrer : 1. le sommet nouv v´rifie I4 e 2. les sommets z ∈ A, dont les attributs sont initialis´s ou modifi´s, v´rifient I5 e e e £ Maintien de I4 : ici, T d´signe la valeur de l’ensemble des sommets d’´tat termin´ au d´but e e e e du pas d’it´ration (avant l’adjonction de nouv). e Soit u un chemin quelconque de 1 ` a nouv. Comme 1 ∈ T et nouv ∈ T , x 0 ce chemin ”sort” de T : soit z le der- nouv nier sommet de u, faisant partie de T , et z son successeur sur u, qui appartient donc ` A par construc- a z z' M tion (´ventuellement, z = nouv). Le e chemin u se d´compose en : e u = [1 ∗ z] · (z,z ) · [z ∗ nouv], et donc : v(u) = v[1 ∗ z] + v(z,z ) + v[z ∗ nouv] ≥ v[1 ∗ z] + v(z,z ) (valeurs des arcs ≥ 0) ≥ λ(z) + v(z,z ) (z ∈ T ) et I4 ≥ λ(z ) (z ∈ Γ−1 (z ) ∩ T et I5) ≥ λ(nouv) (crit`re de s´lection de nouv) e e λ(nouv) minore donc la valeur des chemins de 1 ` nouv. a D’autre part, soit y = pred(nouv). Par construction : λ(nouv) = λ(y) + v(y,nouv) Comme y ∈ T , il existe un chemin [1 ∗ y], de valeur λ(y). Le chemin [1 ∗ y].(y,nouv) a donc pour valeur λ(nouv), ce qui montre le point 1 (maintien de I4). £ Maintien de I5 : Soit x ∈ Γ(nouv). – Si x est dans l’´tat dehors, alors Γ−1 (x) ∩ T = {nouv}, sans quoi x serait d´j` dans A au e ea d´but de l’´tape. Par construction, les attributs de x v´rifient bien I5 e e e – Si x est dans l’´tat en attente, alors nouv est ajout´ ` Γ−1 (x) ∩ T , et le test sur λ(x) e e a montre que les nouveaux attributs de x v´rifient toujours I5 e P Proposition 8.19 (Correction partielle). Si l’algorithme s’arrˆte, on a e ` l’arrˆt : a e ∀x ∈ Γ∗ (1)), les valeurs (λ(x), pred(x)) constituent les attributs mini- maux de x D´monstration. Il suffit de montrer que, lorsque l’algorithme est termin´, on a : T = Γ∗ (1); le e e r´sultat d´coule alors de I4. e e D’apr`s I1, on a T ⊆ Γ∗ (1) e c IFSIC 2004
  • 118.
    118 Chemins de valeur optimale R´ciproquement, d’apr`s I3 et la condition d’arrˆt A = ∅, tout successeur d’un sommet de e e e T appartient ` T ; donc tout descendant d’un sommet de T appartient aussi ` T , ce qui montre a a l’inclusion inverse Γ∗ (1) ⊆ T P Proposition 8.20 (Terminaison) L’algorithme s’arrˆte au bout d’un e nombre fini d’it´rations e D´monstration. La fonction card(T ) est strictement croissante, ` valeurs enti`res positives ou e a e nulles et major´e par la valeur finie card(Γ∗ (1)); la condition d’arrˆt (A = ∅) ≡ (T = Γ∗ (1)) est e e donc obtenue en un nombre fini d’´tapes. P e 8.5.6 Complexit´ e L’algorithme effectue au plus n pas d’it´rations, et ` l’´tape no k, on a : e a e card(T ) = k, card(A) ≤ n − k, card(M OD) ≤ d+ (nouvk ), o` d+ (x) = card(Γ(x)), et nouvk le k eme sommet termin´. u ` e La boucle sur M OD comporte donc au plus d + (nouv ) additions, comparaisons et acc`s e k mettre en tas ou reorg (exclusivement l’un de l’autre). De plus, 1 acc`s min, 1 acc`s ˆter de tas et un acc`s lst succ sont effectu´s ` chaque ´tape. e e o e e a e Au total, on a donc au plus (m d´signe le nombre d’arcs) : e n k=1 d+ (nouvk ) = m additions, comparaisons; m acc`s mettre en tas ou reorg e n acc`s min, ˆter de tas; e o n acc`s lst succ e Or, on d´montre (dans les cours sur les structures de donn´es ou sur les m´thodes de tri) e e e que la gestion d’un tas de p ´l´ments n´cessite O(log2 p) comparaisons pour la mise en œuvre ee e des acc`s mettre en tas, reorg, ˆter de tas et O(1) pour min. e o La complexit´ de l’algorithme est donc finalement : e O(m + n log2 n) comparaisons O(n) acc`s lst succ e Remarque. Supposons qu’il existe une constante d telle que ∀x ∈ X : d+ (x) ≤ d (ce qui implique notamment m ≤ d.n). On a alors O(m) = O(n) et, de plus, la complexit´ de mise en e œuvre d’un acc`s lst succ est O(1). L’algorithme est alors en O(n log2 n) e (La mˆme remarque vaut si le graphe est peu dense, c’est-`-dire m est beaucoup plus petit e a que n2 ) 8.6 Cas des graphes sans circuit : algorithme ORDINAL 8.6.1 Principe Comme l’algorithme de Dijkstra, cet algorithme rentre dans la cat´gorie des algorithmes e gloutons; c’est l’hypoth`se restrictive d’absence de circuit qui rend cette simplification possible. e c IFSIC 2004
  • 119.
    8.6. Cas desgraphes sans circuit : algorithme ORDINAL 119 (Par contre, les valeurs des arcs peuvent ˆtre de signe quelconque). e Dans un premier temps, nous pr´sentons un algorithme valable dans le cas o` le sommet 1 e u est racine de G, c’est ` dire : a Γ−1 (1) = ∅ et Γ∗ (1) = X Nous verrons ensuite comment lever cette hypoth`se. e Le parcours de la liste des arcs est ici organis´ selon la m´thode employ´e lors du calcul de e e e la fonction ordinale (§7.2) avec, en plus, la prise en compte des valeurs des arcs, d’o` le nom u donn´ ` cet algorithme. Ainsi, un arc (x,y) est examin´ lorsque x est point d’entr´e du graphe ea e e courant, sachant que les attributs d´finitifs (λ(x), pred(x)) ont d´j` ´t´ calcul´s. e eaee e La mise en œuvre de cet algorithme se fait alors selon l’analyse qui suit. 8.6.2 Analyse Invariant : H sous-graphe de G ; E = ensemble des points d’entr´e de H ; e M = G.ens som H.ens som (sommets qui ne sont pas dans H). ∀x ∈ M : (λ(x), pred(x)) = attributs minimaux de x Arrˆt : e H vide Progression : (H non vide, donc E non vide puisque H n’a pas de circuit) x ←element(E) ; - - tous les pr´d´cesseurs de x sont dans M e e λ(x) ←miny∈Γ−1 (x) (λ(y) + v(y,x)) pred(x)=sommet pour lequel ce min est atteint M ←M ∪ {x}; H.oter sommet(x) ; E ←H.points entree Valeurs initiales : H ←G ; H.oter som(1) ; M ←{1} ; λ(1) = 0 ; pred(1) non d´fini; e E ←H.points entree 8.6.3 Preuve Lemme 8.21 Les valeurs initiales satisfont l’invariant. e ´ D´monstration Evident, par construction. P c IFSIC 2004
  • 120.
    120 Chemins de valeur optimale Lemme 8.22 La progression maintient l’invariant. D´monstration Notons H ,M ,E les valeurs au d´but de l’´tape. Par hypoth`se, l’invariant e e e e est v´rifi´ pour ces valeurs. Soit H, M, E les valeurs ` la fin de l’´tape, et x le sommet s´lectionn´ e e a e e e durant l’´tape. e – H = H priv´ de x, donc H est un sous-graphe de G. e – M = M ∪ {x} donc M est l’ensemble des sommets qui ne sont pas dans H. – E = ensemble des points d’entr´e de H, par construction. e – ∀y ∈ M : (λ(y), pred(y)) = attributs minimaux de y. Il reste donc ` montrer quea (λ(x), pred(x)) = attributs minimaux de x. On peut ´crire : e Cx = Cy,x y∈Γ−1 (x) o` Cy,x est l’ensemble de chemins de 1 ` x dont l’avant-dernier sommet est y. On a donc, par u a associativit´ du minimum : e min v(u) = min ( min v(u)) u∈Cx y∈Γ−1 (x) u∈Cy,x = min ( min (v[1 y] + v(y,x))) y∈Γ−1 (x) u∈Cy,x = min ( min (v(u ) + v(y,x))) y∈Γ−1 (x) u ∈Cy = min (v(y,x) + min v(u )) et, comme y ∈ M : y∈Γ−1 (x) u ∈Cy = min (v(y,x) + λ(y)) y∈Γ−1 (x) = λ(x) De plus, λ(x) = v(y,x) + λ(y), avec y = pred(x). Donc pred(x) est bien le pr´d´cesseur de x e e sur un chemin de 1 ` x, de valeur λ(x). Enfin, par hypoth`se sur G, tout chemin est ´l´mentaire. a e ee Donc, (λ(x), pred(x)) satisfont la d´finition des attributs minimaux de x. e P Proposition 8.23 (Correction partielle) A l’arrˆt de l’algorithme : e ∀x ∈ X les attributs (λ(x), pred(x)) sont minimaux. D´monstration A l’arrˆt, on a H.vide donc M = G.ens som. Le r´sultat d´coule de l’invariant. e e e e P Proposition 8.24 (Terminaison) L’algorithme s’arrˆte au bout d’un e nombre fini d’´tapes. e c IFSIC 2004
  • 121.
    8.6. Cas desgraphes sans circuit : algorithme ORDINAL 121 D´monstration A la fin de chaque ´tape, on a ¬H.vide ⇒ E = ∅ car le graphe est sans e e circuit (cf. proposition 7.1). Donc, dans chaque ´tape, la s´lection d’un sommet x est possible. e e Ce sommet ´tant ˆt´ de M lors de l’´tape, la fonction card(X M ), minor´e par 0, d´croˆ e oe e e e ıt strictement d’une unit´ ` chaque pas d’it´ration. ea e P 8.6.4 Texte de l’algorithme Il est donn´ page 121 e ALGORITHME ORDINAL RACINE REEL SOMMET::λ ; SOMMET SOMMET::pred ; ordinal racine(GRAPHE G; SOMMET x) c’est local ENS[SOMMET] M; -- sommets marqu´s e ENS[SOMMET] E; -- points d’entr´e courants e GRAPHE H ; -- graphe courant SOMMET x, y; d´but e depuis x.λ ← 0 ; H ← G; H.otersom(x) ; M ← {x0 } ; E ← H.points entree jusqua H.vide ou sinon E = ∅ faire -- selection d’un sommet de E x ← E.element ; (x.λ, x.pred) ← min(y.λ+G.v(y,x), G.lst pred(x)) ; M ← M ∪ {x} ; H.oter sommet(x) ; E ← H.points entree fait ; -- si E=∅ alors G a des circuits : algorithme inapplicable fin min a la mˆme signification que dans l’algorithme de e Bellmann-Kalaba (cf. page 109). c IFSIC 2004
  • 122.
    122 Chemins de valeur optimale 8.6.5 Complexit´ e Il y a exactement n ´tapes. A chaque ´tape, un sommet est d´finitivement ”marqu´” (mis e e e e dans M). Si x d´signe ce sommet, le calcul de x.λ est un calcul de minimum sur l’ensemble e des pr´d´cesseurs de x, qui n´cessite | Γ−1 (x) | −1 comparaisons. L’algorithme effectue donc e e e −1 (| Γ (x) | −1) = m − n comparaisons (m est le nombre d’arcs de G, avec m ≤ n2 ). C’est x∈X donc un algorithme en O(n2 ). 8.6.6 Adaptations et am´liorations e 8.6.6.1 Calcul progressif des attributs Au lieu de calculer les attributs (λ(x), pred(x)) d’un seul coup (lorsque x est ˆt´ du graphe), oe on peut les calculer progressivement en maintenant l’invariant suivant: ∀x ∈ E : (λ(x), pred(x))=attributs minimaux de x. Pour cela, on modifie la progression ainsi(x d´signe le sommet s´lectionn´ ` l’´tape courante) : e e ea e pour tout y de H.lst succ(x) si x.λ+H.v(x,y) < y.λ alors y.λ ← x.λ+H.v(x,y) ; y. pred ← x fsi fpour Il est alors facile de v´rifier que tout sommet devenant point d’entr´e de H aura d´j` ses attributs e e ea minimaux. 8.6.6.2 Mise ` jour de l’ensemble des points d’entr´e a e Dans la progression, l’ensemble des points d’entr´e E est recalcul´. Or, si H et E (resp. H e e et E) d´signent les valeurs au d´but (resp. ` la fin) d’une ´tape, on a : e e a e H est obtenu en enlevant de H un sommet x ∈ E , E est l’ensemble des points d’entr´e de H. e On pourrait exploiter la connaissance de E pour recalculer E : E = E {x}∪{nouveaux points d’entr´e}. Or, les nouveaux points d’entr´e ne peuvent ˆtre e e e que parmi les successeurs de x. On associe ` chaque sommet y l’attribut entier nb tel que nb(y)= a nombre de pr´d´cesseurs de y dans H. Ces attributs sont g´r´s de la mani`re suivante : e e ee e – D`s que y est ”visit´” (c’est-`-dire lorsqu’un de ses pr´d´cesseurs est s´lectionn´) : y.nb e e a e e e e ←H.nb pred(y) (initialisation). – Lorsqu’un sommet x est ˆt´ de H : oe ∀ y ∈ H.lst succ(x) : y.nb ← y.nb-1; si y.nb =0 alors E ← E ∪ {y} c IFSIC 2004
  • 123.
    8.6. Cas desgraphes sans circuit : algorithme ORDINAL 123 8.6.6.3 Nouvelle version de l’algorithme On peut mettre en œuvre l’une ou l’autre de ces deux adaptations. On donne le texte de l’algorithme prenant en compte les deux ` la fois. a ALGORITHME ORDINAL RACINE (deuxi`me version) e REEL SOMMET::λ ; SOMMET SOMMET::pred ; ordinal racine(GRAPHE G, SOMMET x) c’est local ENS[SOMMET] D; -- sommets dehors ENS[SOMMET] E; -- points d’entr´e courants e GRAPHE H ; -- graphe courant ENT SOMMET ::nb ; SOMMET x, y; d´but e depuis x.λ ← 0 ; H ← G; D ← G.ens som {x0 } ; E ← {x0 } jusqua H.vide ou sinon E = ∅ faire -- selection d’un sommet de E x ← E.element ; pour tout y de H.lst succ(x) si y ∈ D alors y.nb ← H.nb pred(y) ; y.λ ← x.λ+H.v(x,y) ; y.pred ← x sinon si x.λ+H.v(x,y) < y.λ alors y.λ ← x.λ+H.v(x,y) ; y.pred ← x fsi ; y.nb ← y.nb - 1 ; si y.nb=0 alors E ← E ∪ {y} fsi fpourtout ; E ← E {x} fait ; -- si E=∅ alors G a des circuits : algorithme inapplicable fin c IFSIC 2004
  • 124.
    124 Chemins de valeur optimale 8.6.6.4 G´n´ralisation au cas o` 1 n’est pas n´cessairement point d’entr´e e e u e e Il faut alors tenir compte des sommets x ∈ Γ∗ (1), pour lesquels λ(x) ne doit pas ˆtre d´fini. e e L’algorithme doit alors mettre en ´vidence, parmi les sommets ”marqu´s”, ceux qui sont des- e e cendants de 1. Le calcul des attributs (λ(x), pred(x)) se fera en ne tenant compte que des descendants de 1, g´r´ comme dans les algorithmes d’exploration. ee Nous laisserons au lecteur le soin d’´crire le texte de l’algortihme, d’´tablir la preuve et e e d’´tudier la complexit´, de mani`re analogue ` l’algorithme Ordinal-racine. e e e a 8.7 Valeurs optimales de tout sommet ` tout sommet a 8.7.1 De la fermeture transitive aux valeurs optimales Le but de ce probl`me est de calculer les nombres e λij = valeurs minimales des chemins de i ` j pour tous couples (i,j) (si j ∈ Γ+ (i), on peut a poser, arbitrairement, λij = +∞). Si on revient au probl`me de la fermeture transitive, il s’agissait alors de calculer les bool´ens : e e bij = (j ∈ Γ+ (i)) Il est clair que ces bool´ens v´rifient : e e (2) ∀i ∈ X, ∀j ∈ X : bij = [bik ∧ v(k,j)] k∈Γ−1 (j) o` v(k,j) est la valeur d’existence (bool´enne) de l’arc(k,j). u e La comparaison de (1) et (2) montre qu’il y a une analogie entre les deux probl`mes, aux e transformations suivantes pr`s : e valeur des arcs et des chemins : r´el ∪{+∞} e booleen op´rations sur les arcs : e + op´rations sur les chemins : e min valeurs remarquables : 0 (neutre de +) vrai (neutre de ) +∞ (neutre de min, faux (neutre de , absorbant de +) absorbant de Ceci sugg`re l’id´e suivante : de tout algorithme d’existence de chemin on peut d´duire un e e e algorithme de chemin de valeur minimale. En particulier, les algorithmes de calcul de la fermeture transitive ont leur ´quivalent. e 8.7.2 Transformation de l’algorithme des puissances Pour l’algorithme des puissances, il suffit de remplacer : – L’op´ration ◦ par +, dont nous donnons l’algorithme ci-dessous page 125 e – L’op´ration par l’op´ration min telle que : e e G3 = (X,Γ3,V 3) = min(G1,G2) est d´fini par : e c IFSIC 2004
  • 125.
    8.7. Valeurs optimalesde tout sommet ` tout sommet a 125 V 3(i,j) = min[V 1(i,j),V 2(i,j)] (par convention, (i,j) ∈ Γ ⇔ v(i,j) < +∞) ALGORITHME G1 + G2 GRAPHE composer-general(GRAPHE G1, G2) c’est -- pr´ : G1.lst som = G2.lst som; G1 et G2 ont mˆme type de valeurs d’arcs e e local SOMMET x, y, z ; ENS[SOMMET] X REEL w1, w2, w3 ; d´but e Result.creer ; X ← G1.lst som ; -- ou G2.lst som pourtout x de X pourtout y de X w3 ← Result.v(x,y) ; pourtout z de X w1 ← G1.v(x,z) ; w2 ← G2.v(z,y) ; si w1 = nil et w2 = nil alors si w3 = nil alors w3 ← min(w1 + w2, w3) sinon w3 ← w1 + w2 fsi fsi fpourtout ; si w3 = nil alors Result.modif val(x,y,w3) fsi fpourtout fpourtout fin La validit´ de l’algorithme des puissances (adapt´ du §5.3) d´coule des propri´t´s alg´briques e e e ee e suivantes, faciles ` v´rifier : a e min est associative, commutative + est associative, poss`de l’´l´ment neutre D = (X,∆) valu´ par 0, et est distributive par e ee e rapport ` min. a Enfin, ∀k : la valeur v (k) de tout arc (x,y) ∈ Γ(k) est ´gale ` la valeur minimale des chemins e a reliant x ` y dans G, de longueur k. a Toutefois, la possibilit´ d’existence de circuits absorbants oblige ` faire les v´rifications e a e suppl´mentaires suivantes pour l’algorithme des puissances (§5.3) : il faut rajouter la condi- e tion d’arrˆt k = n qui, si elle est obtenue, est ´quivalente ` l’existence d’un circuit absorbant ; e e a c IFSIC 2004
  • 126.
    126 Chemins de valeur optimale en effet, on a alors : min(G, . . . ,G(n) ) = min(G, . . . ,G(n−1) ) ce qui prouve qu’il existe un chemin de longueur n (circuit hamiltonien ou chemin non ´l´mentaire), ee de valeur v < aux valeurs de tous les chemins ´l´mentaires. ee 8.7.3 Transformation de l’algorithme de Roy-Warshall En nous inspirant des mˆmes principes, nous pouvons adapter l’algorithme de Roy-Warshall (ap- e pel´ Warshall-Floyd); nous donnons ci- dessous (page 127) la version avec routage proc´dur´, e e e suivie des proc´dures de routage. e Nous ne red´montrerons pas en d´tail cet algorithme, la d´monstration ´tant en tous points e e e e analogue ` celle de l’algorithme de roy- Warshall avec routage ; on a les 3 lemmes suivants : a 1. A l’issue de l’algorithme, ∀z ∈ X,∀y ∈ X : y.R[z] = nil si et seulement si (y,z) ∈ Γ+ 2. Si G n’a pas de circuit absorbant alors, pour tout couple (y,z) ∈ Γ+ on a, ` l’issue de a l’algorithme : y.R[z] est successeur de y sur un chemin de valeur minimale de y ` z. a 3. Si G n’a pas de circuit absorbant alors, pour tout couple (y,z) ∈ Γ+ , tout chemin de valeur minimale de y ` z est ´l´mentaire a ee On d´duit de ces trois lemmes que : si G n’a pas de circuit absorbant, les tables de routage R e permettent d’obtenir les trac´s de chemins de valeur minimale entre tout couple de sommets. e Cas o` G a des circuits absorbants u Cette situation peut ˆtre d´tect´e ` l’examen du graphe Result ` l’issue de l’algorithme. En e e e a a effet, l’existence d’un circuit absorbant passant par un sommet x se manifestera par la propri´t´ : ee Result.v(x,x) < 0 Si tel est le cas, les valeurs des arcs de Result ne peuvent ˆtre interpr´t´es comme des valeurs e ee minima, puisque les valeurs des chemins ne sont pas n´cessairement born´es inf´rieurement. e e e Toutefois, les fonctions de routage permettent d’obtenir le trac´ de circuits absorbants, et donc e d’en ´liminer. En effet, soit x ∈ X tel que Result.v(x,x) < 0. La suite d´finie par e e x1 = x.R[x],x2 = x1 .R[x], . . . ,xj = xj−1 .R[x] comporte une r´p´tition, laquelle correspond ` un circuit absorbant. e e a Exemple : 0 1 -2 1 2 3 -2 Sur une mise en œuvre matricielle (y.R[z] = R[y,z]) on obtient, par applications successive de θ1 , θ2 , θ3 (` gauche : matrice des valeurs, ` droite matrice R) : a a c IFSIC 2004
  • 127.
    8.7. Valeurs optimalesde tout sommet ` tout sommet a 127 Algorithme WARSHALL-FLOYD TABLE[SOMMET,SOMMET] SOMMET::R ; GRAPHE warshall floyd(GRAPHE G) c’est local SOMMET x, y, z ; ENS[SOMMET] X ; REEL vy, vz, w ; d´but e Result ← G ; X ← G.lst som ; initroutage ; pourtout x de X pourtout y de X vy ← Result.v(y,x) ; si vy = nil alors pourtout z de X vz ← Result.v(x,z) ; si vz = nil alors w ← Result.v(y,z) ; si w = nil alors si vy + vz < w alors w ← vy + vz ; maj routage(y,z,x) fsi sinon w ← vy + vz ; maj routage(y,z,x) fsi ; Result.modif val(y,z,w) fsi fpourtout fsi fpourtout fpourtout fin avec : nil si (y,z) ∈ Γ initroutage : ∀z ∈ X, ∀y ∈ X : y.R[z]← z si (y,z) ∈ Γ majroutage(y,z,x) : y.R[z]←y.R[x] c IFSIC 2004
  • 128.
    128 Chemins de valeur optimale 1 2 3 1 2 3 1 1 1 2 2 -2 2 3 3 0 -2 3 1 2 θ1 ↓ 1 2 3 1 2 3 1 1 1 2 2 -2 2 3 3 0 -2 3 1 2 θ2 ↓ 1 2 3 1 2 3 1 1 -1 1 2 2 2 -2 2 3 3 0 -2 -4 3 1 2 2 θ3 ↓ 1 2 3 1 2 3 1 -1 -3 -5 1 2 2 2 2 -2 -4 -6 2 3 3 3 3 -4 -6 -8 3 2 2 2 d’o` les suites (` partir de 1, 2 et enfin 3) : u a 1, R[1,1]=2, R[2,1]=3, R[3,1]=2 −→ circuit 2,3,2 2, R[2,2]=3, R[3,2]=2 −→ circuit 2,3,2 3, R[3,3]=2, R[2,3]=3 −→ circuit 3,2,3 Le circuit absorbant 2,3,2 (valeur -4) est d´tect´, mais pas le circuit 1,2,3,1 (valeur -1). e e 8.8 Alg`bres de chemins : transformations d’algorithmes e Au paragraphe pr´c´dent, nous avons mis en ´vidence la possibilit´ de d´duction d’un algo- e e e e e rithme de chemin de valeur minimale ` partir d’un algorithme d’existence de chemin, grˆce ` la a a a transformation : ({vrai,faux}, ∨ ,∧) −→ (R ∪ {+∞}, min ,+) On peut d´gager une structure abstraite, appel´e dio¨ ou encore semi-anneau, ` partir e e ıde a de laquelle d’autres transformations pourront ˆtre d´duites. e e c IFSIC 2004
  • 129.
    8.8. Alg`bres dechemins : transformations d’algorithmes e 129 D´finition 8.25 On appelle dio¨ un triplet (S, ⊕ ,⊗) o` S est en e ıde u ensemble, muni des deux lois de composition internes ⊕ et ⊗ , et satis- faisant aux axiomes suivants : A1 ⊕ est associative, commutative et poss`de un ´l´ment neutre α. e ee A2 ⊗ est associative et poss`de un ´l´ment neutre e. e ee A3 ⊗ est distributive ` droite et ` gauche par rapport ` ⊕. a a a A4 α est ´l´ment absorbant de ⊗. ee La structure (E, ⊗ , ) introduite au paragraphe 8.1 rentre dans ce cadre. En effet, la relation d’ordre d´finit une loi ⊕, de la mani`re suivante: e e w1 ⊕ w2 = w1 si w1 w2 w2 si w2 w1 Les axiomes A1 ` A4 sont alors v´rifi´s sur (E, ⊕ ,⊗). a e e pour A1: – La v´rification de l’associativit´ et de la commutativit´ de ⊕ sont imm´diates e e e e – α est maximum pour , donc w ⊕ α = w pour A2: les hypoth`ses sur ⊗ sont identiques e w1 ⊗ w2 si w2 w3 compatibilt´ avec ⊗ e pour A3: w1 ⊗ (w2 ⊕ w3 ) = w1 ⊗ w3 si w3 < w2 D’autre part, w2 w3 ⇒ w1 ⊗ w2 w1 ⊗ w3 ⇒ (w1 ⊗ w2 ) ⊕ (w1 ⊗ w3 ) = w1 ⊗ w2 et de mˆme e w3 w2 ⇒ w1 ⊗ w3 w1 ⊗ w2 ⇒ (w1 ⊗ w2 ) ⊕ (w1 ⊗ w3 ) = w1 ⊗ w3 Dans les deux cas, on a donc : w1 ⊗ (w2 ⊕ w3 ) = (w1 ⊗ w2 ) ⊕ (w1 ⊗ w3 ) On v´rifie de mˆme la distributivit´ ` droite. e e ea Par contre, la structure de dio¨ (E,⊕,⊗) ne rentre pas toujours dans le cadre de la structure ıde d´finie au §8.1: on ne peut pas toujours d´duire une relation d’ordre total de la loi de composition e e ⊕. Ceci est illustr´ notamment par les exemples 8 et 9 ci-apr`s. La structure de dio¨ est donc e e ıde plus abstraite, mais aussi plus riche - puisqu’elle permet de rendre compte de situations plus nombreuses - que celle d’ensemble totalement ordonn´. e c IFSIC 2004
  • 130.
    130 Chemins de valeur optimale Dans la structure de dio¨ıde, la notion de circuit absorbant se g´n´ralise comme suit : un e e circuit est dit absorbant si sa valeur v v´rifie : e v⊕e=e En fonction du choix du dio¨ (S, ⊕ ,⊗) on peut interpr´ter concr`tement la valeur (dans ıde e e S) v(x,y) et la valeur (dans S) des expressions : ∀x ∈ X,∀y ∈ X : λ(x,y) = v(u) = v(u) {u∈X ∗ |u=[x∗y]} {u∈X ∗ |u=[x∗y]∧v(u)=α} o`, si u = (x1 , . . . ,xp ), on a pos´ u e v(u) = v(xj ,xj+1 ) j=1,...,p−1 Exemples 1) Existence d’au moins un chemin S ≡ {faux,vrai}; ⊕ ≡ ∨; ⊗ ≡ ∧; α = faux; e = vrai v(x,y) = si(x,y) ∈ Γ alors vrai sinon faux; ∀s ∈ S,s ∨ vrai = vrai donc il n’y a pas de circuit absorbant ; λ(x,y) = vrai si et seulement si il existe un chemin de x ` y dans G. a 2) Chemin de valeur minimale S = R ∪ {+∞}; ⊕ = min; ⊗ = +; α = +∞; e = 0; v(x,y) = si(x,y) ∈ Γ alors valeur num´rique de l’arc e sinon + ∞ Un circuit de valeur v telle que min(v,0) = 0 (c’est ` dire v < 0) est absorbant. a λ(x,y) = valeur minimale des chemins de x ` y (s’il n’y a pas de circuit a absorbant) 3) chemin de valeur maximale S = R ∪ {−∞}; ⊕ = max; ⊗ = +; α = −∞; e = 0; v(x,y) = si (x,y) ∈ Γ alors valeur num´rique de l’arc e sinon − ∞ Un circuit de valeur v telle que max(v,0) = 0 (c’est ` dire v > 0) est absorbant. a λ(x,y) = valeur maximale des chemins de x ` y (s’il n’y a pas de a circuit absorbant). 4) Chemin de fiabilit´ maximale e S = [0,1]; ⊕ = max; ⊗ = ×; α = 0; e = 1; c IFSIC 2004
  • 131.
    8.8. Alg`bres dechemins : transformations d’algorithmes e 131 v(x,y) = si (x,y) ∈ Γ alors fiabilit´ de l’arc e sinon 0 Toute valeur p ∈ S v´rifie max(p,1) = 1 donc il n’y a pas de circuit absorbant. e λ(x,y) = fiabilit´ maximale des chemins de x ` y. e a 5) Chemin de capacit´ maximale e S = R+ ∪ {+∞}; ⊕ = max; ⊗ = min; α = 0; e = +∞; v(x,y) = si (x,y) ∈ Γ alors capacit´ de l’arc e sinon 0 Toute valeur c ∈ S v´rifie max(c, + ∞) = +∞ donc il n’y a pas de circuit absorbant. e λ(x,y) = capacit´ maximale des chemins de x ` y. e a 6) Chemin de fiabilit´ minimale e S = [0,1] ∪ {α}(α ∈ [0,1]); ⊕ = min sur [0, 1], prolong´e par ∀x ∈ S : x ⊕ α = x; e ⊗ = × sur [0, 1], prolong´e par ∀x ∈ S : x ⊗ α = α; e = 1; e v(x,y) = si (x,y) ∈ Γ alors fiabilit´ de l’arc e sinon α Toute valeur p ∈ S,p = 1,p = α v´rifie p ⊕ e = min(p,1) = p donc tout circuit de fiabilit´ < e e 1 est absorbant. λ(x,y) = fiabilit´ minimale des chemins de x ` y (s’il n’y a pas de e a circuit absorbant). 7) Chemin de capacit´ minimale e S = R+ ∪ {+∞} ∪ {α}(α ∈ R+ ∪ {+∞}); ⊕ = min sur R+ ∪ {+∞}, prolong´e par ∀x ∈ S : x ⊕ α = x; e ⊗ = min sur R+ ∪ {+∞}, prolong´e par∀x ∈ S : x ⊗ α = α; e e = +∞; v(x,y) = si (x,y) ∈ Γ alors capacit´ de l’arc e sinon α Toute valeur p ∈ S,p = +∞,p = α, v´rifie p ⊕ e = min(p, + ∞) = p donc tout circuit de e capacit´ < ∞ est absorbant. (toutefois, p e 2 ⊕ p ⊕ e = p ⊕ e, o` p2 = p ⊗ p, donc un circuit n’est u absorbant ”qu’une fois”). λ(x,y) = capacit´ minimale des chemins de x ` y (s’il n’y a pas de e a circuit absorbant). c IFSIC 2004
  • 132.
    132 Chemins de valeur optimale 8) D´nombrement des chemins e S = N; ⊕ = +; ⊗ = ×; α = 0; e = 1 v(x,y) = si (x,y) ∈ Γ alors 1 sinon 0 Toute valeur n ∈ N v´rifie n + 1 = 1 donc tout circuit est absorbant. e λ(x,y) = nombre de chemins distincts de x ` y (s’il n’y a pas de circuit). a ´ 9) Enum´ration des chemins ´l´mentaires (exemple difficile) : e ee + Soit X l’ensemble de toutes les suites sans r´p´tition d’´l´ments de X, ayant au moins un e e ee ´l´ment. Notons n = |X|. S est alors l’ensemble constitu´ des n(n − 1) ´l´ments sx,y , x ∈ X, y ∈ ee e ee + X, x = y, o` sx,y est un ensemble d’´l´ments de X de la forme [x ∗ y], des n ´l´ments sx = {[x]} u ee ee (x ∈ X) et de l’´l´ment e = x∈X sx (identifi´ ` X). On a donc |S| = n2 + 1. Notons qu’on peut ee ea avoir sx,y = ∅ pour certains couples (x,y), x = y. En outre, ⊕ = ∪; ⊗ = multiplication latine ; α = ∅ La multiplication latine est d´finie comme suit : e – ∀s ∈ S : s ⊗ α = α ⊗ s = α (α = ∅ est donc l’´l´ment absorbant de S). ee – ∀x, ∀y, ∀z, ∀t, z = t : sx,z ⊗ st,y = α. – ∀x, ∀z : sx,z ⊗ sz,x = α – ∀x, ∀y ,∀z , y = z : sx,y ⊗ sz = α – ∀x, ∀y ,∀z , x = z : sz ⊗ sx,y = α – ∀x, ∀y : sx ⊗ sx,y = sx,y – ∀x, ∀y : sx,y ⊗ sy = sx,y + – ∀x, ∀y, ∀z , x = y : sx,z ⊗ sz,y = {u ∈ X |u = [x ∗ z ∗ y],[x ∗ z] ∈ sx,z ,[z ∗ y] ∈ sz,y Exemple : si s1,4 = {[1,4],[1,2,4]} et s4,5 = {[4,5],[4,2,5],[4,3,5]} on a : s1,4 ⊗ s4,5 = {[1,4,5],[1,4,2,5],[1,4,3,5],[1,2,4,5],[1,2,4,3,5]}. Il est facile de v´rifier que l’´l´ment neutre de ⊗ est e. e ee La valuation du graphe est alors : v(x,y) = si(x,y) ∈ Γ alors {[xy]} sinon ∅ Par ailleurs, d’apr`s la d´finition de ⊗, la valeur de tout circuit est ´gale ` α, donc v´rifie e e e a e α ∪ e = e. Il n’y a donc pas de circuit absorbant. Enfin, λ(x,y) = ensemble des chemins ´l´mentaires de x ` y ee a Le lecteur int´ress´ trouvera, dans ([GM79], chapitre 3) d’autres exemples et d’int´ressants e e e d´veloppements sur les alg`bres de chemin. e e c IFSIC 2004
  • 133.
    8.8. Alg`bres dechemins : transformations d’algorithmes e 133 Pour conclure, on peut se poser la question de savoir quels sont les algorithmes de chemine- ment optimal qui peuvent ˆtre transform´s, sur la base de la structure de dio¨ appropri´e, pour e e ıde e r´soudre les probl`mes correspondants. Sans entrer dans les d´tails, il s’av`re que les algorithmes e e e e n’utilisant pas une proc´dure de s´lection d’un ´l´ment r´alisant un “optimum” peuvent ˆtre e e ee e e directement adapt´s, en utilisant les op´rations ⊗ (` la place de +) et ⊕ (` la place de min), e e a a ainsi que α (` la place de +∞) et e (` la place de 0). Ainsi, on peut adapter directement Ford, a a Bellmann-Kalaba, Ford Ordinal, Puissances, Warshall. Mais ce n’est pas le cas de Dijkstra : en effet, cet algorithme n´cessite que la loi ⊕ v´rifie : ∀a, ∀b : a ⊕ b ∈ {a,b} (s´lection du “meilleur” e e e ´l´ment en attente). C’est bien le cas lorsque ⊕ ≡ ou, ou ⊕ ≡ min, ou ⊕ ≡ max (exemples 1 ` ee a 7) mais ce n’est plus le cas pour ⊕ ≡ + ou ⊕ ≡ ∪ (exemples 8 et 9). De plus, lorsque la loi ⊕ a cette propi´t´, la condition d’application de l’algorithme de ee dijkstra s’exprime par : ∀(x,y) ∈ Γ : v(x,y) ⊕ e = e Elle est donc toujours v´rifi´e pour les exemples 1,4,5 ; e e v´rifi´e si v(x,y) ≥ 0 pour l’exemple 2 e e v(x,y) ≤ 0 pour l’exemple 3 v(x,y) = 1 pour l’exemple 6 v(x,y) = +∞ pour l’exemple 7 (donc irr´alistes pour ces e deux exemples) Pour illustrer la puissance de ces transformations d’algorithme, nous donnons un exemple d’application de l’algorithme de Bellmann-Kalaba pour l’´num´ration des chemins ´l´mentaires e e ee issus du sommet 1 vers chacun des autres sommets (exemple 9). On doit donc calculer : ∀i, i = 1 : λi =ensemble des chemins ´l´mentaires de 1 ` i. La relation de r´currence est ici : ee a e λ1 = {[1]} n ∀k, ∀i : λk = i λk−1 ⊗ v(j,i) j j=1 2 4 1 5 3 La matrice du graphe est : 1 2 3 4 5 1 {[1]} {[1,2]} {[1,3]} α α 2 α α {[2,3]} {[2,4]} α 3 α α α {[3,4]} {[3,5]} 4 α α {[4,3]} α {[4,5]} 5 α α α α α c IFSIC 2004
  • 134.
    134 Chemins de valeur optimale L’ex´cution de l’algorithme donne alors : e 1 2 3 4 5 {[1]} {[1,2]} {[1,3]} α α {[1]} {[1,2]} {[1,3]} {[1,2,4] {[1,3,5]} [1,2,3]} [1,3,4]} {[1]} {[1,2]} {[1,3]} {[1,2,4] {[1,3,5] [1,2,3] [1,3,4] [1,2,3,5] [1,2,4,3]} [1,2,3,4]} [1,2,4,5] [1,3,4,5]} {[1]} {[1,2]} {[1,3]} {[1,2,4] {[1,3,5] [1,2,3] [1,3,4] [1,2,3,5] [1,2,4,3]} [1,2,3,4]} [1,2,4,5] [1,3,4,5] [1,2,4,3,5] [1,2,3,4,5]} {[1]} {[1,2]} {[1,3]} {[1,2,4] {[1,3,5] [1,2,3] [1,3,4] [1,2,3,5] [1,2,4,3]} [1,2,3,4]} [1,2,4,5] [1,3,4,5] [1,2,4,3,5] [1,2,3,4,5]} stabilit´ atteinte. e c IFSIC 2004
  • 135.
    Chapitre 9 Probl`mes d’ordonnancement e 9.1 Nature des probl`mes e Un projet peut ˆtre d´compos´ en n tˆches A1 ,A2 , . . . ,An telles que : e e e a – Chaque tˆche est indivisible a – Chaque tˆche est munie d’une dur´e connue : di = dur´e de Ai a e e – Chaque tˆche est soumise ` un ensemble de contraintes temporelles qui peuvent toujours a a s’exprimer en fonction de contraintes sur la date de d´but d’ex´cution de la tˆche e e a Ces contraintes sont de deux types : a) Contraintes ”d´terministes” (ou ”potentiel”) : e La date de d´but ti de la tˆche Ai intervient au plus tˆt (resp. au plus tard) ` une date e a o a donn´e a priori ou li´e ` la r´alisation d’autres tˆches du projet. e e a e a Exemples . la tˆche Ai ne peut pas commencer avant la date T : a ti ≥ T . la tˆche Aj ne peut pas commencer avant l’ach`vement de la tˆche Ai : a e a tj ≥ ti + di soit encore : tj − ti ≥ di L’ensemble des contraintes ”potentiel” d´finit un ensemble conjonctif de contraintes, qui s’ex- e prime sous la forme d’un syst`me simultan´ d’in´quations du premier degr´ de la forme e e e e tj − ti ≥ ai,j (i,j ∈ {0, . . . ,n + 1}) Par convention, t0 = 0 : date de d´but du projet e tn+1 : date de fin d’ex´cution du projet e (lorsque toutes les tˆches sont termin´es) a e = dur´e totale d’ex´cution du projet e e b) Contraintes ”non d´terministes” (ou ”disjonctives”) : e Elles expriment des incompatibilit´s entre sous-ensembles de l’ensemble des tˆches, mais e a laissent un degr´ de choix quant ` leur s´quencement : chaque contrainte est exprim´e par un e a e e syst`me d’in´quations, d’inconnues (ti )0≤i≤n+1 li´es par des ou (une des in´quations du syst`me e e e e e doit ˆtre v´rifi´e) e e e c IFSIC 2004
  • 136.
    136 Probl`mes d’ordonnancement e Exemples . la tˆche Ai et la tˆche Aj doivent ˆtre totalement disjointes : a a e ti ≥ tj + dj ou tj ≥ ti + di . une des 4 tˆches Ai ,Aj ,Ak ,A ne peut ˆtre effectu´e qu’apr`s la date T : a e e e ti ≥ T ou tj ≥ T ou tk ≥ T ou t ≥ T D´finition 9.1 On appelle ordonnancement compatible (sous-entendu e ”avec les contraintes”) un vecteur de Nn+2 : T = (t0 ,t1 , . . . ,tn ,tn+1 ), o` : u ti = date de d´but d’ex´cution de la tˆche Ai (i = 1, . . . ,n) e e a t0 et tn+1 respectivement dates de d´but et de fin d’ex´cution du projet, e e respectant les contraintes de chacune des tˆches. a Probl`me 9.1 Parmi tous les ordonnancements compatibles avec un e ensemble de tˆches et de contraintes donn´es, en trouver un de dur´e a e e minimale, c’est ` dire tel que tn+1 soit minimum. a Probl`me 9.2 Parmi tous les ordonnancements compatibles avec un e ensemble de tˆches et de contraintes donn´es, en trouver un de dur´e a e e donn´e, c’est ` dire tel que tn+1 = T donn´e. e a e Dans la suite de ce chapitre, on ne s’int´resse qu’aux contraintes ”d´terministes” ; les autres types e e de contraintes n´cessitent l’utilisation de techniques combinatoires, par exemple de recherche e e e ´ arborescente telles que les Proc´dures de S´paration et Evaluation Progressives (P.S.E.P.). 9.2 Mod´lisation ` l’aide de graphe e a 9.2.1 graphe potentiel-tˆche a On associe au probl`me un graphe valu´, d´fini de la mani`re suivante : e e e e – X = {x0 ,x1 , . . . ,xn ,xn+1 } o` xi u ≡ Ai (1 ≤ i ≤ n) x0 ≡ d´but e xn+1 ≡ fin – Γ = ensemble des contraintes, au sens suivant : si tj − ti ≥ ai,j est une contrainte, alors (xi ,xj ) ∈ Γ avec la valeur ai,j Exemples de contraintes et d’arc correspondant £ Contrainte ”au plus tˆt” sur Aj : o tj − ti ≥ ai,j (ai,j ≥ 0) ai,j xi −→ xj c IFSIC 2004
  • 137.
    9.2. Mod´lisation ` l’aide de graphe e a 137 £ Contrainte ”au plus tard” sur Ai : ti − tj ≤ ai,j (ai,j ≥ 0), c’est-`-dire : tj − ti ≥ −ai,j a −ai,j xi −→ xj £ Contraintes implicites relatives au d´but : e ∀i(1 ≤ i ≤ n + 1) : ti ≥ 0 ⇐⇒ (x0 ,xi ) ∈ Γ, de valeur 0 £ Contraintes implicites relatives ` la fin : a ∀i(1 ≤ i ≤ n) : tn+1 ≥ ti + di ⇐⇒ (xi ,xn+1 ) ∈ Γ, de valeur di Parmi toutes ces contraintes, certaines peuvent ˆtre redondantes, c’est-`-dire cons´quences e a e d’autres contraintes, de mani`re plus ou moins imm´diate; ceci sera plus particuli`rement vu au e e e §9.6 de ce chapitre 9.2.2 Exemple Soit un projet compos´ de 6 tˆches : e a tˆche A1 A2 A3 A4 A5 A6 a dur´e 10 12 e 6 20 12 7 avec les contraintes : A1 : peut commencer d`s le d´but des travaux. e e A2 : commence au plus tˆt 7 u.t. apr`s le d´but de A1 . o e e A3 : enchaˆ ınement sans d´lai avec A2 . e A4 : commence au plus tˆt 3 u.t. apr`s l’ach`vement de A5 ; la seconde o e e moiti´ de A4 commence au plus tˆt 13 u.t. apr`s l’ach`vement de e o e e A3 . A5 : commence au plus tˆt lorsque les 3/4 de A2 sont achev´s, au plus o e tard 6 u.t. apr`s l’ach`vement de A2 et au plus tˆt 3 u.t. apr`s e e o e l’ach`vement de A6 . e A6 : commence au plus tˆt 20 u.t. apr`s le d´but des travaux. o e e Liste des in´quations traduisant ces contraintes : e t1 ≥ 0; t2 − t1 ≥ 7; t3 ≥ t2 + 12 et t3 ≤ t2 + 12 ⇐⇒ t3 − t2 ≥ 12 et t2 − t3 ≥ −12; 1 t4 − t5 ≥ 15; t4 + × 20 ≥ t3 + 19 ⇐⇒ t4 − t3 ≥ 9; 2 3 t5 ≥ t2 + × 12 ⇐⇒ t5 − t2 ≥ 9; 4 t5 ≤ t2 + 18 ⇐⇒ t2 − t5 ≥ −18; t5 − t6 ≥ 10; c IFSIC 2004
  • 138.
    138 Probl`mes d’ordonnancement e t6 ≥ 20 et les contraintes ”implicites” : ti ≥ 0 (i = 2,3,4,5); t7 − ti ≥ di (i = 1, . . . ,6) Dans cet exemple, les contraintes (x0 ,xi ),i = 2,3,4,5 ainsi que les contraintes (xi ,x7 ),i = 2,3,5,6 sont ´videmment superflues (cf §9.6 ci-apr`s). e e 10 12 2 3 7 -12 0 0 1 9 -18 9 7 20 20 5 4 10 15 6 Fig. 9.1 – graphe potentiel-tˆche a 9.3 Ordonnancements particuliers; chemin critique; marges. Th´or`me 9.2 Soit Λ = (λ0 ,λ1 , . . . ,λn ,λn+1 ) l’ordonnancement d´fini e e e par : λ0 = 0 λi = valeur maximale des chemins de x0 ` xi a (i = 1, . . . ,n + 1). C’est un ordonnancement compatible, v´rifiant : e λi ≤ ti (i = 0, . . . ,n + 1) quelque soit l’ordonnancement compatible T = (t0 = 0,t1 , . . . ,tn ,tn+1 ). En particulier, il est de dur´e minimale. e D´monstration D’apr`s le th´or`me 8.7, appliqu´ au probl`me des valeurs additives maxi- e e e e e e males, les attributs λi (i = 0, . . . ,n + 1) constituent la solution minimale du syst`me d’´quations: e e 0 si i = 0 xi = maxxj ∈Γ−1 (xi ) (xj + v(j,i))si i = 2, . . . ,n c IFSIC 2004
  • 139.
    9.3. Ordonnancements particuliers; chemin critique; marges. 139 Il en r´sulte, d’une part : λj − λi ≥ ai,j sur tout arc (xi ,xj ), donc l’ordonnancement est e compatible. D’autre part, tout ordonnancement compatible T = (t0 , . . . , tn+1 ) est aussi solution de ce syst`me, et donc : e ∀i (1 ≤ i ≤ n), λi ≤ ti En particulier, λn+1 ≤ tn+1 . P L’ordonnancement Λ s’appelle ordonnancement ”au plus tˆt” car λi est la date de d´but o e au plus tˆt compatible avec les contraintes pour la tˆche Ai . o a D´finition 9.3 Un chemin de valeur maximale entre x0 (d´but) et xn+1 e e (fin) s’appelle chemin critique, et les sommets qui y appartiennent tˆches critiques. a En effet, si une tˆche situ´e sur ce chemin est retard´e alors la date finale du projet est retard´e. a e e e Soit maintenant une date finale F fix´e ` priori. On cherche les dates au plus tard, λi , d’un e a ordonnancement compatible permettant l’ach`vement des travaux ` la date fix´e. e a e Th´or`me 9.4 Si F < λn+1 , il n’existe pas d’ordonnancement compa- e e tible se terminant ` la date F . a Si F ≥ λn+1 , alors l’ordonnancement Λ = (λ0 , . . . ,λn+1 ) d´fini par e λ0 = 0 λi = F − αi (i = 1, . . . ,n + 1). o` αi = valeur maximale des chemins de xi ` xn+1 , u a r´pond ` la question. e a D´monstration Si F < λn+1 , le r´sultat est ´vident puisque λn+1 est la date au plus tˆt e e e o d’ach`vement des travaux. e Supposons donc F ≥ λn+1 . Les probl`mes de cheminement dans G aboutissant au sommet e xn+1 se ram`nent aux probl`mes de cheminement issus du sommet xn+1 dans le graphe transpos´ e e e G t . Par cons´quent, d’apr`s le th´or`me 8.7, les attributs α (i = 0, . . . ,n + 1) constituent la e e e e i solution minimale du syst`me d’´quations: e e 0 si i = n + 1 xi = maxxj ∈Γ(xi ) (xj + v(i,j))si i = 2, . . . ,n Il en r´sulte, d’une part : αi − αj ≥ ai,j sur tout arc (xi ,xj ), c’est-`-dire, d’apr`s la d´finition e a e e des λi : λj − λi ≥ ai,j sur tout arc (xi ,xj ), donc l’ordonnancement est compatible. D’autre part, pour tout ordonnancement compatible T = (t0 . . . tn+1 ), avec tn+1 = F , les valeurs βi = F − ti sont aussi solution de ce syst`me, et donc : ∀i (1 ≤ i ≤ n), αi ≤ βi d’o` : e u ∀i (1 ≤ i ≤ n), λi ≥ ti P c IFSIC 2004
  • 140.
    140 Probl`mes d’ordonnancement e D´finition 9.5 Soit Λ l’ordonnancement au plus tˆt et Λ l’ordonnance- e o ment au plus tard relatif ` une date finale F ≥ λn+1 . On appelle marge a totale de la tˆche Ai (relativement ` F ) la diff´rence mi = λi −λi . C’est a a e le retard maximum que peut prendre l’ach`vement de Ai sans compro- e mettre la date de r´alisation du projet pr´vue λn+1 = F . e e Remarque. Si la date d’ach`vement de Ai est retard´e d’une dur´e ≤ mi , ce retard peut e e e modifier l’ordonnancement des tˆches ult´rieures sur tout chemin de xi ` xn+1 . Les marges a e a totales des tˆches ne sont donc pas ind´pendantes. Il vaut donc mieux parler de marge par a e chemin traduisant le retard global tel que la somme des retards des tˆches situ´es sur ce a e chemin reste inf´rieure ` ce retard global sous peine de retarder la date λn+1 . Pour un chemin e a u, m(u) = maxxi ∈u (mi ) D´finition 9.6 Soit T = (t0 , . . . ,tn+1 ) un ordonnancement compatible e donn´. La marge libre de Ai , relativement ` T , est d´finie par : e a e µi = min (tj − ti − ai,j ) xj ∈Γ(xi ) C’est le retard maximum que peut prendre l’ach`vement de Ai sans compromettre la date de e d´but pr´vue pour les autres tˆches. e e a 9.4 Exemple Nous traitons compl`tement l’exemple donn´ au §9.2 (figure 9.1) e e tˆche a A1 A2 A3 A4 A5 A6 A7 Λ 0 12 24 45 30 20 65 αi 51 44 32 20 35 45 0 Λ | F = 65 14 21 33 45 30 20 65 mi | F = 65 14 9 9 0 0 0 / µi (Λ) 5 0 0 0 0 0 / x0 x1 x2 x3 x4 x7 = 14 Marges totales par che- x0 x1 x2 x5 x4 x7 = 14 min : x0 x6 x5 x2 x3 x4 x7 = 9 x0 x6 x5 x4 x7 = 0 (chemin critique) 9.5 Choix des algorithmes de r´solution e La recherche des ordonnancements ”au plus tˆt” ou ”au plus tard” relatif ` une date F o a n´cessite le calcul des valeurs maximales des chemins issus du sommet x0 ou aboutissant au e sommet xn+1 . Au chapitre pr´c´dent, nous avons d´crit quelques algorithmes r´solvant ces e e e e c IFSIC 2004
  • 141.
    9.5. Choix des algorithmes de r´solution e 141 probl`mes. Nous allons donner quelques indications sur le choix ` effectuer, compte-tenu de e a la nature des contraintes. 1er cas. Il n’y a que des contraintes ”au plus tˆt”. Dans ce cas, le graphe obtenu ne doit pas o comporter de circuit, sans quoi il y aurait des contraintes incompatibles : il n’y aurait alors pas d’ordonnancement compatible, puisque tout circuit est un circuit absorbant (les arcs ´tant tous e de valeur positive ou nulle). Comme par ailleurs le sommet x0 est racine, et le sommet xn+1 anti-racine (racine du graphe transpos´), l’algorithme Ordinal-racine est le mieux adapt´ : e e – pour l’ordonnancement au plus tˆt : avec x0 comme sommet de d´part, il suffit de remplacer o e min par max dans le calcul d’une marque. – pour l’ordonnancement au plus tard : avec xn+1 comme sommet de d´part, il suffit de e remplacer min par max dans le calcul d’une marque et de permuter les op´rations lst pred e et lst succ (puisque l’on cherche les chemins de valeur maximale issus de xn+1 dans le graphe transpos´).e Remarque : Si x.α est la valeur maximale des chemins de x ` xn+1 , ces valeurs sont ca- a ract´ris´es, d’apr`s le th´or`me 9.4, par : e e e e e ∀x ∈ X : x.α = max (y.α + v(x,y)) y∈Γ(x) La date au plus tard de x, relative ` la date finale T , est donn´e par x.λ = T −x.α (th´or`me a e e e 9.4). Par cons´quent, ces dates sont caract´ris´es par les relations : e e e ∀x ∈ X {xn+1 } : x.λ = min y.λ − v(x,y) , xn+1 .λ = T y∈Γ[x] On peut donc obtenir directement ces dates en adaptant l’algorithme Ordinal-racine comme suit : sommet de d´part : xn+1 ; initialiser xn+1 .λ ` T ; e a permuter les op´rations lst pred et lst succ ; e marquer un nouveau sommet x par : x.λ ←− min(y.λ − v(x,y),G.lst succ(x)) 2`me cas. Les contraintes sont quelconques. Le graphe poss`de alors des circuits, et les arcs ont e e des valeurs de signe quelconque. S’il n’y a pas d’incompatibilit´ dans les contraintes, il ne doit e pas y avoir de circuit absorbant (valeur > 0). On peut donc envisager l’algorithme d’exploration en profondeur de Ford (algorithme 8.3.2) ou bien celui de Bellmann-Kalaba (8.4.3). Les adaptations ` apporter sont les mˆmes que dans le cas pr´c´dent : remplacer min par max. a e e e Il existe cependant une technique sp´cifique, qui en g´n´ral s’av`re plus efficace (heuristique). e e e e Ceci est bas´ sur la remarque suivante: si on enl`ve du graphe tous les arcs de valeur ≤ 0, le e e graphe partiel obtenu doit ˆtre sans circuit (autrement, il y aurait des contraintes incompatibles: e voir cas pr´c´dent). On peut toutefois conserver les arcs issus du sommet x0 ainsi que ceux e e aboutissant au sommet xn+1 , car ces arcs ne peuvent pas appartenir ` des circuits (x0 est point a d’entr´e, et xn+1 est point de sortie). Cette remarque incite ` proc´der en deux phases. e a e Premi`re phase e – Ignorer tous les arcs non issus de x0 ou aboutissant ` xn+1 , qui sont de a valeur ≤ 0. c IFSIC 2004
  • 142.
    142 Probl`mes d’ordonnancement e – Calculer les valeurs λi provisoires, en utilisant l’algorithme Ordinal-racine (si cet algorithme met en ´vidence des circuits, alors il y a des contraintes incompatibles). e Deuxi`me phase : ajustements R´introduire un par un chacun des arcs que l’on a ignor´s e e e lors de la premi`re phase. Soit (xi ,xj ,aij ) un tel arc. On teste alors la validit´ de la e e contrainte correspondant ` cet arc: a – si λj < λi + aij alors λj ←λi + aij . – Pour tout sommet xj dont l’attribut a ainsi ´t´ augment´, il faut recommencer le ee e test sur tous les arcs issus de xj . Ce proc´d´ correspond en fait ` une exploration e e a en profondeur de la descendance de xj , mais avec arrˆt de la “descente” ` partir de e a sommets non modifi´s. e L’int´rˆt de cette technique vient de ce que, en g´n´ral, la seconde phase ne provoque que peu ee e e de modifications, car les mises ` jour de la descendance des sommets modifi´s s’´teignent assez a e e vite. Des illustrations de cette m´thode seront vues en TD. e Pour le calcul d’un ordonnancement au plus tard, tout ce qui pr´c`de reste valable, en e e travaillant dans le graphe transpos´ (c’est-`-dire en consid´rant xn+1 comme sommet de d´part, e a e e et en permutant les acc`s “successeurs” et pr´d´cesseurs”). e e e 9.6 ´ Elimination de contraintes redondantes D´finition 9.7 Une contrainte est dite ”redondante” si elle est im- e pliqu´e par un ensemble de contraintes dont elle ne fait pas partie. e Cette situation se produit dans le cas suivant : la contrainte tj − ti ≥ ai,j est redondante si et seulement si il existe, dans G, un chemin (diff´rent de l’arc (i,j)) de xi ` xj , et de valeur v ≥ ai,j . e a i ... i 1 k i j a i,j En effet, le long d’un tel chemin [i,i1 , . . . ,ik ,j] on aura :   ti1 − ti ≥ ai,i1  . . =⇒ tj − ti ≥ ai,i1 + . . . + aik ,i ≥ ai,j  .  tj − tik ≥ aik ,i Nous allons ci-dessous examiner dans quels cas certaines contraintes peuvent ˆtre per¸ues e c comme redondantes au seul vu des donn´es du probl`me, c’est-`-dire sans le secours d’un algo- e e a rithme de cheminement (qui pourrait s’av´rer plus coˆteux que le gain obtenu par la suppression e u ´ventuelle de contraintes). Il s’agit essentiellement des contraintes implicites, c’est ` dire : e a c IFSIC 2004
  • 143.
    9.6. ´ Elimination de contraintes redondantes 143 ∀i ti ≥ 0 (li´es au d´but du projet) e e ∀i tn+1 − ti ≥ di (li´es ` la fin du projet) e a – contraintes de d´but : e S’il existe un arc (xj ,xi ) de valeur aj,i ≥ 0 et j = 0, alors ti ≥ 0 est redondante. En effet, on a : ti ≥ tj + aj,i . – contraintes de fin : S’il existe un arc (xi ,xj ) de valeur ai,j ≥ di −dj et j = n+1 alors tn+1 −ti ≥ di est redondante. En effet, on a : tj ≥ ti + ai,j et tn+1 ≥ tj + dj ce qui implique : tn+1 ≥ ti + ai,j + dj ≥ ti + di c IFSIC 2004
  • 144.
    144 Probl`mes d’ordonnancement e c IFSIC 2004
  • 145.
    Chapitre 10 Arbres ;arbre partiel de poids optimum 10.1 D´finition et propri´t´s caract´ristiques e e e e Soit G = (X,U ) un graphe non orient´, c’est ` dire pour lequel U est un ensemble de couples e a non ordonn´s, appel´s arˆtes. Dans un graphe non orient´, la terminologie suivante est utilis´e : e e e e e un chemin devient une chaˆ un circuit devient un cycle. ıne Les successeurs et pr´d´cesseurs d’un sommet deviennent les voisins, et le nombre d’arˆtes e e e adjacentes ` un sommet s’appelle le degr´ du sommet. a e Enfin, la relation binaire sur X : xRy ⇐⇒ il existe une chaˆ de x ` y ou x = y ıne a est une relation d’´quivalence, dont les classes s’appellent composantes connexes de G. Un e graphe connexe est un graphe ne poss´dant qu’une seule composante connexe. e Cette terminologie ´tablie, nous posons les d´finitions suivantes : e e D´finition 10.1 Un arbre est un graphe non orient´, connexe et sans e e cycle. Nous allons ´tablir un certain nombre de d´finitions ´quivalentes, grˆce aux deux lemmes sui- e e e a vants : Lemme 10.2 Un graphe connexe de n sommets poss`de au moins n − 1 e arˆtes. e D´monstration. Soit G = (X,U ), ayant n sommets, m arˆtes et p composantes connexes, et e e posons ν(G) = m − n + p (nombre cyclomatique de G). D´finissons G en enrichissant G e par une nouvelle arˆte w = (x,y). Si x et y appartiennent ` la mˆme composante connexe, on a e a e c IFSIC 2004
  • 146.
    146 Arbres ; arbre partiel de poids optimum alors : n = n, m = m + 1, p = p d’o` ν(G ) = ν(G) + 1 u Dans le cas contraire, les composantes connexes (distinctes) de x et y fusionnent en une seule, d’o` u n = n, m = m + 1, p = p − 1 et ν(G ) = ν(G) L’adjonction de toute nouvelle arˆte ` un graphe ne peut donc pas diminuer la valeur de e a ν(G). Or, pour un graphe ` n sommets et 0 arˆte, on a p = n d’o` ν(G) = 0. On en d´duit que a e u e pour tout graphe, ν(G) ≥ 0. Si G est connexe, on a p = 1 d’o` m ≥ n − 1. P u Lemme 10.3 Un graphe sans cycle de n sommets poss`de au plus n − 1 e arˆtes. e D´monstration. Soient u1 ,u2 , . . . ,um les arˆtes de G, num´rot´es de mani`re quelconque. e e e e e Consid´rons la suite de graphes e G0 < G1 < . . . < Gm−1 < Gm avec G0 = (X,∅); Gj = (X,Uj ) et Uj = Uj−1 ∪ {uj } et donc Gm = G Ces graphes sont sans cycle, donc on passe de Gj ` Gj+1 en ajoutant ` Gj l’arˆte uj+1 entre a a e deux sommets non reli´s par une chaˆ dans Gj . Comme dans la d´monstration du lemme e ıne e pr´c´dent, on en d´duit : e e e ν(Gj ) = ν(Gj+1 ), d’o` 0 = ν(G0 ) = ν(Gm ). u Par cons´quent, m = n − p et comme p ≥ 1, on a m ≤ n − 1. P e Th´or`me 10.4 Les propri´t´s suivantes, caract´risant un arbre, sont e e ee e ´quivalentes : e i) G = (X,U ) est connexe et sans cycle. ii) Tout couple de sommets est reli´ par une chaˆ unique de G. e ıne iii) G est sans cycle et l’adjonction de toute nouvelle arˆte cr´e un cycle e e unique. iv) G est sans cycle et poss`de n − 1 arˆtes. e e v) G est connexe et la suppression de toute arˆte de G cr´e deux compo- e e santes connexes, telles que toute autre arˆte de G est incluse dans e l’une ou l’autre de ces composantes. vi) G est connexe et poss`de n − 1 arˆtes. e e D´monstration e i) =⇒ ii) Tout couple de sommets est reli´ par une chaˆ (connexit´), et si deux chaˆ e ıne e ınes distinctes les reliaient, leur r´union cr´erait un cycle. e e c IFSIC 2004
  • 147.
    10.2. Arbres partielsdans un graphe non orient´ valu´ e e 147 ii) =⇒ iii) Si G avait un cycle, deux sommets de ce cycle seraient reli´s par deux chaˆ e ınes distinctes ; l’adjonction d’une nouvelle arˆte entre deux sommets x et y cr´e un cycle avec e e l’unique chaˆ les reliant. ıne iii) =⇒ iv) Puisque l’adjonction de toute nouvelle arˆte cr´e un cycle, G est connexe donc e e poss`de au moins n − 1 arˆtes (lemme 10.2). Comme il est sans cycle, il a au plus n-1 e e arˆtes (lemme 10.3). e iv) =⇒ v) Si G n’´tait pas connexe, on pourrait lui ajouter une nouvelle arˆte sans cr´er de e e e cycle, ce qui donnerait un graphe sans cycle ` n arˆtes, d’o` une contradiction (lemme a e u 10.3). La suppression d’une arˆte u laisse un graphe partiel ` n − 2 arˆtes, donc non e a e connexe ; de plus, ce graphe partiel poss`de deux composantes connexes C et X C sans e quoi G ne serait pas connexe. Enfin, si ∃v ∈ U reliant C et X C, G poss`de un cycle e passant par les extr´mit´s de u et celles de v. e e v) =⇒ vi) G poss`de au moins n − 1 arˆtes (lemme 10.2) ; G poss`de au plus n − 1 arˆtes sinon e e e e il aurait un cycle (lemme 10.3) et la suppression d’une arˆte de ce cycle ne romprait pas e la connexit´.e vi) =⇒ i) Si G avait un cycle, la suppression d’une arˆte de ce cycle laisserait un graphe connexe, e donc ayant au moins n − 1 arˆtes, ce qui contredit l’hypoth`se sur le nombre d’arˆtes de e e e G. P Proposition 10.5 Tout arbre poss`de au moins deux sommets de degr´ e e 1 (appel´s sommets pendants). e D´monstration Un arbre poss`de au moins 1 sommet pendant, sans quoi il aurait un cycle. e e D’autre part, si un arbre ayant n sommets et n − 1 arˆtes ( n ≥ 4) poss´dait un seul sommet e e pendant, le sous-graphe engendr´ par la suppression de ce sommet poss`derait au plus 1 sommet e e pendant, n−1 sommets et n−2 arˆtes. En r´p´tant le proc´d´, on aboutirait n´cessairement ` un e e e e e e a sous-graphe ayant 3 sommets, 2 arˆtes donc 2 sommets pendants, ce qui est une contradiction. e P 10.2 Arbres partiels dans un graphe non orient´ valu´ e e Consid´rons le probl`me pratique suivant, qui se rencontre dans de nombreux domaines : e e soit un ensemble de sites {X1 ,X2 , . . . ,Xn }. On souhaite les relier entre eux, de telle sorte que le r´seau ainsi constitu´ soit : e e 1. connexe (tout site est reli´, ´ventuellement via d’autres sites, ` tout autre site) e e a 2. sans liaison redondante : une seule chaˆ suffit, de tout site ` tout site ; ceci conduit ` ıne a a chercher un r´seau sans cycle e 3. de coˆt minimum, sachant qu’` chaque liaison directe bilat´rale (Xi ,Xj ) est associ´e un u a e e coˆt wi,j . u D’apr`s les r´sultats du th´or`me 10.4, il s’agit donc de construire un arbre sur les n som- e e e e mets donn´s, celui-ci ´tant de poids minimum parmi tous les arbres possibles (il y en a a e e n−1 n(n−1) priori 2 . Le poids d’un arbre est alors ´gal, par d´finition, ` la somme des valeurs des e e a c IFSIC 2004
  • 148.
    148 Arbres ; arbre partiel de poids optimum n − 1 arˆtes qui en font partie. D’autre part, on peut toujours introduire comme contrainte e suppl´mentaire l’interdiction a priori de certaines arˆtes : il suffit de les affecter d’une valeur e e +∞. On obtient finalement le probl`me de d´termination d’un arbre partiel de poids optimum : e e ´ Probl`me 10.1 Etant donn´ un graphe G = (X,U,w) valu´ non orient´ e e e e et connexe, d´terminer un arbre partiel de G, de poids optimum. e Remarque. Si G n’est pas connexe, il suffit de r´soudre le probl`me s´par´ment dans chaque e e e e composante connexe. Dans ce qui suit, nous supposerons – pour fixer les id´es – que optimum signifie minimum. e Nous ´tablissons maintenant un th´or`me caract´ristique – et sa version ”duale” – d’un arbre e e e e partiel de poids minimum. Th´or`me 10.6 Une condition n´cessaire et suffisante pour que A = e e e (X,H) soit un arbre de poids minimum de G = (X,U,w) est la suivante : ∀u ∈ U H : le long du cycle (unique) µ form´ par u avec des arˆtes de e e H, on a ∀v ∈ µ : w(v) ≤ w(u). D´monstration. e £ La condition est n´cessaire : sinon, en substituant u ` v dans H, o` w(v) > w(u), on e a u obtiendrait un nouvel arbre de poids strictement inf´rieur. e £ R´ciproquement, consid´rons un arbre A∗ = (X,H ∗ ), de poids minimal. e e Si A∗ = A, consid´rons une arˆte u∗ = (x,y) telle que u∗ ∈ H ∗ et u∗ ∈ H (figure 10.1). e e X/C * C* x u* y ¢ £ ¥ ¤ ¦ § © ¨ x’ y’ H:   ¡   ¡   ¡ H *: Fig. 10.1 – arbres H et H∗ D’une part, x et y sont reli´s dans H par une chaˆ γ, ne contenant pas u∗ . e ıne c IFSIC 2004
  • 149.
    10.3. Algorithme deKRUSKAL 149 D’autre part, la suppression de u∗ dans H ∗ d´finit un graphe partiel ayant deux composantes e connexes C ∗ et X C ∗ , et u∗ est la seule arˆte de H ∗ reliant C ∗ ` X C ∗ . e a Il en r´sulte que γ relie x ∈ C ∗ ` y ∈ X C ∗ sans passer par u∗ , donc contient au moins une e a arˆte u = (x ,y ), avec x ∈ C ∗ ,y ∈ X C ∗ ,u ∈ H,u ∈ H ∗ . e On en d´duit que : e (1) w(u) ≤ w(u∗ ) d’apr`s l’hypoth`se sur A e e (2) la chaˆ γ ıne ∗ qui relie x et y dans H ∗ passe n´cessairement par u∗ (puisque u∗ est la seule e arˆte de H ∗ reliant C ∗ ` X C ∗ ) et donc, A∗ ´tant minimal : w(u∗ ) ≤ w(u) (condition n´cessaire). e a e e (1) et (2) montrent que : ` chaque arˆte u a e ∗ ∈ H ∗ ,u∗ ∈ H on peut faire correspondre une arˆte u ∈ H,u ∈ H ∗ , telle que w(u∗ ) = w(u); par cons´quent, H et H ∗ sont de mˆme poids. P e e e Nous ´tablissons maintenant une version ”duale” du th´or`me de caract´risation 10.6 : e e e e Th´or`me 10.7 Une condition n´cessaire et suffisante pour que A = e e e (X,H) soit un arbre de poids minimum de G = (X,U,w) est la suivante : ∀u ∈ H : pour toute arˆte v = u reliant Cu et X Cu (les deux e composantes connexes cr´´es dans A par la suppression de u), on a : ee w(u) w(v). D´monstration. e £ La condition est n´cessaire : en substituant v(∈ H) ` u dans H, o` w(u) w(v), on e a u obtiendrait un nouvel arbre, de poids strictement inf´rieur. e £ R´ciproquement, soit A = (X,H) un arbre satisfaisant les conditions du th´or`me. Pour e e e tout u ∈ H, consid´rons le cycle γu que u forme avec H. On a alors : e ∀v ∈ γu , u relie Cu et X Cu et donc : w(v) w(u); par suite A satisfait les conditions du th´or`me 10.6. P e e 10.3 Algorithme de KRUSKAL 10.3.1 Principe Du th´or`me pr´c´dent 10.6 d´coule imm´diatement l’algorithme de Kruskal. Le principe e e e e e e est le suivant : on organise un parcours des arˆtes dans l’ordre des valeurs croissantes. Initiale- e ment, le graphe partiel A est vide. On ajoute l’arˆte courante ` A si et seulement si elle ne cr´e e a e pas de cycle dans A, et on s’arrˆte en fin de parcours, ou d`s qu’on a obtenu n − 1 arˆtes dans e e e A. A l’issue de l’algorithme, on a bien un arbre partiel de poids minimum : en effet, on a construit un graphe partiel sans cycle, ayant au moins n − 1 arˆtes (par hypoth`se, le graphe G e e est connexe), et d’autre part, toute arˆte u non retenue forme un cycle avec des arˆtes situ´es e e e avant elle dans la liste ordonn´e des arˆtes, donc v´rifie la condition suffisante du th´or`me 10.6. e e e e e Pour faciliter le test : u ne cr´e pas de cycle, il suffit de g´rer les composantes connexes de A e e au fur et ` mesure de sa construction. Une arˆte pourra ˆtre ajout´e si et seulement si ses deux a e e e extr´mit´s n’appartiennent pas ` la mˆme composante. Les composantes des deux extr´mit´s e e a e e e c IFSIC 2004
  • 150.
    150 Arbres ; arbre partiel de poids optimum sont alors fusionn´es en une seule. Enfin, le parcours des arˆtes ordonn´es par valeurs croissantes e e e sera g´r´ par les acc`s : ee e pp arete : -- pr´ : non hors arete e d´livre la premi`re arˆte du parcours ordonn´ e e e e (arˆte de valeur minimum) e pp arete suiv : -- pr´ : non hors arete e d´livre la prochaine arˆte du parcours ordonn´ e e e hors arete : vrai si toutes les arˆtes ont ´t´ visit´es e ee e A noter que G.vide ⇒ G.hors arete. 10.3.2 Texte de l’algorithme Il est donn´ page 150 e ALGORITHME DE KRUSKAL ENS[SOMMET] SOMMET::C ; -- x.C = composante connexe de x ARBRE kruskal(GRAPHESYM G): c’est local AR^TE arcour; e ENT k; -- compteur du nombre d’arˆtes e SOMMET x, y; d´but e depuis pourtout x de G.lst som faire x.C ← {x} fpourtout ; Result ← creer ; k ← 0 ; arcour ← G.pp arete ; x ← arcour.ori ; y ← arcour.ext ; jusqua k ≥ n-1 ou x = nil faire si y ∈ x.C alors Result.ajoutarete(x,y) ; x.C ← x.C ∪ y.C ; y.C ← x.C ; k ← k + 1 fsi ; arcour ← G.pp arete suiv ; x ← arcour.ori ; y ← arcour.ext fait ; si k n-1 alors -- erreur : le graphe donne G n’est pas connexe fin c IFSIC 2004
  • 151.
    10.3. Algorithme deKRUSKAL 151 10.3.3 Exemple Consid´rons le graphe non orient´, valu´, de la figure 10.2 e e e 2 8 8 4 16 5 1 3 7 12 14 9 5 4 11 Fig. 10.2 – Exemple La liste ordonn´e des arˆtes est donn´e dans le tableau de gauche : e e e comp. connexes : {1} {2} {3} {4} {5} 2,5 4 * arˆte (2,5) −→ c.c. {1} {2,5} {3} {4} e 1,3 5 * arˆte (1,3) −→ c.c. {1,3} {2,5} {4} e 3,5 7 * arˆte (3,5) −→ c.c. {1,2,3,5} {4} e 2,3 8 1,2 8 1,5 9 4,5 11 * arˆte (4,5) −→ c.c. {1,2,3,4,5} e 1,4 12 3,4 14 2,4 16 poids : 4 + 5 + 7 + 11 = 27 10.3.4 Complexit´ e Lorsque le parcours est organis´, on effectue au plus n − 1 pas d’it´rations. L’algorithme est e e donc en O(n) + complexit´ maximale du tri des arˆtes. Ce dernier terme d´pend de la technique e e e utilis´e : e – tri pr´alable (les meilleurs algorithmes connus sont en O(m log m)) e – recherche s´quentielle dans la liste des arˆtes, ` chaque pas d’it´ration (complexit´ totale e e a e e n−1 de k=1 O(m − k) – puisqu’` l’´tape k il reste m − k arˆtes) a e e – organisation ”en tas” de la liste des arˆtes et r´organisation ` chaque ´tape : e e a e – O(m log m) pour l’organisation initiale c IFSIC 2004
  • 152.
    152 Arbres ; arbre partiel de poids optimum – O(log(m − k)) pour la r´organisation ` l’´tape k (nombre d’arˆtes restant = m − k) e a e e d’o`, globalement : 0(m log m) + n−1 0(log m), le terme 0(m log m) ´tant pr´pond´rant u k=1 e e e puisque m ≥ n − 1 (graphe connexe). 10.4 Algorithme de PRIM 10.4.1 Principe de l’algorithme C’est aussi un algorithme d’extension, mais au lieu d’engendrer des graphes partiels succes- sifs, sans cycle, croissant jusqu’` la connexit´, on engendre des sous-arbres partiels croissants a e jusqu’` ce qu’on obtienne un arbre partiel. La propri´t´ maintenue invariante tout au long de a ee l’algorithme est la suivante : – 1 ≤ k ≤ n; – Xk = {x1 , . . . ,xk }; – Hk = {u1 , . . . ,uk−1 }; – Ak = (Xk ,Hk ) est un arbre couvrant Xk ; – Il existe un arbre A = (X,H), couvrant X, de poids minimum, dont la restriction ` Xk est a Ak (la restriction de A ` Xk est le sous-graphe de A engendr´ par les sommets de Xk ). a e La condition d’arrˆt est donc k = n. Si l’invariant est v´rifi´ ` l’arrˆt, An est bien un arbre e e ea e couvrant de poids minimum (´vident). e Initialement k = 1,X1 = {x1 } (sommet quelconque), H1 = ∅. Les valeurs initiales satisfont l’invariant (´vident). e Il reste ` ´tablir la progression, de mani`re ` maintenir l’invariant. Le principe est tr`s simple : ae e a e soit uk = (xi ,xk+1 ) (avec xi ∈ Xk et xk+1 ∈ Xk ) une arˆte sortante de Xk , de poids minimum e parmi les arˆtes sortantes. On pose: e Hk+1 ←Hk {uk } Xk+1 ←Xk {xk+1 } Proposition 10.8 La progression maintient l’invariant D´monstration Soit A = (X,H) un arbre couvrant X, de poids minimal, dont la restriction ` e a Xk est Ak (un tel arbre existe par hypoth`se). e premier cas : uk ∈ H. Dans ce cas, la restriction de A ` Xk+1 est Ak+1 , et la propri´t´ est a ee d´montr´e. e e deuxi`me cas (voir figure 10.3) : uk ∈ H. Dans ce cas, il existe une chaˆ γ de H, reliant e ıne xi ` xk+1 et, puisque A est de poids minimum, on a : a ∀v ∈ γ : c(v) ≤ c(uk ) . La chaˆ γ contient une arˆte vk = (xa ,xb ) telle que xa ∈ Xk ,xb ∈ Xk ; puisque vk ∈ γ, on a ıne e c(vk ) ≤ c(uk ); et, d’apr`s le crit`re de s´lection de uk (arˆte sortante de Xk de poids minimum), e e e e on a aussi c(uk ) ≤ c(vk ); d’o` c(vk ) = c(uk ). u Examinons le graphe A = (X,H {vk } {uk }): – il a n sommets et n − 1 arˆtes,e c IFSIC 2004
  • 153.
    10.4. Algorithme dePRIM 153 Xk xi uk xk+1 chaîne γ xa vk chaîne γ xb Fig. 10.3 – passage de Ak ` Ak+1 a – il est connexe; en effet, soit s et t deux sommets de X; ils sont reli´s dans A par une chaˆ e ıne κ. Si cette chaˆ ne contient pas vk , alors c’est une chaˆ de A , par construction; si ıne ıne au contraire κ contient vk , on remplace cette derni`re arˆte par la chaˆ [xa , . . . ,xi ] · uk · e e ıne [xk+1 , . . . ,xb ] qui est une chaˆ de A par construction (figure 10.3). ıne A est donc un arbre couvrant X, de poids c(A ) = c(A) − c(vk ) + c(uk ) = c(A), et donc de poids minimal; il contient uk et donc, sa restriction ` Xk+1 est bien Ak+1 . P a Corollaire 10.9 A chaque ´tape, l’arbre partiel Ak = (Xk ,Hk ) est un e arbre couvrant Xk , de poids minimum. ´ Evident puisque c’est un arbre couvrant Xk , par construction, et c’est la restriction d’un arbre de poids minimum d’apr`s la proposition pr´c´dente. P e e e 10.4.2 Mise en œuvre de l’algorithme La s´lection d’une nouvelle arˆte peut ˆtre effectu´e selon une m´thode tout ` fait analogue e e e e e a a ` celle de l’algorithme de Dijkstra (chapitre 8.5). En effet, soit M l’ensemble des sommets d´j` ea ”couverts” par le sous-arbre partiel. On d´signe par A l’ensemble des sommets ”limitrophes” de e M , c’est ` dire : a z ∈ A ⇔ z ∈ M et ∃x ∈ M : (x,z) ∈ U Pour tout z ∈ A, on pose : δz = min w(x,z) x∈M (x,z)∈U atteint pour un sommet d´not´ pz , puis on s´lectionne y ∈ A tel que e e e δy = min δz z∈A L’arˆte (py ,y) est alors ajout´e au sous-arbre partiel. A chaque pas d’it´ration, l’ensemble A e e e est donc modifi´ de la mani`re suivante : y est ˆt´ de A, et les voisins de y, n’appartenant pas e e oe c IFSIC 2004
  • 154.
    154 Arbres ; arbre partiel de poids optimum ` M , sont soit introduits dans A – pour de tels sommets z, on a alors δz = w(y,z) – soit, s’ils a appartenaient d´j` ` A, leur marque est r´´valu´e par : δz = min(δz ,w(y,z)). eaa ee e De plus, comme pour l’algorithme de Dijkstra, l’ensemble des valeurs (δz )z∈A peut ˆtre e g´r´ en ”tas”. ee 10.4.3 Texte de l’algorithme Le texte de l’algorithme, donn´ ci-apr`s page 155, montre qu’en fait on retrouve l’algorithme e e de Dijkstra avec les diff´rences suivantes : e – les marques des sommets passent ` 0 lorsque ceux-ci rentrent dans M ; a – les acc`s lst succ et valarc sont remplac´s respectivement par lst voisins et valarˆte, adapt´s e e e e aux graphes non orient´s; e – on m´morise, en plus, le sous-arbre partiel de poids minimum, A. e 10.4.4 Exemple on reprend le graphe de la figure 10.2 M {(x.p,x,x.δ) | x ∈ A} arˆte s´lectionn´e e e e nbar 1 (1,3,5) (1,2,8) (1,5,9) (1,4,12) (1,3) poids 5 1 1,3 (3,5,7) (1,2,8) (1,4,12) (3,5) poids 7 2 1,3,5 (5,2,4) (5,4,11) (5,2) poids 4 3 1,3,5,2 (5,4,11) (5,4) poids 11 4 c IFSIC 2004
  • 155.
    10.4. Algorithme dePRIM 155 ALGORITHME DE PRIM REEL SOMMET::δ : ; SOMMET SOMMET::p ; ENUM[dehors,atteint,recouvert] SOMMET::´tat ; e ARBRE prim(GRAPHESYM G) c’est local ENT nbar ; -- nombre d’arˆtes e TAS[(SOMMET,REEL)] A; ENS[SOMMET] X, MOD; SOMMET nouv ; REEL w; d´but e depuis nbar ← O ; Result ← creer ; X ← G.lst som ; pourtout x de X faire x.´tat ← dehors fpourtout ; e A ← creer ; x0 ← X.element ; -- sommet initial quelconque x0 .´tat ← recouvert ; MOD ← G.lst voisins(x0 ) ; e pourtout z de MOD z.´tat ← atteint ; z.δ ← G.valar^te(x0 ,z) ; z.p ← x0 ; e e A.mettre en tas((z,z.δ )) ; fpourtout jusqua nbar ≥ n-1 faire (nouv,w) ← A.mintas ; A.^ter de tas ; o nouv.´tat ← recouvert ; MOD ← G.lst voisins(nouv) ; e -- mise ` jour des marques des sommets modifiables a pourtout z de MOD faire cas z.´tat = dehors −→ z.´tat ← atteint ; e e z.δ ← G.valar^te(nouv, z) ; z.p ← nouv ; e A.mettre en tas((z,z.δ )) z.´tat = atteint −→ si G.valar^te(nouv, z) z.δ alors e e A.reorg((z,z.δ ),(z, G.valar^te(nouv, z))); e z.δ ← G.valar^te(nouv, z) ; z.p ← nouv e z.´tat = recouvert −→ rien e fcas fpourtout ; Result.ajoutar^te(nouv,nouv.p) ; nbar ← nbar+1 e fait fin c IFSIC 2004
  • 156.
    156 Arbres ; arbre partiel de poids optimum c IFSIC 2004
  • 157.
    Chapitre 11 Flots dansun r´seau de transport e 11.1 Exemple introductif Probl`me de l’approvisionnement et de la demande. Une ressource est disponible sur e 3 sites A1 ,A2 ,A3 en quantit´s respectives a1 ,a2 ,a3 . Cette ressource est demand´e en 4 sites e e B1 ,B2 ,B3 ,B4 en quantit´s respectives b1 , b2 , b3 , b4 . Les possibilit´s d’acheminement des res- e e sources des Ai vers les Bj sont mod´lis´es par le graphe valu´ de la figure 11.1; dans ce graphe, e e e les sites C1 ,C2 sont des sites interm´diaires de transfert, et la valeur d’un arc est une capacit´, e e ´gale ` la quantit´ maximale de ressource qui peut transiter sur cet arc. e a e Le probl`me pos´ est alors le suivant : est-il possible de satisfaire les demandes des Bj ` e e a partir des disponibilit´s des Ai et des possibilit´s de transport? e e Pour prendre en compte l’ensemble des donn´es sur le graphe, on ”agrandit” ce dernier en e introduisant un site fictif d’entr´e e, un site fictif de sortie s, et les arcs (repr´sent´s en gras sur e e e la figure): – (e,Ai ), de capacit´ ai e – (Bj ,s) de capacit´ bj e Un tel graphe s’appelle r´seau de transport. e Le fait d’attribuer ` un arc d’entr´e (e,Ai ) une capacit´ s’interpr`te bien: cela signifie que ai a e e e est la quantit´ maximum que l’on peut acheminer depuis Ai ; par contre, la capacit´ d’un arc de e e sortie Bj signifie que l’on s’interdit de consommer en Bj plus que la ressource demand´e. e Pour r´soudre le probl`me, on consid`re une fonction ϕ, d´finie sur les arcs et ` valeur dans e e e e a N, telle que: – arc d’entr´e: ϕ(e,Ai ) = quantit´ de ressource enlev´e au site Ai , e e e – arc de sortie: ϕ(Bj ,s) = quantit´ de ressource amen´e au site Bj , e e – arc de transport: ϕ(x,y) = quantit´ de ressource achemin´e sur l’arc (x,y). e e La valeur de ϕ sur un arc repr´sente donc un flux , et doit satisfaire les conditions de conservation e (ou lois de Kirchoff) en tout nœud du r´seau (autre que e et s): e (1) ∀x, x = e, x = s : ϕ(z,x) = ϕ(x,y) z∈Γ−1 (x) y∈Γ(x) De plus, sur tout arc, la condition de capacit´ doit ˆtre respect´e, c’est-`-dire e e e a (2) ∀u ∈ Γ : ϕ(u) ≤ c(u), o` c(u) est la capacit´ de l’arc u u e c IFSIC 2004
  • 158.
    158 Flots dans un r´seau de transport e B 1 b A 1 1 C a 1 B b2 1 2 a e 2 A s 2 b a C 3 3 2 B 3 A 3 B b 4 4 Fig. 11.1 – R´seau de transport e Une telle fonction s’appelle un flot (contraintes 1) compatible (contraintes 2) Le probl`me pos´ admet une solution s’il existe un flot compatible tel que, pour tout site e e demandeur Bj , on ait ϕ(Bj ,s) = bj (saturation des arcs de sortie). En pratique, nous verrons, grˆce aux r´sultats du §11.2, que la r´solution de ce probl`me revient ` chercher, parmi les flots a e e e a compatibles, un flot de valeur maximum, c’est-`-dire acheminant la plus grande quantit´ globale a e de ressource. Nous allons dans ce qui suit d´finir pr´cis´ment les notions de r´seau de transport, e e e e flot compatible, valeur d’un flot, et les r´sultats g´n´raux li´s ` ces notions. Puis nous donnerons e e e e a un algorithme de calcul de flot de valeur maximum, dˆ ` Ford et Fulkerson. ua 11.2 D´finitions et propri´t´s g´n´rales e e e e e R´seau de transport. e D´finition 11.1 Un r´seau de transport est un graphe valu´ par des e e e entiers G = (X,e,s; Γ; c) o`u – X ∪ {e} ∪ {s} est l’ensemble des sommets, – c : Γ −→ N est la fonction capacit´ .e – le sommet e s’appelle l’entr´e (ou source), le sommet s la sor- e tie (ou puits) et ils sont respectivement racine et anti-racine du graphe. – les arcs (e,∗) et (∗,s) s’appellent respectivement arcs d’entr´e et e arcs de sortie du r´seau e c IFSIC 2004
  • 159.
    11.2. D´finitions etpropri´t´s g´n´rales e e e e e 159 Flot compatible. D´finition 11.2 Un flot sur un r´seau de transport (X,e,s; Γ; c) est une e e fonction ϕ : Γ −→ N v´rifiant les lois de Kirchoff (d´finies au §11.1) e e Un flot compatible v´rifie en outre ∀u ∈ Γ : 0 ≤ ϕ(u) ≤ c(u) e Quelques notations. Soit A ⊆ X. On note: ΓS (A) = {(x,y) ∈ Γ | x ∈ A ∧ y ∈ A} arcs sortants de A ΓE (A) = {(x,y) ∈ Γ | x ∈ A ∧ y ∈ A} arcs entrants dans A puis ϕS (A) = (ϕ(u)) = flux sortant de A et u∈ΓS (A) ϕE (A) = (ϕ(u)) = flux entrant dans A u∈ΓE (A) (de mani`re analogue, on aura cS (A), cE (A)). Avec ces notations, par exemple, les conditions e de conservation au nœud x(= e, = s) s’expriment simplement : ϕE (x) = ϕS (x) o` x est mis pour l’ensemble {x} u Sur le plan algorithmique, un r´seau de transport est un graphe valu´, muni des acc`s sui- e e e vants : ENT ARC::c -- capacit´ e ENT ARC::ϕ -- flot avec les notations habituelles : si (x,y) est un arc, alors c(x,y) et ϕ(x,y) d´signent respective- e ment la capacit´ et le flux de l’arc (x,y). e Valeur d’un flot compatible. D´finition 11.3 La valeur d’un flot compatible est la quantit´ v(ϕ) = e e ϕS (e) (flux sortant de la ”source” e). La proposition suivante et son corollaire vont montrer, entre autres, que cette valeur repr´sente e bien la quantit´ globale de flux qui traverse le r´seau de la source vers le puits. e e Proposition 11.4 Soit A ⊆ X ∪ {e} et ϕ un flot. – si e ∈ A alors ϕS (A) − ϕE (A) = 0 – si e ∈ A alors ϕS (A) − ϕE (A) = v(ϕ) c IFSIC 2004
  • 160.
    160 Flots dans un r´seau de transport e D´monstration. e i) Supposons que e ∈ A. Pour tout x de A, les conditions de conservation permettent d’´crire: e ϕ(x,y) + ϕ(x,y) = ϕ(z,x) + ϕ(z,x) y∈Γ(x) y∈Γ(x) z∈Γ−1 (x) z∈Γ−1 (x) y∈A y∈A z∈A z∈A Sommons ces ´galit´s sur A. Il vient: e e S ϕ (A) + ϕ(x,y) = ϕE (A) + ϕ(z,y), soit x∈A x∈A y∈Γ(x) z∈Γ−1 (x) y∈A z∈A ϕS (A) − ϕE (A) = − ϕ(x,y) + ϕ(z,x) x∈A x∈A y∈Γ(x) z∈Γ−1 (x) y∈A z∈A Si dans la deuxi`me somme double on fait le changement de variable: (x,z) → (y,x), on obtient: e ϕS (A) − ϕE (A) = − ϕ(x,y) + ϕ(x,y) = 0 x∈A y∈A y∈Γ(x) x∈Γ−1 (y) y∈A x∈A ce qui d´montre la proposition dans ce cas. e ii) Supposons que e ∈ A, et posons A = A {e}. On a alors: ϕS (A ) = ϕS (A) − ϕ(e,y) y∈Γ(e) y∈A ϕE (A ) = ϕS (A) + ϕ(e,y) y∈Γ(e) y∈A                     ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¦   ¡ ¦   ¡ ¦   ¡   ¡   ¡   ¡   ¡   ¡   ¡   ¡ A/A’ A’ ¢ ¢ ¢ £ £ £ ¤                     ¥ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¦ § ¦ § ¦ § ¢ £ e¤ ¥ ¢ £ §   ¡ ¢ £ §   ¡ §   ¡   ¡   ¡   ¡   ¡   ¡   ¡   ¡ A’ = A / {e} ¢ ¢ ¢ £ £ £ ¨ ¨ ¨ ¤     ©   ©   ©             ¥ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¨ ¨ ¨ ¤     ©   ©   ©             ¥ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ et, d’apr`s le point i): ϕS (A ) − ϕE (A ) = 0, ce qui donne: e ϕS (A) − ϕE (A) = ϕ(e,y) = ϕS (e) = v(ϕ) y∈Γ(e) P Corollaire 11.5 Soit ϕ un flot. On a: v(ϕ) = ϕS (e) = ϕE (s) D´monstration. En effet, si on applique la proposition pr´c´dente avec e e e A = {e} ∪ X, on obtient: ϕS (A) = ϕE (s), ϕE (A) = 0 d’o` v(ϕ) = ϕE (s) u c IFSIC 2004
  • 161.
    11.3. Recherche d’unflot compatible de valeur maximum 161 D´finition 11.6 On appelle coupe du r´seau tout ensemble d’arcs e e ΓS (A) o` A ⊆ X ∪ {e} avec e ∈ A. La quantit´ cS (A) s’appelle la u e capacit´ de la coupe ΓS (A). e Remarque. Ce nom de coupe vient de ce que tout chemin de e ` s emprunte au moins un arc a de la coupe; autrement dit, si on supprime les arcs de la coupe, on ”d´connecte” le r´seau entre e e e et s, c’est-`-dire on empˆche tout passage de e ` s. a e a Nous ´non¸ons un lemme, dˆ ` Ford et Fulkerson, fondamental pour l’obtention de e c u a l’algorithme de calcul d’un flot maximal. Lemme 11.7 Soit A ⊆ X ∪ {e} avec e ∈ A, et ϕ un flot compatible. On a l’in´galit´: e e v(ϕ) ≤ cS (A) D´monstration. D’apr`s la proposition 11.4 on a: e e S E v(ϕ) = ϕ (A) − ϕ (A) mais, le flot ´tant compatible: e ϕ (A) ≤ cS (A), ϕE (A) ≥ 0 S d’o` le r´sultat P u e Ce lemme s’´nonce encore sous la forme suivante : ”La valeur de tout flot compatible est e inf´rieure ou ´gale ` la capacit´ de toute coupe” e e a e Corollaire 11.8 max v(ϕ) ≤ min cS (A) ϕ compatible A⊆X∪{e} e∈A ´ Evident d’apr`s le lemme pr´c´dent. e e e Dans le paragraphe suivant, nous nous int´ressons au calcul d’un flot compatible de valeur e maximum. En fait, nous allons montrer un r´sultat de dualit´ : dans le corollaire pr´c´dent, e e e e l’in´galit´ est une ´galit´ : ce r´sultat est connu sous le nom de th´or`me de Ford-Fulkerson, e e e e e e e et sa preuve repose sur la construction explicite, par un algorithme, d’un flot ϕ et d’une coupe ΓS (A) tels que v(ϕ) = cS (A) 11.3 Recherche d’un flot compatible de valeur maximum 11.3.1 Sch´ma g´n´ral e e e Dans ce paragraphe, nous d´crivons un algorithme dˆ ` Ford et Fulkerson; le principe e ua en est le suivant: partant d’un flot compatible initial, on teste si ce flot est de valeur maximum, et s’il ne l’est pas, on le modifie pour obtenir un nouveau flot compatible de valeur strictement sup´rieure ` la valeur du flot pr´c´dent, puis on recommence. Le test et l’augmentation du flot e a e e c IFSIC 2004
  • 162.
    162 Flots dans un r´seau de transport e sont effectu´s grˆce ` une proc´dure de marquage que nous d´taillons ci-apr`s. Le sch´ma de e a a e e e e l’algorithme est donc it´ratif: e depuis G.ϕ ←− flot compatible; jusqua ¬ marquage(G) faire am´lioration(G) e fait 11.3.2 Marquage Le rˆle de la fonction marquage consiste ` d´terminer un sous-ensemble A de X ∪ {e} ∪ {s}, o a e ce sous-ensemble devant ˆtre le plus grand possible, tel que chaque sommet de A puisse ˆtre e e marqu´ en appliquant les r`gles ci-apr`s: e e e 1. e est marqu´ (+) e 2. si x est marqu´: e (a) marquage en avant: marquer (+x) tout successeur y de x tel que y ∈ A et ϕ(x,y) c(x,y) (arc non satur´ ) e (b) marquage en arri`re: marquer (−x) tout pr´d´cesseur z de x tel que z ∈ A et ϕ(z,x) e e e 0 (arc charg´ ) e 3. arrˆt lorsque s est marqu´ ou lorsqu’aucun nouveau sommet ne peut plus ˆtre marqu´. La e e e e fonction rend le r´sultat vrai si, et seulement si, s n’a pas pu ˆtre marqu´. Le marquage e e e est r´alis´ comme ”effet de bord ” de la fonction. e e Intuitivement, ce proc´d´ de marquage repose sur l’id´e suivante: on essaye d’augmenter la e e e valeur de ϕ; pour cela, il faut d’abord trouver un arc d’entr´e (e,x) non satur´; c’est le sens e e du marquage de e, puis du marquage (+e) de tout successeur x de e tel que (e,x) ne soit pas satur´. Si un tel arc existe, on envoie une unit´ de flux suppl´mentaire, qui parvient donc ` x; e e e a le flux entrant en x ayant augment´ de 1, le maintien des conditions de conservation n´cessite e e donc, soit d’augmenter le flux sortant de 1, soit de diminuer le flux sur un autre arc entrant de 1; l’ensemble des arcs issus de x sur lesquels on peut envoyer l’unit´ de flux suppl´mentaire est e e donc rep´r´ grˆce au marquage ”en avant”, et l’ensemble des arcs aboutissant ` x sur lesquels ee a a on peut diminuer d’une unit´ le flux entrant est rep´r´ grˆce au marquage ”en arri`re”. Selon e ee a e les possibilit´s, on parvient ainsi ` compenser l’envoi de l’unit´ de flux suppl´mentaire le long e a e e d’une suite de sommets; si l’on parvient ` un sommet x pr´d´cesseur de s tel que l’arc (x,s) a e e n’est pas satur´, on peut maintenir les conditions de conservation en x en envoyant l’unit´ de e e flux suppl´mentaire sur cet arc; la valeur du flot a ainsi augment´ d’une unit´, puisqu’une unit´ e e e e suppl´mentaire issue de e a pu ˆtre achemin´e jusqu’` s tout en maintenant les conditions de e e e a conservation et les contraintes de compatibilit´.e Du point de vue algorithmique, ce proc´d´ de marquage n’est rien d’autre qu’une recherche e e de descendants du sommet e, dans un graphe ”auxiliaire” engendr´ par les arcs non satur´s du e e r´seau et par les arcs charg´s du r´seau transpos´; cette recherche pourra ˆtre mise en œuvre par e e e e e une des m´thodes vues dans les chapitres pr´c´dents, notamment une m´thode d’exploration. e e e e Donnons maintenant un premier r´sultat li´ ` l’application des r`gles de marquage. e ea e c IFSIC 2004
  • 163.
    11.3. Recherche d’unflot compatible de valeur maximum 163 Proposition 11.9 Si le sommet s n’a pu ˆtre marqu´ par la fonction e e marquage(G) alors G.ϕ est de valeur maximum. D´monstration. Soit A l’ensemble des sommets marqu´s ` l’issue de la proc´dure. Par e e a e construction e ∈ A et, par hypoth`se, s ∈ A. Par cons´quent, Γ e e S (A) est une coupe. D’apr`s e la proposition 11.4, on a: (1) v(ϕ) = ϕS (A) − ϕE (A). Mais, si x ∈ A et y ∈ A, l’arc (x,y) est satur´, d’o` ϕ(x,y) = e u c(x,y); donc: (2) ϕS (A) = cS (A). De mˆme, si z ∈ A et x ∈ A, l’arc (z,x) n’est pas charg´, c’est-`-dire e e a ϕ(z,x) = 0; donc: (3) ϕE (A) = 0. Les ´galit´s (1), (2), (3) impliquent: v(ϕ) = c(A) et par cons´quent, d’apr`s e e e e le lemme de 11.7 Ford-Fulkerson, ϕ est de valeur maximum. Corollaire 11.10 Si le sommet s n’a pu ˆtre marqu´ par la fonction e e marquage(G), alors la coupe ΓS (A) d´finie par l’ensemble des sommets e marqu´s est de capacit´ minimum. e e Th´or`me 11.11 (Ford-Fulkerson) La valeur maximum des flots com- e e patibles est ´gale ` la capacit´ minimum des coupes. e a e Ce th´or`me est un ´nonc´ ´quivalent aux deux propositions pr´c´dentes. Il r´pond ` la question e e e ee e e e a pos´e ` la fin du §11.2. e a 11.3.3 Am´lioration e Nous ´tablissons maintenant la r´ciproque de ce qui pr´c`de, ` savoir le fait que si s a pu ˆtre e e e e a e marqu´ par la fonction marquage(G), alors le flot G.ϕ n’est pas de valeur maximum; de plus, le e marquage r´alis´ permet de d´finir un nouveau flot compatible de valeur strictement sup´rieure e e e e a ` celle de ϕ. Soit e(= x0 ),x1 ,x2 , . . . ,xn ,s(= xn+1 ) une s´quence de sommets telle que x1 soit marqu´ (+e), e e x2 marqu´ (±x1 ), ... , xi marqu´ (±xi−1 ), ... ,s marqu´ (+xn ). e e e Un couple (xi−1 ,xi ) tel que xi est marqu´ (+xi−1 ) correspond ` un arc non satur´ (xi−1 ,xi ); e a e posons εi = c(xi−1 ,xi ) − ϕ(xi−1 ,xi ) (capacit´ r´siduelle de l’arc, 0). Cette quantit´ est le e e e nombre maximum d’unit´s de flux suppl´mentaires pouvant circuler sur cet arc. On dira que e e l’arc (xi ,xi−1 ) peut ˆtre εi -augment´. e e Un couple (xi−1 ,xi ) tel que xi est marqu´ (−xi−1 ) correspond ` un arc charg´ (xi ,xi−1 ); e a e posons εi = ϕ(xi−1 ,xi ) (flux de l’arc, 0). Cette quantit´ est le nombre maximum d’unit´s de e e flux pouvant ˆtre ˆt´es de cet arc. On dira que l’arc (xi ,xi−1 ) peut ˆtre εi -diminu´. e oe e e D´finissons la fonction ϕ de la mani`re suivante : Soit ε = min1≤i≤n+1 εi e ˆ e – sur tout arc (xi−1 ,xi ) de la chaˆ pouvant ˆtre augment´ (c’est-`-dire xi marqu´ (+xi−1 )): ıne e e a e ϕ(xi−1 ,xi ) = ϕ(xi−1 ,xi ) + ε ˆ c IFSIC 2004
  • 164.
    164 Flots dans un r´seau de transport e – sur tout arc (xi ,xi−1 ) de la chaˆ pouvant ˆtre diminu´ (c’est-`-dire xi marqu´ (−xi−1 ): ıne e e a e ϕ(xi ,xi−1 ) = ϕ(xi ,xi−1 ) − ε ˆ – sur tout autre arc (y,z): ϕ(y,z) = ϕ(y,z) ˆ On a le r´sultat suivant: e Proposition 11.12 ϕ est un flot compatible, et v(ϕ) = v(ϕ) + ε v(ϕ) ˆ ˆ D´monstration. 1) v´rifions que ϕ est un flot. Il suffit de v´rifier que les conditions de conser- e e ˆ e vation sont maintenues en tout sommet de la chaˆ (= e, = s). Quatre cas sont possibles pour ıne un sommet xi (1 ≤ i ≤ n) 1. marque(xi ) = (+xi−1 ) et marque(xi+1 ) = (+xi ). x x x i-1 i i+1 On a alors ϕE (xi ) = ϕE (xi ) + ε et ϕS (xi ) = ϕS (xi ) + ε d’o` ˆ ˆ u ϕE (xi ) = ϕS (xi ) ˆ ˆ 2. marque(xi ) = (+xi−1 ) et marque(xi+1 ) = (−xi ) x x x i-1 i i+1 On a alors ϕ(xi−1 ,xi ) = ϕ(xi−1 ,xi ) + ε et ϕ(xi+1 ,xi ) = ϕ(xi+1 ,xi ) − ε soit ˆ ˆ ϕE (xi ) = ϕE (xi ) et ϕS (xi ) = ϕS (xi ) d’o` ˆ ˆ u ϕE (xi ) = ϕS (xi ) ˆ ˆ 3. marque(xi ) = (−xi−1 ) et marque(xi+1 ) = (+xi ). x x x i-1 i i+1 On a alors ϕ(xi ,xi−1 ) = ϕ(xi ,xi−1 ) − ε et ϕ(xi ,xi+1 ) = ϕ(xi ,xi+1 ) + ε soit ˆ ˆ ϕE (xi ) = ϕE (xi ) et ϕS (xi ) = ϕS (xi ) d’o` ˆ ˆ u ϕE (xi ) = ϕS (xi ) ˆ ˆ 4. marque(xi ) = (−xi−1 ) et marque(xi+1 ) = (−xi ). x x x i-1 i i+1 On a alors ϕS (xi ) = ϕS (xi ) − ε et ϕE (xi ) = ϕE (xi ) − ε d’o` ˆ ˆ u ϕE (xi ) = ϕS (xi ) ˆ ˆ ce qui montre que ϕ est un flot. ˆ Montrons que ϕ est compatible; c’est imm´diat par construction, puisque ˆ e 1. sur un arc augmentant (xi−1 ,xi ), ϕ a ´t´ augment´ de ε ≤ εi = c(xi−1 ,xi ) − ϕ(xi−1 ,xi ), ˆ ee e donc ϕ(xi−1 ,xi ) ≤ c(xi−1 ,xi ) ˆ 2. sur un arc diminuant (xi ,xi−1 ), ϕ a ´t´ diminu´ de ε ≤ ϕ(xi ,xi−1 ) et donc ϕ(xi ,xi−1 ) ≥ 0 ˆ ee e ˆ Enfin, ϕ a ´t´ augment´ sur un arc d’entr´e (e,x1 ), de la quantit´ ε, donc v(ϕ) = v(ϕ) + ε ˆ ee e e e ˆ et comme ε 0, on a bien v(ϕ) v(ϕ) P ˆ c IFSIC 2004
  • 165.
    11.4. Algorithme deFord-Fulkerson 165 11.4 Algorithme de Ford-Fulkerson La mise en œuvre algorithmique des fonctions de marquage et d’am´lioration se fait par e une m´thode d’exploration issue de e. Cette exploration peut ˆtre men´e avec n’importe quelle e e e strat´gie: largeur, profondeur, etc. Quelle que soit la strat´gie retenue, l’exploration est adapt´e e e e de mani`re `: e a 1. op´rer sur le graphe valu´ Gε (ϕ) (appel´ graphe d’´cart) constitu´ de l’union du graphe e e e e e partiel de G constitu´ des arcs non satur´s et du graphe partiel de Gt (transpos´ de G) e e e constitu´ des arcs charg´s, soit, formellement: e e Gε (ϕ) = (X ∪ {e} ∪ {s},Γε ,c(ϕ)) avec Γε (ϕ) = {(x,y) | (x,y) ∈ Γ ∧ ϕ(x,y) c(x,y)} ∪ {(x,y) | (y,x) ∈ Γ ∧ ϕ(y,x) 0} et c(x,y) − ϕ(x,y) si (x,y) ∈ Γ ∧ ϕ(x,y) c(x,y) c(ϕ)(x,y) = ϕ(y,x) si (y,x) ∈ Γ ∧ ϕ(y,x) 0 Pour fixer les id´es, la figure 11.2 donne un exemple de graphe d’´cart associ´ ` un flot. e e ea 2. associer ` chaque sommet y visit´ un attribut ε tel que ε(y) est la valeur du chemin de Gε a e (´gale au minimum des valeurs des arcs) ` l’issue duquel y a ´t´ visit´ pour la premi`re e a ee e e fois, 3. rajouter la condition d’arrˆt s visit´. e e 11.4.1 Fonction marquage On en donne une version r´cursive, analogue au calcul r´cursif de l’ensemble des descendants e e d’un sommet donn´ (algorithme 6.4.2). Ici, l’exploration est celle des descendants du sommet e, e dans le graphe d’´cart. Sur l’exploration proprement dite, la fonction greffe un calcul, en affectant e a ` chaque sommet marqu´ sa marque (chaˆ de caract`res) et son ´cart d’am´lioration (l’entier e ıne e e e ε). Ces deux informations seront exploit´es par la proc´dure d’am´lioration. Enfin, la condition e e e d’arrˆt est modifi´e: le marquage s’arrˆte lorsque l’exploration ne permet plus de marquer de e e e nouveaux sommets (comme dans le calcul des descendants) ou lorsque le sommet s est marqu´. e 11.4.2 Proc´dure am´lioration e e Pr´condition: s est marqu´ (s ∈ M ). e e Invariant: debchaine=tˆte de la chaˆ le long de laquelle ϕ est modifi´ ∧ e ıne e flot modifi´ entre debchaine et s e Condition d’arrˆt: e debchaine = e c IFSIC 2004
  • 166.
    166 Flots dans un r´seau de transport e 1 1 1 1 4 3 1 1 1 1 1 2 1 e 2 s 2 2 1 2 2 5 2 1 3 1 (1) 4 (2) (1) (1) (1) e 2 (1) s (1) (2) (2) (1) (1) 5 (1) (1) 3 (1) il y a un chemin : e, 2, 5, 1, 4, s dans ce graphe d’écart, avec epsil=min(1, 2, 1, 1, 1)=1 Fig. 11.2 – Flot et graphe d’´cart associ´ e e 11.4.3 Algorithme Invariant: G est muni d’un flot compatible G.ϕ. Condition d’arrˆt marquage(G) e Progression: am´lioration(G); e Valeurs initiales: Ici, il s’agit de calculer un flot compatible initial. Une premi`re solution, e triviale, consiste ` prendre G.ϕ ≡ 0, qui r´pond ´videmment ` la question. a e e a Une seconde solution, qui sera int´ressante lorsqu’on r´soud le probl`me ”` la main”, no- e e e a tamment sur une repr´sentation graphique, consiste ` chercher d’abord un flot complet: e a c IFSIC 2004
  • 167.
    11.4. Algorithme deFord-Fulkerson 167 D´finition 11.13 Un flot compatible est dit complet si tout chemin de e e ` s poss`de au moins un arc satur´. a e e Autrement dit, un flot compatible n’est pas complet si, et seulement si, la fonction marquage permet de marquer s en n’utilisant que des marquages avant. La construction d’un flot complet s’effectue en explorant les chemins de e ` s et en affectant a uniform´ment sur chaque chemin un flux ´gal ` la plus petite capacit´ r´siduelle des arcs du e e a e e chemin. Les flux ainsi obtenus sont superpos´s (c’est-`-dire leurs valeurs additionn´es sur chaque e a e arc) et lorsqu’aucun chemin ne peut plus recevoir de flux suppl´mentaire, on a un flot compatible e complet. Il est clair qu’un flot de valeur maximum est complet, mais que la r´ciproque est fausse, e comme l’exemple trait´ dans le §11.5 suivant va le montrer. e Le texte complet de l’algorithme est donn´ pages 173. e 11.4.4 Exemple Consid´rons le r´seau de transport de la figure 11.3 e e Initialisation Recherche d’un flot complet chemin (e,1,4,s); flux = 1 ; arc (1,4) satur´e chemin (e,1,5,s); flux = 1 ; arcs (e,1),(1,5) satur´s e chemin (e,2,4,s); flux = 1 ; arcs (2,4),(4,s) satur´s e chemin (e,2,5,s); flux = 1 ; arcs (e,2),(2,5),(5,s) satur´s e chemin (e,3,6,s); flux = 1 ; arc (3,6) satur´e Flot repr´sent´ sur la figure 11.4 (les arcs satur´s sont en gras) e e e marquage: Arborescence en largeur 1 4 epsil = 1 e 2 5 s 3 6 marquage report´ sur la figure 11.4 e premier pas d’it´ration am´lioration e e ϕ(6,s)←2; ϕ(2,6)←2; ϕ(2,5)←0; ϕ(3,5)←2; ϕ(e,3)←2 ˆ ˆ ˆ ˆ ˆ marquage: e(+) stop; ce flot est donc maximum c IFSIC 2004
  • 168.
    168 Flots dans un r´seau de transport e 11.4.5 Complexit´ e La complexit´ de l’algorithme de Ford-Fulkerson n’est pas polynomiale. En effet, le nombre e d’´tapes de l’algorithme est major´ par la capacit´ minimale c+ (A) des coupes du r´seau, puis- e e e e qu’` chaque ´tape la valeur de ϕ augmente au moins de 1, et que d’apr`s le lemme 11.7 on a a e e v(ϕ) ≤ c+ (A). Or cette capacit´ ne peut ˆtre major´e ` partir de la taille du graphe (exprim´e e e e a e en fonction de n et m, nombre de sommets et d’arcs). A une mˆme configuration topologique de e r´seau peuvent en effet ˆtre attribu´es des capacit´s qui sont des nombres entiers quelconques, e e e e donc a priori non born´s. e Signalons que des algorithmes de complexit´ polynomiale en fonction du nombre n de som- e mets ont ´t´ propos´s: algorithmes de Edmonds-Karp, de Dinic, de Karzanov (ce dernier ee e ayant une complexit´ globale en O(n3 )) [Din70, EK72, Kar74, MKM78]. e 11.5 Cas des r´seaux bi-partis : mise en œuvre par tableaux e Dans ce paragraphe, nous consid´rons le cas particulier de r´seaux de la forme e e G = (X,Y,e,s ; Γe ,Γ,Γs ; c) o` u X ∩ Y = ∅, e ∈ X ∪ Y, ,s ∈ X ∪ Y Γe ⊆ {(e,x),x ∈ X}, Γ ⊆ X × Y, Γs ⊆ {(y,s),y ∈ Y } Supposons que X = {x1 ,x2 , . . . ,xn } et Y = {y1 ,y2 , . . . ,yp }. Un tel r´seau peut alors ˆtre e e repr´sent´ par un tableau C de format (n + 1) × (p + 1), avec e e ci,j = c(xi ,yj ), 1 ≤ i ≤ n,1 ≤ j ≤ p ci,p+1 = c(e,xi ), 1 ≤ i ≤ n cn+1,j = c(yj ,s), 1 ≤ j ≤ p cn+1,p+1 non d´fini e Exemple y1 y2 y3 y4 y5 y6 x1 20 10 30 0 20 0 30 x2 30 20 0 30 30 0 70 x3 0 20 20 20 0 20 80 x4 0 10 10 10 0 40 60 x5 30 0 20 0 0 20 60 40 20 40 40 30 70 Mise en œuvre de Ford-Fulkerson. Cette mise en œuvre peut ˆtre faite directement ` e a l’aide d’un tel tableau: la fonction ϕ est repr´sent´e dans un tableau de mˆme format. Pour que e e e c IFSIC 2004
  • 169.
    11.5. Cas desr´seaux bi-partis : mise en œuvre par tableaux e 169 ϕ soit un flot compatible, il faut et il suffit d’assurer: p 1) ∀i 1 ≤ i ≤ n ⇒ j=1 ϕi,j = ϕi,p+1 (conservation au nœud xi ) n ∀j 1 ≤ j ≤ p ⇒ i=1 ϕi,j = ϕn+1,j (conservation au nœud yj ) 2) 1 ≤ i ≤ n + 1,1 ≤ j ≤ p + 1 ⇒ 0 ≤ ϕi,j ≤ ci,j (compatibilit´) e De plus, la valeur de ϕ est donn´e par e n p v(ϕ) = ϕi,p+1 = ϕn+1,p i=1 j=1 Les diff´rentes ´tapes sont alors : e e Obtention d’un flot complet initial. Saturer le tableau ϕ ligne par ligne (m´thode dite du e coin Nord-ouest), c’est-`-dire: a pour toute ligne i depuis 1 jqa n ϕi,p+1 ← 0 ; pour toute colonne j, tant que ϕi,p+1 ci,p+1 ϕi,j ← max(ci,j , ci,p+1 − ϕi,p+1 , cn+1,j − ϕn+1,j ) ; ϕi,p+1 ← ϕi,p+1 + ϕi,j ; ϕn+1,j ← ϕn+1,j + ϕi,j fpour colonnes fpour lignes Si ϕi,p+1 = ci,p+1 on dira que la ligne i est satur´e (cela correspond ` la saturation de l’arc e a d’entr´e (e,xi )). De mˆme si ϕn+1,j = cn+1,j pour la colonne j (saturation de l’arc de sortie e e (yj ,s)). Marquage Le marquage consiste ici ` alterner des phases de marquage avant et marquages a arri`re, o` e u – une phase de marquage avant consiste ` marquer de nouvelles colonnes ` partir des lignes a a d´j` marqu´es, ea e – une phase de marquage arri`re consiste ` marquer de nouvelles lignes ` partir des colonnes e a a d´j` marqu´es. ea e Initialement, toute ligne i non satur´e est marqu´e (+e) e e Ensuite, les phases avant et arri`re se d´roulent comme suit: e e – phase de marquage avant : pour toute ligne i marqu´e ` la phase pr´c´dente e a e e pour toute colonne j depuis 1 jqa p si j non marqu´e et ϕi,j ci,j e alors marquer (+i) la colonne j fsi c IFSIC 2004
  • 170.
    170 Flots dans un r´seau de transport e fpour colonne fpour ligne – phase de marquage arri`re : e pour toute colonne j marqu´e ` la phase pr´c´dente e a e e pour toute ligne i depuis 1 jqa n si i non marqu´e et ϕi,j 0 e alors marquer (-j) la ligne i fsi fpour ligne fpour colonne Arrˆt: les deux situations d’arrˆt se produisent lorsque: e e 1: s est marqu´ : lors d’une phase avant une colonne j non satur´e est marqu´e. Cela corres- e e e pond au sommet yj marqu´ et l’arc (yj ,s) non satur´. e e 2: blocage : lors d’une phase (avant ou arri`re) aucune nouvelle rang´e (ligne ou colonne selon e e les cas) n’a pu ˆtre marqu´e et toutes les colonnes marqu´es sont satur´es. e e e e Dans le premier cas, marquage(G) rend faux (G.ϕ non maximum), dans le deuxi`me cas, mar- e quage(G) rend vrai (G.ϕ maximum) Am´lioration(G) (dans le cas o` s est marqu´). e u e Partant de la colonne marqu´e non satur´e jk qui a provoqu´ l’arrˆt du marquage, on remonte e e e e la chaˆ de marquage jusqu’` trouver une ligne i1 marqu´e (+e): c’est une chaˆ de marques ıne a e ıne altern´es: e (+ik ),(−jk−1 ),(+ik − 1), . . . ,(+i2 ),(−j1 ),(+e) Simultan´ment, on calcule ε = min(ε+ ,ε− ), o` e u ε+ = min (ci ,j − ϕi ,j ) =1,...,k ε− = min ϕi ,j −1 (voir figure ci-dessous) =2,...,k puis on ajuste ϕ en ajoutant/retranchant alternativement ε: ϕi ,j ←ϕi ,j + ε, ϕi ,j −1 ←ϕi ,j −1 −ε puis ϕn+1,jk ←ϕn+1,jk + ε, ϕi1 ,p+1 ←ϕi1 ,p+1 + ε Exemple Nous traitons maintenant l’exemple donn´ au d´but de ce paragraphe. Un seul e e tableau contient les flux et les capacit´s. Chaque case se pr´sente comme suit: e e ci,j ϕi,j c IFSIC 2004
  • 171.
    11.5. Cas desr´seaux bi-partis : mise en œuvre par tableaux e 171 Flot complet initial et marquage correspondant (+x5 ) (+x3 ) (+x5 ) (+x3 ) (+x1 ) (+x5 ) y1 y2 y3 y4 y5 y6 (−y1 ) x1 20 10 30 0 20 0 30 20 10 0 0 0 0 30 (−y1 ) x2 30 20 0 30 30 0 70 20 10 0 30 10 0 70 (+e) x3 0 20 20 20 0 20 80 0 0 20 10 0 20 50 (+e) x4 0 10 10 10 0 40 60 0 0 10 0 0 40 50 (+e) x5 30 0 20 0 0 20 60 0 0 10 0 0 10 20 40 20 40 40 30 70 v=220 40 20 40 40 10 70 Am´lioration du flot: La chaˆ de marquage est: e ıne (y5 ,s) de capacit´ r´siduelle 20 e e (x1 ,y5 ) ” ” 20 (x1 ,y1 ) ” ” -20 (x5 ,y1 ) ” ” 30 (e,x5 ) ” ” 40 soit un flux ` transf´rer de 20. a e c IFSIC 2004
  • 172.
    172 Flots dans un r´seau de transport e Texte de la fonction ENT epsil ; ENT SOMMET::ε ; STRING SOMMET::marq ; local ENS[SOMMET] M BOOL marquage(GRAPHE G) c’est d´but e M ← ∅ ; epsil ← 0 ; marquer(e, ’’+’’, +∞) ; si s ∈ M alors epsil ← s.ε fsi ; Result ← s ∈ M fin marquer(SOMMET x; STRING m; ENT ecart) c’est precondition x ∈ M local ENT e d´but e x.marq ← m ; x.ε ← ecart ; M ← M ∪ { x }; si x = s alors -- marquages avant pour tout y de G.lst succ(x) faire si y ∈ M et ϕ(x,y) c(x,y) alors e ← min(x.ε,c(x,y)-ϕ(x,y)) ; marquer(y, ’’+x’’ , e) fsi fpourtout ; -- marquages arriere pour tout z de G.lst pred(x) faire si z ∈ M et ϕ(z,x) 0 alors e ← min(x.ε,ϕ(z,x)) ; marquer(z, ’’-x’’ , e) fsi fpourtout fsi fin -- ` la sortie de cette proc´dure, soit s est marqu´ (en avant ` partir de x) soit tous les som- a e e a mets marquables ` partir de x sont marqu´s. a e c IFSIC 2004
  • 173.
    11.5. Cas desr´seaux bi-partis : mise en œuvre par tableaux e 173 Texte de la proc´dure e amelioration(GRAPHE G) ; local SOMMET debchaine ; d´but e depuis debchaine ← s ; jusqua debchaine = e faire si debchaine.marq = ’’+x’’ alors G.ϕ(x,debchaine) ← G.ϕ(x,debchaine) + G.epsil sinon G.ϕ ← G.ϕ(debchaine,x) - G.epsil fsi ; debchaine ← x fait ; fin Algorithme de FORD-FULKERSON ford-fulkerson(GRAPHE G) c’est d´but e depuis G.ϕ ← initial -- d´livre un flot initial compatible; le flot ≡ 0 convient e jusqua marquage(G) faire amelioration(G) fait fin 1 1 4 2 2 2 2 e 2 5 s 2 2 3 6 Fig. 11.3 – Exemple d’application de Ford-Fulkerson c IFSIC 2004
  • 174.
    174 Flots dans un r´seau de transport e 1 (-5) 1 1 4 2 1 2 2 2 (-5) 1 2 2 1 2 2 e 2 5 s (+) 1 (+3) (+6) 2 1 2 3 6 1 (+e) (+2) Fig. 11.4 – flot complet et marquage 1 1 1 4 2 1 2 2 2 1 2 2 2 2 e 2 5 s 1 (+) 2 2 1 2 2 3 6 1 coupe minimale Fig. 11.5 – deuxi`me flot et marquage e c IFSIC 2004
  • 175.
    11.5. Cas desr´seaux bi-partis : mise en œuvre par tableaux e 175 x 20 1 y1 10 40 20 30 30 x 20 30 2 y2 20 30 30 70 20 20 40 e 80 x y3 s 60 3 20 20 40 60 10 10 y4 x 10 4 30 40 30 20 y5 70 x 20 5 y 6 Fig. 11.6 – R´seau bi-parti e c IFSIC 2004
  • 176.
    176 Flots dans un r´seau de transport e Deuxi`me flot et marquage correspondant e (+x5 ) (+x3 ) (+x5 ) (+x3 ) (+x2 ) (+x5 ) y1 y2 y3 y4 y5 y6 (−y2 ) x1 20 10 30 0 20 0 30 0 10 0 0 20 0 30 (−y1 ) x2 30 20 0 30 30 0 70 20 10 0 30 10 0 70 (+e) x3 0 20 20 20 0 20 80 0 0 20 10 0 20 50 (+e) x4 0 10 10 10 0 40 60 0 0 10 0 0 40 50 (+e) x5 30 0 20 0 0 20 60 20 0 10 0 0 10 40 40 20 40 40 30 70 v=240 40 20 40 40 30 70 Ce flot est maximal car il sature les sorties. 11.6 Application: probl`mes de couplage des graphes bi-partis e Les probl`mes de couplage de cardinalit´ maximale constituent une des applications les e e plus classiques des mod`les de flots. Ils interviennent aussi comme ´tape dans la r´solution de e e e probl`mes d’affectation ` coˆt optimal, largement utilis´s en optimisation combinatoire. Histo- e a u e riquement, la th´orie du couplage maximum d’un graphe bi-parti a pr´c´d´ la th´orie des flots; e e e e e elle apparaˆ maintenant comme une application de cette derni`re aux aux graphes bi-partis. En ıt e fait, le r´sultat fondamental, du ` K¨nig et Hall, r´sulte de l’application aux r´seaux bi-partis e a o e e mod´lisant le probl`me du lemme de Ford-Fulkerson, de mˆme l’algorithme r´solvant le probl`me e e e e e (algorithme de Evegary et K¨hn) est l’adaptation de l’algorithme de Ford-Fulkerson. u 11.6.1 Le probl`me e Soit Y et Z deux ensembles finis et Γ une relation sur Y × Z, ou encore, ce qui est ´quivalent, e une application de Y dans 2Z (ensemble des parties de Z). Le triplet (Y,Z,Γ) est en fait un graphe bi-parti G, avec Y ∪ Z comme ensemble de sommets, et Γ comme ensemble d’arcs. D´finition 11.14 On appelle couplage du graphe bi-parti G une partie e A ⊆ Y et une bijection ϕ : A → ϕ(A) telle que ϕ(A) ⊆ Z et ∀x ∈ A : ϕ(x) ∈ Γ(x). D´finition 11.15 Si (A,ϕ) est un couplage de G alors |A| = |ϕ(A)| e s’appelle le cardinal (ou valeur) du couplage. c IFSIC 2004
  • 177.
    11.6. Application: probl`mesde couplage des graphes bi-partis e 177 Remarque Un couplage peut aussi ˆtre vu comme un sous-ensemble W de l’ensemble des e arcs Γ du graphe bi-parti G = (Y,Z,Γ) tel que deux arcs distincts de W n’aient ni origine ni extr´mit´ commune (figure 11.7). e e e a Y={a, b, c, d, } f Z={e, f, g, h, i } b A={a, b, c } g c (A)={e, f, h } h d couplage de cardinal 3 (arcs en gras) i Fig. 11.7 – Couplage du graphe G ´ Probl`me 11.1 Etant donn´ un graphe bi-parti G e e = (Y,Z,Γ), d´terminer un couplage de G, de cardinalit´ maximum e e Remarque S’il existe un couplage de valeur |Y |, on dit qu’on peut coupler Y dans Z. 11.6.2 Mod´lisation en r´seau bi-parti e e Au graphe bi-parti G = (Y,Z,Γ) on associe le r´seau de transport e G = (Y,Z,e,s; Γ ; c ) avec Γ = Γ ∪ {(e,y),y ∈ Y } ∪ {(z,s),z ∈ Z} c(e,y) = c(z,s) = 1 ∀y ∈ Y,∀z ∈ Z c(y,z) = +∞ c IFSIC 2004
  • 178.
    178 Flots dans un r´seau de transport e e s 1 1 Y Z On v´rifie facilement que tout flot compatible sur G est un couplage de G et r´ciproquement, e e dont les valeurs sont ´gales. Il suffit pour cela de consid´rer la correspondance e e z = ϕ(y) ⇔ ϕ(y,z) = 1 Nous donnons le r´sultat fondamental de la th´orie du couplage maximum, du ` K¨nig et e e a o Hall: Th´or`me 11.16 Soit G = (Y,Z,Γ) un graphe bi-parti. Il existe un e e couplage de valeur Y si, et seulement si, ∀A ⊆ Y : |A| ≤ |Γ(A)| D´monstration. i) Supposons qu’il existe un couplage ϕ de valeur |Y |, et consid´rons le e e r´seau de transport associ´. Soit A ⊆ Y . Alors A = {e} ∪ A ∪ Γ(A) d´finit une coupe Γ S (A ). e e e Calculons sa capacit´: e A (A) les arcs sortants de A’ sont: e s – (e,y) avec y ∈ Y A – (z,s) avec z ∈ Γ(A) Y-A Z- (A) et comme (y,z) ∈ Γ ∧ y ∈ A ⇒ z ∈ Γ(A), aucun arc de Γ ne sort de A . D’o`: u cS (A ) = |Y A| + |Γ(A)| = |Y | − |A| + |Γ(A)| D’apr`s le lemme de Ford-Fulkerson, e v(ϕ) = |Y | ≤ cS (A ) = |Y | − |A| + |Γ(A)| c’est-`-dire |A| ≤ |Γ(A)| a c IFSIC 2004
  • 179.
    11.6. Application: probl`mesde couplage des graphes bi-partis e 179 ii) R´ciproquement, soit ϕ un flot de valeur maximale sur le r´seau de transport associ´ ` G, e e ea et soit A = {e,A ⊆ Y,B ⊆ Z} l’ensemble des sommets marqu´s par le marquage associ´ ` G.ϕ. e ea D’apr`s le th´or`me de Ford-Fulkerson, v(ϕ) = cS (A ) ∞ (car v(ϕ) ≤ |Y | ∞) donc la coupe e e e Γ + (A ) ne comporte aucun arc (y,z) ∈ Γ. Par cons´quent Γ(A) ⊆ B soit encore |Γ(A)| ≤ |B| et e aussi : cS (A ) = |Y | − |A| + |B| ≥ |Y | − |A| + |Γ(A)| Comme, par hypoth`se, |A| ≤ |Γ(A)|, il vient v(ϕ) = cS (A ) ≥ |Y | d’o`, par double in´galit´, e u e e v(ϕ) = |Y | P La condition n´cessaire et suffisante ´tablie par ce th´or`me est ´videmment impraticable e e e e e pratiquement, puisqu’il faudrait la v´rifier sur les 2|Y | parties de Y . Pratiquement, il suffit de e calculer un couplage de valeur maximum en appliquant l’algorithme de Ford-Fulkerson adapt´ e au r´seau bi-parti mod´lisant le probl`me (§11.5) (ou un autre algorithme de calcul de flot e e e maximal), puis de comparer la valeur de ce couplage ` |Y |. a Du point de vue algorithmique, la mise en œuvre de l’algorithme de Ford-Fulkerson bi-parti est ici plus simple que pour un r´seau bi-parti quelconque: la colonne et la ligne suppl´mentaires e e portant les capacit´s d’entr´e et de sortie deviennent inutiles (puisque ces capacit´s sont impli- e e e citement ´gales ` 1); de mˆme, les capacit´s des arcs de Γ n’ont pas besoin d’ˆtre indiqu´es: e a e e e e toute case du tableau est soit interdite si elle ne correspond pas ` un arc de Γ (capacit´ 0), soit a e autoris´e, c’est-`-dire de capacit´ ∞. Enfin, les flux ne peuvent prendre que les valeurs 0 ou 1: il e a e suffira donc de ”marquer” les cases autoris´es avec un signe indiquant si elles sont s´lectionn´es e e e (flux 1) ou non (flux 0). En fait, le probl`me revient ` s´lectionner, parmi les cases autoris´es, un ensemble de cases e a e e tel qu’au plus une case par rang´e soit s´lectionn´e (couplage) et, parmi tous les ensembles e e e r´pondant ` la question, en donner un de cardinal maximum (couplage maximum). Une rang´e e a e sera dite satur´e si une case de cette rang´e est s´lectionn´e (cela correspond ` la saturation e e e e a d’un arc d’entr´e si la rang´e est une ligne, ou d’un arc de sortie si la rang´e est une colonne). e e e Enfin, une case autoris´e ne peut jamais ˆtre satur´e (car elle est de capacit´ ∞). e e e e Pour illustrer l’int´rˆt des mod`les de couplage et la mise en œuvre pratique de l’algo- ee e rithme de Ford-Fulkerson, nous traitons ci-apr`s un exemple concret de calcul de syst`me de e e repr´sentants distincts. e 11.6.3 Exemple: syst`me de repr´sentants distincts e e Soit X = {x1 , . . . ,xn } un ensemble fini, et Y1 , . . . ,Ym des parties de X: chaque Yj regroupe des ´l´ments de X selon un certain crit`re. On appelle syst`me de repr´sentants distincts (srd) ee e e e un sous-ensemble E ⊆ X dont chaque ´l´ment repr´sente une et une seule partie Yj . On a donc: ee e E = {xi1 , . . . ,xim } avec k = ⇒ xik = xi et xik ∈ Yk ,k = 1, . . . ,m. On se ram`ne au probl`me de couplage d’un graphe bi-parti de la mani`re suivante: soit e e e Y = {Y1 , . . . ,Ym }, Z ≡ X et (Yj ,xi ) ∈ Γ ⇔ xi ∈ Yj . Tout couplage sur (Y,Z,Γ) d´finit donc une bijection d’une partie de Y sur une partie de Z, e c’est-`-dire qu’` tout Yj correspond un ´l´ment bien d´fini de Z ≡ X (son ”repr´sentant”), et a a ee e e deux Yj distincts ont deux repr´sentants distincts. e c IFSIC 2004
  • 180.
    180 Flots dans un r´seau de transport e Consid´rons l’exemple suivant: e X = {Jean, Anita, Louis, Mireille, Albert, Patricia, Florent} et Y1 = {Jean, Anita, Louis} (moins de 20 ans) Y2 = {Mireille, Albert } (chˆmeurs) o Y3 = {Anita, Louis, Patricia } (amateurs de th´ˆtre) ea Y4 = {Mireille, Patricia } (m`res de famille) e Y5 = {Jean, Anita } (´tudiants) e Y6 = {Jean, Louis } (membres de l’association sportive) Y7 = {Mireille, Florent } (membres du comit´ d’action sociale) e (+Y5 ) (+Y5 ) (+Y1 ) (+Y4 ) (+Y2 ) (+Y3 ) Jean Anita Louis Mireille Albert Patricia Florent (-Je) Y1 × × (-Mi) Y2 × (-An) Y3 × × (-Pa) Y4 × (+e) Y5 × × (-Lo) Y6 × Y7 × Couplage initial (m´thode du coin Nord-ouest): v = 6. Ce couplage initial ne permet de choisir e que 6 repr´sentants (les ´tudiants ne sont pas repr´sent´s). Le marquage, effectu´ sur le tableau e e e e e ci-dessus, permet de marquer Albert, colonne non satur´e. Ce couplage n’est donc pas maximal. e La phase d’am´lioration donne le couplage ci-dessous, qui, lui, est maximal (valeur |Y |=7) e Jean Anita Louis Mireille Albert Patricia Florent Y1 × × Y2 × Y3 × × Y4 × Y5 × Y6 × Y7 × (en nous avons indiqu´ les nouvelles cases s´lectionn´es dans cette solution). e e e Jean repr´sente les moins de 20 ans e Anita ... les ´tudiants e Louis ... l’association sportive Mireille ... les m`res de famille e Albert ... les chˆmeurs o Patricia ... les amateurs de th´ˆtre ea Florent ... le comit´ d’action sociale e c IFSIC 2004
  • 181.
    Annexe A Les op´rationsde la classe GRAPHE e et leur s´mantique e Dans ce qui suit, un graphe non valu´ G est un doublet (X, Γ) et un graphe valu´ G est un e e triplet (X, Γ), v) Constructeur creer post vide G.creer cr´e un nouvel objet de type graphe, d´sign´ par G, vide e e e Op´rations de consultation (lecture) e Fonctions ` r´sultat bool´en a e e BOOL vide post Result ⇒ nm som=0 ∧ nb arc=0 BOOL validsom(SOMMET x) renvoie vrai ssi x est un sommet du graphe. BOOL validarc(SOMMET x, y) post validarc(x,y) ⇒ validsom(x) ∧ validsom(y) renvoie vrai ssi (x,y) est un arc du graphe Graphes valu´s e E v(SOMMET x, y) : E pre valid arc(x,y) v(x,y) = valeur de l’arc (x,y). c IFSIC 2004
  • 182.
    182 Les op´rations de la classe GRAPHE et leur s´mantique e e Fonctions ` r´sultat entier a e ENT nb som nombre de sommets ENT nb arc nombre d’arcs ENT nb succ(SOMMET x) pre validsom(x) renvoie le nombre de successeurs de x. ENT nb pred(SOMMET x) pre validsom(x) renvoie le nombre de pr´d´cesseurs de x. e e Parcours de l’ensemble des sommets BOOL som termine som termine = vrai ssi le parcours de l’ensemble des sommets est ´puis´. e e premier som premier som positionne le sommet courant sur le premier sommet. prochain som pre non som termine prochain som avance le sommet courant au prochain sommet. SOMMET som cour pre non som termine renvoie le sommet courant du parcours. Parcours de l’ensemble des arcs BOOL arc termine vrai ssi le parcours de l’ensemble des arcs est ´puis´. e e premier arc positionne l’arc courant sur le premier arc de l’ensemble des arcs. prochain arc pre non arc termine avance l’arc courant au prochain arc. ARC arc cour c IFSIC 2004
  • 183.
    183 pre non arc termine renvoie l’arc courant du parcours. Fonctions ` r´sultat ensemble de sommets a e ENS[SOMMET] ens som G.ens som = ensemble des sommets de G. ENS[SOMMET] lst succ(SOMMET x) pre validsom(x) G.lst succ(x) = Γ(x). ENS[SOMMET] lst pred(SOMMET x) pre validsom(x) G.lst pred(x) = Γ−1 (x). ENS[SOMMET] points entr´e e post x ∈ points entr´e ⇒ lst pred(x)=∅ e points entr´e = {x ∈ X | Γ−1 (x) = ∅}. e ENS[SOMMET] points sortie post x ∈ points sortie ⇒ lst succ(x)=∅ G.points sortie = {x ∈ X | Γ(x) = ∅}. Proc´dures de modification (´criture) e e Graphes non valu´s e ajout sommet(SOMMET x) post validsom(x) G.ajout sommet(x) ajoute le sommet x au graphe G. Sans effet si x est d´j` un sommet. ea ajout arc(SOMMET x,y) post validarc(x,y) G.ajout arc(x,y) ajoute les sommets x, y et l’arc (x,y) au graphe G. Sans effet si (x,y) est d´j` un arc. ea oter sommet(SOMMET x) pre non vide post non validsom(x) G.oter sommet(x) ˆte le sommet x et tous les arcs adjacents ` x o a . oter arc(SOMMET x,y) c IFSIC 2004
  • 184.
    184 Les op´rations de la classe GRAPHE et leur s´mantique e e pre non vide post non validarc(x,y) G.oter arc(x,y) ˆte l’arc (x,y). o sous graphe(ENS[SOMMET] E) pre non vide post x ∈ E ⇒ non validsom(x). G.sous graphe(E) ˆte de G tous les sommets appartenant ` E. o a Graphes valu´s e ajout val(SOMMET x, y; E ) post valid arc(x,y) ; v(x,y) = ajout val(x, y , ) ajoute l’arc (x,y) de valeur . Si l’arc existe d´j`, remplace sa valeur ea modif val(SOMMET x, y; E ) pre valid arc(x,y) post v(x,y) = modif val(x, y, ) modifie la valeur de l’arc. Invariants vide ⇒ arcvide arcvide ⇒ hors arc c IFSIC 2004
  • 185.
    Bibliographie [Ber70] C. Berge.Graphes et Hypergraphes. Dunod, 1970. [BLW76] N. L. Biggs, E. K. Llyod and R. J. Wilson. Graph Theory 1736-1936. Oxford University Press, 1976. [CP84] A. Couvert, R. Pedrono. Techniques de Programmation. Cours C 45, IFSIC, Universit´ e de Rennes, 1984. [Cri75] N. Christofides. Graph Theory ; an algorithmic approach. Academic Press, 1975. [Din70] Dinic, G. A. Algorithm for solution of a problem of maximum flow in a network with lower estimation. Soviet. Math. Dokl., 11:1277-1280, 1970. [EK72] Edmonds, J. and Karp, R. M. Theoretical improvements in algorithmic efficiency for network flow problems. J. ACM 19(2):248-264, 1972. [GM79] M. Gondran, M. Minoux. Graphes et Algorithmes. Eyrolles, 1979. [HP82] J. M. H´lary, R. Pedrono. Recherche Op´rationnelle : Exercices Corrig´s. Hermann, e e e 1982. [Kar74] Karzanov, A.V. Determining the maximal flow in a network by the method of preflows. Soviet. Math. Dokl., 15:434-437, 1974. [MKM78] Malhorta, M.V., Kumar, M.P., Mahes Hwari S.N. An algorithm for finding maximum flow in network. Inf. Proc. Letters, 7(6):277-278, 1978. [Ros83] ROSEAUX. Exercices et Probl`mes r´solus de Recherche Op´rationnelle, tome 1. e e e Masson, 1983. [Roy70] B. Roy. Alg`bre Moderne et Th´orie des Graphes, tomes 1 2. Dunod, 1970. e e c IFSIC 2004
  • 186.
    Index , 29 composantes fortement connexes : Foulkes, ←, 27 84 composantes fortement connexes : Tarjan, ajout sommet, 25 92 composantes fortement connexes : Tarjan ajoutarc, 25 (exemple), 88 Algorithme composantes fortements connexes : ascendants- τ -minimalit´, 80 e descendants, 86 ´num´ration des chemins ´l´mentaires (it´ratif), e e ee e composition +, 125 68 Descendants en largeur d’abord, 63 ´num´ration des chemins ´l´mentaires (r´cursif), e e ee e descendants en profondeur d’abord (r´cursif), e 69 65 Bellmann-Kalaba, 141 existence de circuits : Marimont, 73 Dijkstra, 154 exploration de la descendance d’un sommet Ford-Fulkerson, 173 (g´n´ral), 57 e e Ford-Fulkerson, am´lioration, 173 e Exploration en largeur d’abord, 59 Ford-Fulkerson, marquage, 172 Exploration en profondeur d’abord, 61 Kruskal, 150 fermeture transitive : puissances, 40, 41 Prim, 155 fermeture transitive : Roy-Warshall, 41, Roy-Warshall avec routage, 46 44 Roy-Warshall simplifi´, 95e glouton, 66, 112 ford, 141 heuristique, 141 chemins de valeur minimale : ordinal-racine, heuristique d’am´lioration, 106 e 121 num´rotation conforme avec parcours en e chemins de valeur minimale : ordinal-racine profondeur, 75 2, 123 Op´rateur ◦, 31 e chemins de valeur minimale : puissances, ordinal-racine, 141 124 saisie, 24 chemins de valeur minimale : Bellmann- sous graphe, 34 Kalaba, 109 transformation, 124, 128 chemins de valeur minimale : Bellmann- Anti-r´flexivit´, 18 e e Kalaba acc´l´r´, 112 ee e Anti-sym´trie, 18 e chemins de valeur minimale : Dijkstra, 116 Anti-transitivit´, 77 e chemins de valeur minimale : Ford, 105 Arˆte, 145 e chemins de valeur minimale : Warshall- Arborescence, 51 Floyd, 126 branche, 51 c IFSIC 2004
  • 187.
    INDEX 187 feuille, 51 Diagramme sagittal, 19 racine, 51 Dictionnaire des pr´d´cesseurs, 20 e e Arbre, 145 Dictionnaire des successeurs, 20 partiel de poids minimum, 148 Dio¨ 128 ıde, Arc, 15, 16 ∪ multiplication latine, 132 ´tat visit´, 53 e e × +, 132 capacit´, 157 e max ×, 130 charg´, 162 e max +, 130 extr´mit´, 16, 21 e e min ×, 131 flux, 157 min +, 130 origine, 16, 21 min max, 131 satur´, 162 e min min, 131 visit´, 53 e ET OU, 130 Attribut, 26 Dualit´, 161 e C++, 26 Eiffel, 26 Chaˆ 145 ıne, Exploration Chemin, 19 descendance d’un sommet, 53 ´l´mentaire, 19, 38 ee largeur d’abord, 58 concat´nation, 19 e meilleur d’abord, 113 existence, 37 profondeur d’abord, 59 longueur, 19, 106 Fermeture longueur maximum, 75 transitive, 38 valeur, 98 Flot, 158 valeur additive 1-minimale, 99 compatible, 158 valeur additive minimale, 99 complet, 167, 169 valeur minimale : routage, 126 valeur, 159, 160 valeur optimale, 98 PE complet, 167 PE ∗-optimal-∗, 99 Fonction PE ´l´mentaire, 49 ee injective, 75 PE extr´mit´, 19 e e Fonction ordinale, 74, 119 PE longueur, 33 Ford-Fulkerson PE origine, 19 algorithme, 162 PE sommet interm´diaire, 19 e am´lioration, 167 e PE x-optimal, 98 lemme, 161 PE x-optimal-y, 98 marquage, 162, 167, 169 Circuit, 19, 71 marquage arri`re, 162, 169 e ´l´mentaire, 19 ee marquage avant, 162, 169 absorbant, 103, 126 proc´dure d’am´lioration, 163, 170 e e hamiltonien, 93 th´or`me, 163 e e PE absorbant, 100 Classe, 26 G(X), 29 cr´er, 25 e Graphe Cycle, 145 τ -minimal, 49, 77, 93 c IFSIC 2004
  • 188.
    188 INDEX arborescence 1-minimale, 102 associatif, 30 bi-parti, couplage, 176 commutatif, 30 composante connexe, 145 composition, 30 connexe, 145 union, 29 d’´cart, exploration, 165 e PE compatible avec une relation, 30 d´veloppement arborescent, 51 e PE distributif, 30 diagonal, 30 Op´ration Θ, 41 e fermeture transitive, 37 Ordonnancement, 136 fortement anti-transitif, 78 au plus tard relativement ` une date finale, a nombre cyclomatique, 145 139 non orient´, 145 e marge libre dans un ordonnancement, 140 parcours, 53 marge par chemin, 140 parcours en profondeur, 102 PE au plus tˆt, 138 o partiel, 29 PE compatible, 136 potentiel-tˆche, 136, 138 a PE marge totale relativement ` une date finale, a puissance, 33 140 puissance, interpr´tation, 33 e r´duit selon les c.f.c, 82 e Probl`me e sous-graphe, 34 approvisionnement et demande, 157 transitif, 37 couplage bi-parti, 176 transpos´, 34 e syst`me de repr´sentants distincts, 179 e e valu´, 97 e Programmation dynamique, 110 PE composante fortement connexe terminale, Projet, 135 82 contrainte, 135, 136 PE composantes fortement connexes, 81 contrainte au plus tˆt, 135, 136, 141 o PE fortement connexe, 81 contrainte au plus tard, 135, 137 PE sous-graphe, 71 contrainte implicite, 137 contrainte redondante, 137, 142 Java, 26 contraintes, 137 contraintes d´terministes, 135 e Kirchoff contraintes implicites, 138 loi, 157 contraintes non d´terministes, 135 e Langage mod´lisation potentiel-tˆche, 136 e a objet, 26 tˆche, 135, 137 a Loi de composition R´flexivit´, 18 e e ´l´ment absorbant, 97 ee R´seau de transport, 157 e ´l´ment neutre, 97 ee bi-parti, 168 associative, 97 PE coupe, 161 M´thode, 26 e Relation Marimont, 72 ordre, 29 Multi-graphe, 15 ordre partiel, 29 Relation binaire, 16 Op´rateur e ´quivalence, 16 e c IFSIC 2004
  • 189.
    INDEX 189 ordre, 16 ´ Tableau booleen, 20 ordre partiel, 16 Transitivite´, 37 ordre total, 16 Turbo-Pascal, 26 pr´-ordre, 16 e Type PE ´quivalence, 49, 81 e arc, 21 Repr´sentation e file, 58 liste des sommets, 23 graphe, 24, 25 liste des successeurs, 23 ´ graphe, methodes, 24 tableau bool´en, 22 e pile, 59 Roy-Warshall, 71 sommet, 21, 23 Roy-Warshall, 41 table, 44 routage, 44 tas, 113 Type abstrait, 25 Simula, 26 SmallTalk, 26 Sommet, 15 ´ etat dehors, 53 ´ etat en attente, 53 ´ ´ etat termine, 53 ascendant, 19, 85 attributs minimaux, 100 ´ degre, 18 ´ ´ degre exterieur, 18 degre ´ interieur, 18 ´ descendant, 19, 53, 85 flux entrant, 159 flux sortant, 159 ´ numero, 21 ´ numerotation conforme, 75 ´ numerotation conforme inverse, 77 ´ point d’entree, 48 point de sortie, 48 ´ ´ predecesseur, 16 successeur, 16 ´ visite, 53 voisin, 145 PE anti-racine, 158 ´ PE point d’entree, 71 PE point de sortie, 71 PE puits, 158 PE racine, 158 PE source, 158 ´ Symetrie, 18 ´ τ -equivalence, 49 c IFSIC 2004