Changes between Version 2 and Version 3 of CaoCourseTme6


Ignore:
Timestamp:
Mar 7, 2007, 7:01:30 PM (20 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CaoCourseTme6

    v2 v3  
    1010Les ROBDD (Reduced Ordered Binary Decision Diagram) sont utilisés pour représenter de façon compacte une ou plusieurs fonctions Booléennes, partageant le même support (c’est à dire dépendant d’un même ensemble de variables Booléennes). Pour un ordre donné des variables constituant le support, cette représentation est canonique : A chaque fonction Booléenne est associé un unique graphe orienté acyclique (DAG). Le graphe étant acyclique, chaque noeud BDD définit un sous-graphe dont il est la racine. Par conséquent, chaque noeud BDD correspond à une fonction Booléenne particulière. On utilise le fait que les variables Booléennes constituant le support sont ordonnées pour identifier ces variables par leur index.
    1111
    12 = A. Structures de données et fonctions de base =
     12= A) Structures de données et fonctions de base =
    1313
    1414La structure C permettant de représenter un noeud du graphe ROBDD est  définie de la façon suivante :
    … …  
    5252}}}
    5353
    54 = B.  Représentation Graphique =
     54= B)  Représentation Graphique =
    5555
    5656Soit la fonction Booléenne F(a,b,c,d,e), définie par l’expression suivante
    … …  
    6868'''B.2''' Précisez, pour chaque noeud du ROBDD ainsi construit, quelle est la fonction Booléenne représentée par ce noeud.
    6969
    70 = C. Fonctions not_bdd() et apply_bdd() =
     70= C) Fonctions not_bdd() et apply_bdd() =
    7171
    7272Les fonctions apply_bdd() et not_bdd() ont été présentées en cours. Vous trouverez le code de ces fonctions dans le fichier bdd.c.
    … …  
    8787Représentez graphiquement l’arbre d’appels des fonctions lorsqu’on appelle la fonction not_bdd() avec pour argument le pointeur p4. Quel est le nombre maximum d’appels de fonctions empilés sur la pile d’exécution? Combien de noeuds BDD vont être créés par la fonction create_bdd(), si on suppose que la structure de données ne contient initialement que les 5 noeuds pointés par p0, p1, p2, p3, et p4 au moment de l’appel de la fonction not_bdd(p4)?
    8888
    89 = D. Fonction abl2bdd() =
     89= D) Fonction abl2bdd() =
    9090
    9191On cherche à écrire la fonction abl2bdd(), qui construit automatiquement le graphe ROBDD représentant une fonction Booléenne F, à partir d’un arbre ABL représentant une expression Booléenne particulière de cette fonction F.
    … …  
    108108Modifier le code de la fonction, et validez ces modifications sur l’exemple de l’expression Booléenne E0, ou sur des expressions encore plus complexes.
    109109
    110 = E. Fonction satisfybdd() =
     110= E) Fonction satisfybdd() =
    111111
    112112Soit une fonction Booléenne quelconque F(x1, x2, x3, ... xn), dépendant de n variables. Soit la fonction Booléenne G, définie comme un produit (opérateur AND) d’un nombre queconque de variables xi (directes ou complémentées). On dit que G “satisfait” F sion a la relation G => F. (Autrement dit, si G = 1, alors F = 1). Remarquez que la condition G = 1 impose la valeur de toutes les variables appartenant au support de G (les variables directes doivent prendre la valeur 1, et les variables complémentées doivent prendre la valeur 0). Pour une fonction F donnée, il existe évidemment plusieurs
    … …  
    131131'''E.2''' Ecrire, en langage C, le code de la fonction satisfy_bdd(), et appliquez-la sur la fonction Booléenne F définie dans la partie, en modifiant le programme main de la fonction précédente.
    132132
    133 = F. Fonction bdd2abl() =
     133= F) Fonction bdd2abl() =
    134134
    135135On souhaite pour finir écrire la fonction bdd2abl(), qui construit automatiquement un arbre ABL représentant une expression Booléenne multi-niveaux, à partir d'un ROBDD représentant une fonction Booléenne.