Advertisement
Guest User

Untitled

a guest
Dec 21st, 2014
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.55 KB | None | 0 0
  1. sAutoNDE Minimize(const sAutoNDE& at)
  2. {
  3.    
  4.     assert(EstDeterministe(at));
  5.     sAutoNDE res;
  6.     vector<etatset_t> classes ;
  7.     int nb_classes = 2;
  8.     classes.resize(nb_classes);
  9.     etatset_t etats_utiles;
  10.  
  11.     etats_utiles = depuisInitial(at);
  12.  
  13.     for (etatset_t::const_iterator it = etats_utiles.begin(); it != etats_utiles.end(); it++)
  14.     {
  15.         if (at.finaux.find(*it)!=at.finaux.end())
  16.         {
  17.             classes[0].insert(*it);
  18.         }
  19.         else
  20.         {
  21.             classes[1].insert(*it);
  22.         }
  23.     }
  24.     if (classes[0].size()==0)
  25.     {
  26.         cout<<"Aucun etat final";
  27.     }
  28.     unsigned int classe_etudie = 0;
  29.     etatset_t::const_iterator it ;
  30.     etatset_t nouvelle_classe;
  31.     cout <<"phase compliqué"<<endl;
  32.     while (classe_etudie != classes.size())
  33.     {
  34.         classes.resize(nb_classes);
  35.         cout<<"size de classes : "<<classes.size()<<endl;
  36.         etatset_t nouvelle_classe;
  37.         cout <<"j'étudie la classe : "<<classe_etudie<<endl;
  38.         it = classes[classe_etudie].begin();
  39.         for (etatset_t::const_iterator it =  classes[classe_etudie].begin(); it != classes[classe_etudie].end(); it++)
  40.         {
  41.             cout <<"j'etudie l'etat : "<<*it<<endl;
  42.             for (symb_t s = 0; s<at.nb_symbs; s++)
  43.             {
  44.                 cout <<"Je parcours tout les symboles"<<endl;
  45.                 if(*at.trans[*it][s].begin() != *at.trans[*classes[classe_etudie].begin()][s].begin())
  46.                 {
  47.                     cout <<"On a trouvé un élément différent"<<endl;
  48.                     nouvelle_classe.insert(*it);
  49.                 }
  50.             }
  51.         }
  52.         // ici on fait une nouvelle classe si nouvelle classe non vide
  53.         if (nouvelle_classe.size()!=0)
  54.         {
  55.             cout <<"on ajoute une classe"<<endl;
  56.             classes.push_back(nouvelle_classe);
  57.             for(etatset_t::const_iterator it =  nouvelle_classe.begin(); it != nouvelle_classe.end(); it++)
  58.             {
  59.                 classes[classe_etudie].erase(*it);
  60.             }
  61.             nouvelle_classe.clear();
  62.  
  63.             classe_etudie = 0;
  64.             nb_classes++;
  65.         }
  66.         else
  67.         {
  68.             classe_etudie++;
  69.         }
  70.  
  71.     }
  72.     res.nb_etats = classes.size();
  73.     res.nb_symbs = at.nb_symbs;
  74.     res.nb_finaux = 0;
  75.     for (unsigned int i = 0; i<classes.size(); i++)
  76.     {
  77.         for(etatset_t::const_iterator it =  classes[i].begin(); it != classes[i].end(); it++)
  78.         {
  79.             for(etatset_t::const_iterator final =  at.finaux.begin(); final != at.finaux.end(); final++)
  80.             {
  81.                 if(classes[i].find(*final)!=classes[i].end())
  82.                 {
  83.                     res.finaux.insert(i);
  84.                     res.nb_finaux++;
  85.                 }
  86.             }
  87.             if(*it == at.initial)
  88.             {
  89.                 res.initial = i;
  90.             }
  91.         }
  92.     }
  93.     res.epsilon.resize(res.nb_etats);
  94.     res.trans.resize(res.nb_etats);
  95.     for(size_t i=0; i<res.nb_etats; ++i)
  96.         res.trans[i].resize(res.nb_symbs);
  97.  
  98.     for (unsigned int i = 0; i<classes.size(); i++)
  99.     {
  100.         etat_t  courant= *classes[i].begin();
  101.         // on cherche dans quelle classe il mène
  102.  
  103.         for(symb_t s = 0; s<at.nb_symbs;s++)
  104.         {
  105.             for(unsigned int j =0;j<classes.size();j++)
  106.             {
  107.                 if(classes[j].find(*at.trans[courant][s].begin()) !=classes[j].end())
  108.                 {
  109.                     res.trans[i][s].insert(j);
  110.                 }
  111.             }
  112.         }
  113.  
  114.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement