Diagramme de décision binaire

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir BDD.
Exemple de diagramme de décision binaire

Un diagramme de décision binaire (BDD pour Binary Decision Diagram en anglais) est une structure de données utilisée pour représenter des fonctions booléennes.

Description[modifier | modifier le code]

Une fonction booléenne peut être représentée par un graphe orienté acyclique avec une racine consistant en nœuds de décisions, et deux nœuds terminaux appelés 0-terminal et 1-terminal. Chaque nœud de décision est étiqueté par une variable booléenne et a deux nœuds fils, appelés fils bas et fils haut. L'arête d'un nœud à un fils bas (resp. haut) représente l'affectation de la variable à 0 (resp. 1). Un tel BDD est « ordonné » si toutes les variables apparaissent dans le même ordre sur tous les chemins depuis la racine vers les nœuds terminaux. Il est « réduit » si le graphe est réduit selon deux règles :

  • tous les sous-graphes isomorphes ont une représentation unique ;
  • tous les nœuds dont les deux fils sont isomorphes sont éliminés.

Dans son usage courant, le terme diagramme de décision binaire réfère pratiquement tout le temps à un diagramme de décision binaire ordonné réduit (ROBDD pour Reduced Ordered Binary Decision Diagram). L'avantage d'un ROBDD est qu'il est canonique (unique) pour une fonction booléenne donnée. Cette propriété le rend utile, par exemple, pour la vérification d'équivalence fonctionnelle (qui se traduit par l'égalité des ROBDD associés, laquelle peut être évaluée en temps constant).

Un chemin de la racine au nœud 1-terminal représente une affectation de variable (partielle ou pas) pour laquelle la fonction booléenne représentée est vraie. Quand le chemin descend d'un nœud vers un fils bas (resp. fils haut), on affecte à la variable représentée par ce nœud la valeur 0 (resp. 1).

Utilisations[modifier | modifier le code]

Les diagrammes de décision binaires sont très utilisés par les programmes de conception assistée par ordinateur (CAD) pour générer des circuits (synthèse logique), et dans la vérification formelle.

Notes et références[modifier | modifier le code]