博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apriori算法的C/C#实现
阅读量:7121 次
发布时间:2019-06-28

本文共 4562 字,大约阅读时间需要 15 分钟。

hot3.png

Apriori算法的C/C#实现

最近研究Web数据挖掘常用算法。主要参考书是:

web数据挖掘/刘兵

数据结构/严蔚敏

c语言程序设计/谭浩强

对于c#实现参考

c语言实现部分

我把程序发到了csdn

数据结构的选取,还做得不太好,会继续改进,请大牛多多指点。

之后我会比较C#与C的Apriori程序,总结一些区别,谈谈面向对象编程在这个算法上的体现与数据结构的选择问题。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 #define ItemNumSize 2 8 #define TranNumSize 100 9 #define LISTINCREMENT 1 10 #define OK 1 11 #define TRUE 1 12 #define FASLE 0 13 #define ERROR 0 14 #define MAX_ARRAY_DIM 100 15 #define MAXSIZE 100 16 typedef char ItemType; 17 typedef int ElemType; 18 float minSupport,minConfidence; 19 //动态内存分配,item用什么数据结构 动态数组,线性表好:数组是整体创建,整体删除的 20 typedef struct 21 { 22 ItemType *item;//项目 23 int length;//当前项目个数 24 int listsize;//当前分配的存储容量 25 }SqList; 26 //事务数组集合 27 typedef struct 28 { 29 SqList r[MAXSIZE+1]; 30 int Length; 31 }TranList; 32 33 //初始化项目的线性表 34 int InitListSq(SqList &L) 35 { 36 L.item=(ItemType * )malloc(ItemNumSize *sizeof(ItemType)); 37 if (!L.item)exit(OVERFLOW);//存储分配失败 38 L.length=0;//空表长度为0 39 L.listsize=ItemNumSize;//初始化存储容量 40 return OK; 41 } 42 //初始化事务的线性表 43 int InitListTran(TranList &TranL)//还有更好的动态分配方式初始化 44 { 45 for (int i=1;i<=TranNumSize;i++) 46 { 47 InitListSq(TranL.r[i]); 48 } 49 return OK; 50 } 51 //插入项目线性表 52 int listInsertSq(SqList &L,int i,ItemType e) 53 { 54 //在线性表L中第i个位置之前插入新元素e 55 //i的合法值为1<=i<=l.listlength+1 56 ItemType *newbase,*q,*p; 57 if(i<1||i>L.length+1)return ERROR;//i值不合法 58 if (L.length>=L.listsize)//当前存储空间已满,添加分配 59 { 60 //重新分配内存空间 61 newbase=(ItemType *)realloc(L.item,(L.listsize+LISTINCREMENT)*sizeof(ItemType)); 62 if (!newbase)exit(OVERFLOW); 63 L.item=newbase;//新基址 64 L.listsize+=LISTINCREMENT;//增加存储容量 65 } 66 q=&(L.item[i-1]);//q为插入位置 67 for(p=&(L.item[L.length-1]);p>=q;--p) 68 *(p+1)=*p;//插入位置,及之后的元素右移 69 *q=e; 70 ++L.length; 71 return OK; 72 } 73 void main() 74 { 75 int c; 76 ItemType e; 77 SqList L; 78 int sn; 79 int ItemNum; //项目个数 80 int trannum[20]={0}; //事务数量 81 char b2[100][10]; 82 char b21[100][10]; 83 TranList TranL; 84 SqList L1; 85 InitListSq(L); 86 InitListTran(TranL); 87 printf ("链表长度:%d\n", L.length); // 线性表当前的元素个数 88 printf ("链表大小:%d\n", L.listsize); // 线性表最多可存放元素的个数 89 while (1) 90 { 91 system("cls"); 92 printf_s("\n Apriori算法的C语言实现\n"); 93 printf_s(" 1 输入项目集合\n"); 94 printf_s(" 2 添加事务\n"); 95 printf_s(" 3 设定最小支持度与最小置信度\n"); 96 printf_s(" 4 输出结果\n"); 97 printf_s(" 5 退出\n"); 98 printf_s("请输入:\n"); 99 scanf_s("%d",&c);100 switch (c)101 {102 case 1://构造项目集103 {104 int it;105 char ItemValue;106 system("cls");107 printf_s("构造项目集\n");108 printf_s("请输入项目个数:\n");//项目个数109 scanf_s("%d",&ItemNum);110 for (it=1;it<=ItemNum;it++)//依次输入每个项目集111 {112 fflush(stdin);113 printf_s("\n请输入第%d个项目的字母(a,b,c,d,e,f,……):\n",it);114 scanf("%c",&ItemValue);115 listInsertSq(L,it,ItemValue);116 }117 printf_s("\n初始化后,项目集各元素值:\n");118 for (int i=0;i
=minSupport*trannum[i+1])//两个整数相除得到整数192 {193 f[i]=c[i];194 listInsertSq(L1,jj,L.item[i]);//L1195 jj++;196 }197 }198 printf_s("F1集合为:\n");199 int temp1=0;200 for (int i=0;i
TranL.r[i].item[j+1])215 {216 t=TranL.r[i].item[j];217 TranL.r[i].item[j]=TranL.r[i].item[j+1];218 TranL.r[i].item[j]=t;219 }220 }221 }222 //GenerateCandidates函数223 int j1;224 j1=L1.length;225 //把L1->b2[i][]226 for (int i=0;i
generatedCandidate[i+1])245 {246 temp=generatedCandidate[i];247 generatedCandidate[i]=generatedCandidate[i+1];248 generatedCandidate[i+1]=temp;249 }250 }251 }252 }253 }254 int u=0;255 int v=1;//用V来进行输出各种组合的标识数V=1表示正在进行输出256 int c2[100]={0};257 int flag1=1;258 int counter=0;259 int temp;260 //getsupport261 for (int k=2;b2[0][0]!='\0';k++)262 {263 u=0;v=1;264 for (int i=0;i<100;i++)265 {266 c2[i]=0;267 }268 for (int i=0;i
=minSupport)317 {318 if (v==1)319 {320 printf_s("\nF%d集合为:\n",k);321 v=0;322 }323 printf_s("{");324 for (int j=0;j

转载于:https://my.oschina.net/u/725447/blog/73948

你可能感兴趣的文章
adt 22.6出现的问题
查看>>
Struts2(补充)
查看>>
Linux文件系统的目录结构详解
查看>>
MySQL server PID file could not be found!
查看>>
洛谷 P3049园林绿化 题解
查看>>
eclipse New菜单项的显示问题
查看>>
python3常用内置函数总结
查看>>
二分法在生活中的一次应用
查看>>
iOS7新特性的兼容性处理方法 之三
查看>>
转载:Python正则表达式
查看>>
UVA10140 Prime Distance
查看>>
.NET深入 c#数据类型2
查看>>
DIV+CSS颜色边框背景等样式
查看>>
HDU 1018 Big Number【斯特林公式/log10 / N!】
查看>>
nefu 115
查看>>
drf版本控制 和django缓存,跨域问题,
查看>>
SVN环境搭建详解(来源网络)
查看>>
设备驱动基础学习--字符驱动实现
查看>>
sourceinsight安装记录
查看>>
PHP函数索引-F
查看>>