数据挖掘中的Apriori算法(C语言版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/* 这个程序是数据挖掘中的Apriori算法*/

#include

#include

#define D 9 /*D数事务的个数*/

#define MinSupCount 2 /*最小事务支持度数*/

void main()

{

/*这里的a,b,c,d,e 分别代表着书上数据挖掘那章的I1,I2,I3,I4,I5 */

char a[10][10]={

{'a','b','e'},

{'b','d'},

{'b','c'},

{'a','b','d'},

{'a','c'},

{'b','c'},

{'a','c'},

{'a','b','c','e'},

{'a','b','c'}

};

char b[20],d[100],t,b2[100][10],b21[100][10];

int

i,j,k,x=0,flag=1,c[20]={0},x1=0,i1=0,j1,counter=0,c1[100]={0},flag1=1,j2,u=0,c2[100]={0},n[20 ],v=1;

int count[100],temp;

for(i=0;i

{

for(j=0;a[i][j]!='\0';j++)

{

/*这个循环是用来判断之前保存的是否和a[i][j]一样,不一样就保存,一样就不保存*/

for(k=0;k

{

if(b[k]!=a[i][j]) ;

else

{

flag=0;break;

}

}

/*这个if是用来判断是否相等*/

if(flag==1)

{

b[x]=a[i][j];

x++;

}

else flag=1;/*这个不保存,那就跳到下一个数*/

}

}

/*计算筛选出的元素的支持度计数*/

for(i=0;i

{

for(j=0;a[i][j]!='\0';j++)

{

for(k=0;k

{

if(a[i][j]==b[k])

{

c[k]++;break;

}

}

}

}

/*对选出的项集进行筛选,选出支持度计数大于2的,并且保存到d[x1]数组中*/

for(k=0;k

{

if(c[k]>=MinSupCount)

{

d[x1]=b[k];

count[x1]=c[k];

x1++;

}

}

/*对选出的项集中的元素进行排序*/

for(i=0;i

{

for(j=0;j

{

if(d[j]>d[j+1])

{

t=d[j];d[j]=d[j+1];d[j+1]=t;

temp=count[j];count[j]=count[j+1];count[j+1]=temp;

}

}

}

/*打印出L1*/

printf("L1 elements are:\n");

for(i=0;i

{

printf("{%c} = %d ",d[i],count[i]);

if(0==(i+1)%3) printf("\n");

}

printf("\b \n");

/*计算每一行的元素个数,并且保存到n[]数组中*/

for(i=0;i

{

for(j=0;a[i][j]!='\0';j++);

n[i]=j;

}

/*对a[][]数组的每一行进行排序*/

for(i=0;i

{

for(j=0;j

{

for(k=0;k

{

if(a[i][k]>a[i][k+1])

{

t=a[i][k];

a[i][k]=a[i][k+1];

a[i][k+1]=t;

}

}

}

}

/*把L1中的每一个元素都放在b2[i][0]中*/

j1=x1;

for(i=0;i

{

b2[i][0]=d[i];

}

/*把L1中的元素进行组合,K=2开始,表示x1个元素选K个元素的组合*/

for(k=2;b2[0][0]!='\0';k++)

{ /*u是用来计数组合总数的*/

u=0;v=1;/*v 是用来在进行输出各种组合的标识数v=1 说明正在进行输出*/ for(i=0;i<100;i++)

{

c2[i]=0;

}

for(i=0;i

{

for(i1=i+1;i1

{

for(j=0;j

{

if(b2[i][j]!=b2[i1][j])

{

flag1=0;break;

}

}

/*进行组合的部分*/

if(flag1==1&&b2[i][k-2]!=b2[i1][k-2])

{

for(j2=0;j2

{

b21[u][j2]=b2[i][j2];

}

b21[u][k-1]=b2[i1][k-2];

u++;

}

flag1=1;

}

}

counter=0;

for(i=0;i

{

for(i1=0;i1

for(j1=0;j1

{

for(j=0;a[i][j]!='\0';j++)/*逐个比较每一行的元素*/

{

if(a[i][j]==b21[i1][j1]) counter++;

}

}

if(counter==k) c2[i1]++; /*把每种组合数记录在c2数组中*/

counter=0;

}

}

相关文档
最新文档