LexBFSLexBFS, ou parcours en largeur lexicographique est un algorithme de théorie des graphes. C'est un raffinement de l'algorithme de parcours en largeur (BFS pour Breadth First Search en anglais). Ce parcours est très utile pour étudier certaines classes de graphes et pour obtenir des algorithmes de reconnaissance rapides de ces classes. ContexteL'algorithme de parcours en largeur (Breadth First Search algorithm ou BFS) est usuellement défini de la manière suivante:
Cependant, plutôt que de définir le sommet à choisir à chaque itération d'une manière impérative (comme on le fait par l'opération défiler), la même suite de sommets peut être définie de manière déclarative par les propriétés de ces sommets. Autrement dit, un parcours en largeur standard est produit par la répétition de la règle suivante:
Dans certains cas, cet ordonnancement des sommets par l'ordre de choix de leurs prédécesseurs peut mener à des égalités (plusieurs sommets peuvent avoir le même premier prédécesseur). Dans ce cas, l'ordre dans lequel on choisit ces sommets peut être arbitraire. L'ordre de choix du LexBFS diffère d'un parcours en largeur standard en résolvant ces égalités par une règle systématique. En effet, dans le parcours en largeur lexicographique, l'ordre de choix est produit par la règle suivante:
Autrement dit, si deux sommets v et w ont le même premier prédécesseur (choisi avant tout prédécesseur de tout autre sommet encore non-choisi), LexBFS choisit entre v et w en fonction de l'ordre de leur second prédécesseur. Si v et w ont le même second prédécesseur, alors l'égalité est résolue en considérant leur troisième prédécesseur et ainsi de suite. Utiliser directement cette règle d'ordonnancement mènerait à un algorithme inefficace, c'est pourquoi le parcours en largeur lexicographique utilise une structure de données adaptée pour produire l'ordonnancement efficacement, de la même manière qu'un parcours en largeur standard utilise une structure de données de file pour produire un ordre efficacement. DescriptionDescription simplifiéeLe principe est grossièrement de faire un parcours en largeur en privilégiant les nœuds qui sont les moins « récemment vus ». Un pseudo code est le suivant, pour un graphe de n nœuds[1] :
Description détailléeLe parcours en largeur lexicographique remplace la file d'un parcours en largeur standard par une suite ordonnée d'ensembles de sommets. Les ensembles de la suite réalisent une partition de l'ensemble des sommets non-encore choisis. À chaque étape, un sommet v du premier ensemble de la suite est retiré de cet ensemble, et si cet ensemble est maintenant vide, il est retiré de la suite. Ensuite, tout ensemble de la suite est partitionné en deux sous-ensembles: les voisins de v et les autres sommets, non-voisins de v. Le sous-ensemble des voisins est placé avant le sous-ensemble des non-voisins dans la liste. En pseudo-code, l'algorithme peut être exprimé de la manière suivante:
Chaque sommet est traité une seule fois, chaque lien est traité lorsque ses deux extrémités ont été traitées. Avec une représentation adaptée de la suite d'ensembles Σ, qui permet de déplacer les éléments d'un ensemble à un autre en temps constant, chaque itération de la boucle intérieure est réalisée en temps constant. Donc cet algorithme peut être réalisé en temps linéaire. ApplicationsLexBFS permet notamment de reconnaître les graphes cordaux en temps linéaire[1]. Voir aussiNotes et références
|