Guys I have to implement two algorithm using Pseudocodes in order to genarate formal concepts... but the implemented code doesn't give the expected results i want ...
These are the two algorithms i wanted to implement and the expected result is
Concept - 1
[0,1,2,3,4]
[]
Concept - 2
[1,2,4]
[0,6]
Concept - 3
[0,2,3,4]
[1,5]
Concept - 4
[0,1,4]
[7]
Concept - 5
[2,4]
[0,1,5,6]
Concept - 6
[1,2]
[0,3,6]
Concept - 7
[1,4]
[0,6,7]
Concept - 8
[2]
[0,1,2,3,5,6]
Concept - 9
[4]
[0,1,4,5,6,7]
Concept - 10
[]
[0,1,2,3,4,5,6,7]
Concept - 11
[1]
[0,3,6,7]
Concept - 12
but i only get
can you guys check this and tell me what i am doing wrong?? the code is
const int MAXOBJECTS = 5;
const int MAXATTRIBUTES = 8;
int I[MAXOBJECTS][MAXATTRIBUTES]=
{{0,1,1,0,1,1,0,1},
{1,0,0,1,0,0,1,1},
{1,1,1,1,0,1,1,0},
{0,1,0,0,1,1,0,0},
{1,1,0,0,1,1,1,1},};
int A[MAXATTRIBUTES*MAXOBJECTS][MAXOBJECTS];
int B[MAXATTRIBUTES*MAXOBJECTS][MAXATTRIBUTES];
int rNew;
int size1[MAXATTRIBUTES*MAXOBJECTS];
int size2[MAXATTRIBUTES*MAXOBJECTS];
bool isCannonical(int r,int y)
{
int h;
for(int k =size2[r]-1;k>=0;k--)
{
for(int j = y;j>=B[r][k]+1;j--)
{
for(h =0;h<=size1[rNew]-1;h++)
{
if(I[A[rNew][h]][j]!=1)
break;
//if(h==size1[rNew])
//return false;
}
if(h==size1[rNew])
return false;
}
y=B[r][k]-1;
}
for(int j=y;j>=0;j--)
{
for(h =0;h<=size1[rNew]-1;h++)
{
if(I[A[rNew][h]][j]!=1)
break;
//if(h==size1[rNew])
//return false;
}
if(h==size1[rNew])
return false;
}
return true;
}
void InClose(int r,int y)
{
int i;
rNew = rNew + 1;
for(int j = y;j<MAXATTRIBUTES;j++)
{
for(int x=0;x<MAXOBJECTS;x++)
{
A[rNew][x]=-1;//0;
}
foreach(p1,A[r])
{
i = *p1;
if(I[i][j]==1)
{
A[rNew][size1[rNew]]=i;
size1[rNew]++;
}
}
if(size1[rNew]>0)
{
if(size1[rNew]==size1[r])
{
B[r][size2[r]++]=j;
}
else
{
if(isCannonical(r,j-1))
{
for(int x=0;x<size2[r];x++)
{
B[rNew][x]=B[r][x];
size2[rNew]++;
}
B[rNew][size2[rNew]++] = j;
InClose(rNew,j+1);
}
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
rNew=0;
for(int i =0;i<MAXOBJECTS;i++)
{
A[0][i] = i;
B[0][i] = -1;//0;
size1[0]=size1[0]+1;
}
size2[0]=0;
for(int i=1;i<MAXATTRIBUTES*MAXOBJECTS;i++)
{
size1[i]=0;
size2[i]=0;
}
InClose(0,0);
for(int h=0;h<rNew;h++)
{
printf("\n\nConcept No: %d\n",h);
printf("Objects : ");
for(int o=0;o<size1[h];o++)
{
if(A[h][o]!=-1)
printf(" %d ",A[h][o]);
}
printf("\nAttributes : ");
for(int o=0;o<size2[h];o++)
{
if(B[h][o]!=-1)
printf(" %d ",B[h][o]);
}
}
int a;
scanf("%d",&a);
return 0;
}