Arborescences



next up previous contents index
Next: Arborescence des plus Up: Graphes Previous: Listes de successeurs

Arborescences

 

    L'entier est appelé la profondeur du sommet dans l'arborescence. On montre facilement que dans une arborescence la racine n'admet pas de prédécesseur et que tout sommet différent de admet un prédécesseur et un seul, ceci implique:

La différence entre une arborescence et un arbre (voir chapitre 4) est mineure. Dans un arbre, les fils d'un sommet sont ordonnés (on distingue le fils gauche du fils droit), tel n'est pas le cas dans une arborescence. On se sert depuis fort longtemps des arborescences pour représenter des arbres généalogiques aussi le vocabulaire utilisé pour les arborescences emprunte beaucoup de termes relevant des relations familiales.         L'unique prédécesseur d'un sommet (différent de ) est appelé son père, l'ensemble , où , formant le chemin de à est appelé ensemble des ancêtres de , les successeurs de sont aussi appelés ses fils. L'ensemble des sommets extrémités d'un chemin d'origine est l'ensemble des descendants de ; il constitue une arborescence de racine , celle-ci est l'union de et des arborescences formées des descendants des fils de . Pour des raisons de commodité d'écriture qui apparaîtront dans la suite, nous adoptons la convention que tout sommet est à la fois ancêtre et descendant de lui-même.   Une arborescence est avantageusement représentée par le vecteur pere qui à chaque sommet différent de la racine associe son père. Il est souvent commode dans la programmation des algorithmes sur les arborescences de considérer que la racine de l'arborescence est elle-même son père, c'est la convention que nous adopterons dans la suite.

 
Figure: Une arborescence et son vecteur

La transformation des listes de successeurs décrivant une arborescence en le vecteur pere s'exprime très simplement en Pascal on obtient:  

type 
    Arbo = array[IntSom] of Sommet;
    procedure SuccEnPere (succ: GrapheSuc; n: integer; r: Sommet; 
                          var pere: Arbo);
        var
            k: integer;
            i, j: Sommet;
    begin
    pere[r] := r;
    for i := 1 to n do
        begin
        k := 1;
        j := succ[i, k];
        while (j <> Omega) do
            begin
            pere[j] := i;
            k := k + 1;
            j := succ[i, k];
            end;
        end;
    end;
  Dans la suite, on suppose que l'ensemble des sommets est l'ensemble des entiers compris entre et , une arborescence est dite préfixe si, pour tout sommet , l'ensemble des descendants de est un intervalle de l'ensemble des entiers dont le plus petit élément est .

 
Figure: Une arborescence préfixe

 
Figure: Emboitement des descendants dans une arborescence préfixe

Dans une arborescence préfixe, les intervalles de descendants s'emboîtent les uns dans les autres comme des systèmes de parenthèses; ainsi, si n'est pas un descendant de , ni un descendant de , les descendants de et de forment des intervalles disjoints. En revanche, si est un ancêtre de , l'intervalle des descendants de est inclus dans celui des descendants de .

  Preuve Pour trouver cette numérotation on applique l'algorithme récursif suivant:

La preuve de ce que la numérotation obtenue est préfixe se fait par récurrence sur le nombre de sommets de l'arborescence et utilise le caractère récursif de l'algorithme.

L'algorithme qui est décrit dans la preuve ci-dessus peut s'écrire simplement en Pascal, on suppose que l'arborescence est représentée par une matrice Succ de successeurs la re-numérotation se fait par un vecteur numero et r est la racine de l'arborescence.  

var
    numero: SomVect;
    succ: GrapheSuc;

procedure Numprefixe (x: Sommet; var num: integer);
    var
       i: integer;
       y: IntSom;
    begin
    numero[x] := num;
    num := num + 1;
    i := 1;
    y := succ[x, i];
    while (y <> Omega) do
        begin
        Numprefixe(y, num);
        i := i + 1;
        y := succ[x, i];
        end;
    end;
num := 1;
Numprefixe(r,num);


next up previous contents index
Next: Arborescence des plus Up: Graphes Previous: Listes de successeurs