#include "algo.h" #include #include /* lecture dans un fichier: on lit le nombre d'objets, le nombre de proprietes, puis on lit toutes les valeurs de la relation (0 ou 1) */ void algo::lecture(const string & nom_fic) { int nb_objets,nb_proprietes; fstream fic; int val; fic.open(nom_fic.c_str(),ios::in); if (fic.fail()) cout<<"fichier d'entree inexistant. "; else { fic>>nb_objets; fic>>nb_proprietes; for(int k=0;k objet; for(int j=0;j>val; objet.push_back(val); } relation_a_examiner.tableau.push_back(objet); } } } /* sauvegarde des résultats */ void algo::ecriture_resultats(const string & nom_fic) { ofstream fic; fic.open(nom_fic.c_str(),ios::out); concept conc,conc2; stack pile_inverse; // on a empilé les concepts dans l'ordre de leur génération // donc pour les stocker dans l'ordre de leur génération // on les met dans une autre pile en sens inverse while (treillis.size()!=0) { conc2=treillis.top(); pile_inverse.push(conc2); treillis.pop(); } while (pile_inverse.size()!=0) { conc=pile_inverse.top(); int vide=1; for(int j=0;j0) { switch(num%26) { case 0: { res=res+'z'; num=num-26; break; } case 1: { res=res+'a'; num=num-26; break; } case 2: { res=res+'b'; num=num-26; break; } case 3: { res=res+'c'; num=num-26; break; } case 4: { res=res+'d'; num=num-26; break; } case 5: { res=res+'e'; num=num-26; break; } case 6: { res=res+'f'; num=num-26; break; } case 7: { res=res+'g'; num=num-26; break; } case 8: { res=res+'h'; num=num-26; break; } case 9: { res=res+'i'; num=num-26; break; } case 10: { res=res+'j'; num=num-26; break; } case 11: { res=res+'k'; num=num-26; break; } case 12: { res=res+'l'; num=num-26; break; } case 13: { res=res+'m'; num=num-26; break; } case 14: { res=res+'n'; num=num-26; break; } case 15: { res=res+'o'; num=num-26; break; } case 16: { res=res+'p'; num=num-26; break; } case 17: { res=res+'q'; num=num-26; break; } case 18: { res=res+'r'; num=num-26; break; } case 19: { res=res+'s'; num=num-26; break; } case 20: { res=res+'t'; num=num-26; break; } case 21: { res=res+'u'; num=num-26; break; } case 22: { res=res+'v'; num=num-26; break; } case 23: { res=res+'w'; num=num-26; break; } case 24: { res=res+'x'; num=num-26; break; } case 25: { res=res+'y'; num=num-26; break; } } } return res; } /* partitionnement récursif : on passe l'ensemble à partitionner, l'intension de l'objet par rapport auquel on va partitionner et un vecteur dans lequel on va récupérer les feuilles de l'arbre d'execution correspondant à la partition finale */ void algo::partitionnement(const vector & ensemble_a_partitionner,const sous_relation & SR,const int & niveau,vector > &calcul_index) { /* à chaque étape, l'ensemble à partitionner va être divisé en deux: dans l'ensemble gauche on va mettre les propriétés qui appartiennent à l'objet considéré, et dans l'ensemble droite on va mettre les propriétés qui ne lui appartiennnent pas. On va appliquer à ces deux ensembles le même procédé en passant à l'objet suivant. Celui-ci s'arrêtera lorsqu'on aura considéré l'ensemble des objets ou lorsque l'ensemble à partitionner ne contiendra qu'une seule propriété. */ vector < int > droite; vector < int > gauche; /* test d'arrêt sur la taille de l'ensemble */ if (ensemble_a_partitionner.size()==1) { calcul_index.push_back(ensemble_a_partitionner); } else { // division de l'ensemble à partitionner en deux sous-partitions for(int i=0;i algo::marquer_dominants(const vector > & index, const sous_relation & SR) { vector < int > dominants; for(int k=0;k0;i--) for(int j=i-1;j>-1;j--) // on évite de calculer si un concept se domine lui-même if (i!=j) { int domine=1; for(int k=0;k marques) { vector successeurs; vector < vector < int > > index_partition; vector < int > dominants; treillis.push(conc); partitionnement(SR.proprietes,SR,0,index_partition); //test d'arrêt if (index_partition.size()!=0) { // marquage des dominants dominants=marquer_dominants(index_partition,SR); // test d'arrêt et lancement de l'algorithme sur les successeurs for(int m=0;m extens; vector intens; vector marques; sous_relation SR; int i,j; //initialisation //l'intension est vide for(i=0;i