数据挖掘中的Apriori算法(C语言版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; } }