Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sAutoNDE Minimize(const sAutoNDE& at)
- {
- assert(EstDeterministe(at));
- sAutoNDE res;
- vector<etatset_t> classes ;
- int nb_classes = 2;
- classes.resize(nb_classes);
- etatset_t etats_utiles;
- etats_utiles = depuisInitial(at);
- for (etatset_t::const_iterator it = etats_utiles.begin(); it != etats_utiles.end(); it++)
- {
- if (at.finaux.find(*it)!=at.finaux.end())
- {
- classes[0].insert(*it);
- }
- else
- {
- classes[1].insert(*it);
- }
- }
- if (classes[0].size()==0)
- {
- cout<<"Aucun etat final";
- }
- unsigned int classe_etudie = 0;
- etatset_t::const_iterator it ;
- etatset_t nouvelle_classe;
- cout <<"phase compliqué"<<endl;
- while (classe_etudie != classes.size())
- {
- classes.resize(nb_classes);
- cout<<"size de classes : "<<classes.size()<<endl;
- etatset_t nouvelle_classe;
- cout <<"j'étudie la classe : "<<classe_etudie<<endl;
- it = classes[classe_etudie].begin();
- for (etatset_t::const_iterator it = classes[classe_etudie].begin(); it != classes[classe_etudie].end(); it++)
- {
- cout <<"j'etudie l'etat : "<<*it<<endl;
- for (symb_t s = 0; s<at.nb_symbs; s++)
- {
- cout <<"Je parcours tout les symboles"<<endl;
- if(*at.trans[*it][s].begin() != *at.trans[*classes[classe_etudie].begin()][s].begin())
- {
- cout <<"On a trouvé un élément différent"<<endl;
- nouvelle_classe.insert(*it);
- }
- }
- }
- // ici on fait une nouvelle classe si nouvelle classe non vide
- if (nouvelle_classe.size()!=0)
- {
- cout <<"on ajoute une classe"<<endl;
- classes.push_back(nouvelle_classe);
- for(etatset_t::const_iterator it = nouvelle_classe.begin(); it != nouvelle_classe.end(); it++)
- {
- classes[classe_etudie].erase(*it);
- }
- nouvelle_classe.clear();
- classe_etudie = 0;
- nb_classes++;
- }
- else
- {
- classe_etudie++;
- }
- }
- res.nb_etats = classes.size();
- res.nb_symbs = at.nb_symbs;
- res.nb_finaux = 0;
- for (unsigned int i = 0; i<classes.size(); i++)
- {
- for(etatset_t::const_iterator it = classes[i].begin(); it != classes[i].end(); it++)
- {
- for(etatset_t::const_iterator final = at.finaux.begin(); final != at.finaux.end(); final++)
- {
- if(classes[i].find(*final)!=classes[i].end())
- {
- res.finaux.insert(i);
- res.nb_finaux++;
- }
- }
- if(*it == at.initial)
- {
- res.initial = i;
- }
- }
- }
- res.epsilon.resize(res.nb_etats);
- res.trans.resize(res.nb_etats);
- for(size_t i=0; i<res.nb_etats; ++i)
- res.trans[i].resize(res.nb_symbs);
- for (unsigned int i = 0; i<classes.size(); i++)
- {
- etat_t courant= *classes[i].begin();
- // on cherche dans quelle classe il mène
- for(symb_t s = 0; s<at.nb_symbs;s++)
- {
- for(unsigned int j =0;j<classes.size();j++)
- {
- if(classes[j].find(*at.trans[courant][s].begin()) !=classes[j].end())
- {
- res.trans[i][s].insert(j);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement