Changes between Version 1 and Version 2 of 2010CaoTme4


Ignore:
Timestamp:
Apr 1, 2010, 5:38:06 PM (15 years ago)
Author:
jpc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • 2010CaoTme4

    v1 v2  
    11{{{
    22#!html
    3 <h1>TME 4 : Représentation des fonctions Boolèennes : ROBDD</h1>
     3<h1>TME 6 : Représentation des fonctions Boolèennes : ROBDD</h1>
    44}}}
    55[[PageOutline]]
     
    4747           Bdd*               _high;     // Low cofactor pointer.
    4848           Bdd*               _low;      // High cofactor pointer.
    49            unsigned           _stamp;    // Used to flag already reached nodes in the DAG recursive walktrhough.
     49           unsigned           _stamp;    // Used to flag already reached nodes in the DAG
     50                                         // recursive walktrhough.
    5051  public:                     
    5152    static Bdd*               ConstHigh;
     
    8687}}}
    8788
    88  * Le constructeur  {{{Bdd::create()}}}, alloue un nouveau  noeud BDD et  l'ajoute dans le
     89 * Le constructeur  {{{Bdd::Bdd()}}}, alloue un nouveau  noeud BDD et  l'ajoute dans le
    8990   dictionnaire des noeuds BDD.
    9091
     
    147148
    148149
     150= B) Dictionnaire de BDD =
     151
     152Comme  il a  été montré  en cours,  une expression  booléenne sous  la forme  canonique de
     153Shannon est associée à un et un seul ROBDD. Celui-çi étant entièrement caractérisé par son
     154triplet {{{(_index,_high,_low)}}}.  Lorsque la méthode {{{Bdd::create()}}}  est appelée il
     155faut qu'elle puisse déterminer rapidement si un ROBDD existe ou non.
     156
     157Le conteneur  approprié pour ce type  d'opération est la  {{{stl::map<>}}}. La {{{map<>}}}
     158associe  une valeur  (le  pointeur sur  le  ROBDD) à  une  clé (le  triplet).  Elle à  les
     159propriétés suivantes:
     160
     161 * Une clé d'une valeur donnée sera  présente en un unique exemplaire dans la {{{map<>}}},
     162   et sera associée à une unique valeur.
     163
     164 * On peut retrouver très efficacement une valeur en fonction d'une clé.
     165
     166 * N'importe quel  objet (classe) peut  servir de clé  ''sous réserve'' de  disposer d'une
     167   fonction  d'ordre.    C'est  à  dire   de  disposer  d'une  surcharge   de  l'operateur
     168   ''strictement inférieur''.
     169
     170La  définition  de  la classe  {{{Bdd}}}  comporte  donc  une classe  imbriquée  {{{Key}}}
     171représentant  le triplet  et  proposant une  fonction  d'ordre. La  relation d'ordre  sera
     172simplement l'ordre lexicographique du triplet. Soit:
     173
     174{{{
     175if ( lhs->_index != rhs->_index ) return lhs->_index < rhs->_index;
     176
     177if ( lhs->_high->getIndex() != rhs->_high->getIndex() )
     178  return lhs->_high->getIndex() < rhs->_high->getIndex();
     179
     180return lhs->_low->getIndex() < rhs->_low->getIndex();
     181}}}
     182
     183
     184
    149185= B)  Représentation Graphique =
    150186