下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include <stdio.h> #include <math.h>#define TRUE 1#define FALSE 0 int N;/数据个数int K;/集合个数int * CenterIndex;/初始化质心数组的索引double * Center;/质心集合double * Cente
2、rCopy;/质心集合副本double * AllData;/数据集合double * Cluster;/簇的集合int * Top;/集合中元素的个数,也会用作栈处理/随机生成k个数x(0<=x<=n-1)作为起始的质心集合void CreateRandomArray(int n, int k,int * center) int i=0; int j=0; srand( (unsigned)time( NULL ) );
3、60; for( i=0;i<k;+i)/随机生成k个数 int a=rand()%n; /判重 for(j=0;j<i;j+)
4、 if(centerj=a)/重复 break;
5、0; if(j>=i)/如果不重复,加入 centeri=a; else
6、 i-; /如果重复,本次重新随机生成 /返回距离最小的质心的序号i
7、nt GetIndex(double value,double * center) int i=0; int index=i;/最小的质心序号 double min=fabs(value-centeri);/距质心最小距离 for(i=0;i<K;i+) if(fabs(value-centeri)<min)/如果比当前
8、距离还小,更新最小的质心序号和距离值 index=i; min=fabs(value-centeri);
9、 return index;/拷贝质心数组到副本void CopyCenter() int i=0; for(i=0;i<K;i+) CenterCopyi=Centeri; /初始化质心,随机生成法void InitCenter() int i=0;
10、CreateRandomArray(N,K,CenterIndex);/产生随机的K个<N的不同的序列 for(i=0;i<K;i+) Centeri=AllDataCenterIndexi;/将对应数据赋值给质心数组 CopyCenter();/拷贝到质心副本/加入一个数据到一个Clusterindex集合void AddToCluster(int i
11、ndex,double value) ClusterindexTopindex+=value;/这里同进栈操作/重新计算簇集合void UpdateCluster() int i=0; int tindex; /将所有的集合清空,即将TOP置0 for(i=0;i<K;i+)
12、160; Topi=0; for(i=0;i<N;i+) tindex=GetIndex(AllDatai,Center);/得到与当前数据最小的质心索引 AddToCluster(tindex,AllDatai); &
13、#160; /加入到相应的集合中 /重新计算质心集合,对每一簇集合中的元素加总求平均即可void UpdateCenter() int i=0; int j=0; double sum=0; for(i=0;i<K;i+) sum=0;
14、0; /计算簇i的元素和 for(j=0;j<Topi;j+) sum+=Clusterij;
15、60; if(Topi>0)/如果该簇元素不为空 Centeri=sum/Topi;/求其平均值 /判断2数组元素是否相等int IsEqual(double * center1
16、,double * center2) int i; for(i=0;i<K;i+) if(fabs(center1i!=center2i) ret
17、urn FALSE; return TRUE;/打印聚合结果void Print() int i,j; printf("- "); for(i=0;i<K;i+)
18、; printf("第%d组: 质心(%f) ",i,Centeri); for(j=0;j<Topi;j+) printf("%f ",Clusterij);
19、0; /初始化聚类的各种数据void InitData() int i=0; int a; printf("输入数据个数: ");
20、160; scanf("%d",&N); printf("输入簇个数: "); scanf("%d",&K); if(K>N)
21、60; exit(0); Center=(double *)malloc(sizeof(double)*K);/为质心集合申请空间 CenterIndex=(int *)malloc(sizeof(int)*K);/为质心集合索引申请空间 CenterCopy=(double *)malloc(sizeof(double)*K);/为质心集合副本申请空间 Top=(int *)malloc(sizeof(int)*
22、K); AllData=(double *)malloc(sizeof(double)*N);/为数据集合申请空间 Cluster=(double *)malloc(sizeof(double *)*K);/为簇集合申请空间 /初始化K个簇集合 for(i=0;i<K;i+) Clusteri=(double *)
23、malloc(sizeof(double)*N); Topi=0; printf("输入%d数据: ",N); for(i=0;i<N;i+) scanf("%d",&(a);
24、60; AllDatai=a; InitCenter();/初始化质心集合 UpdateCluster();/初始化K个簇集合 /*算法描述:K均值算法: 给定类的个数K,将N个对象分到K个类中去, 使得类内对象之间的相似性最大,而类之间的相似性最小。*/main() int Flag=1;/迭代标志,若为false,则迭代结束 int i=0; InitData();/初始化数据 while(Flag)/开始迭代
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年四川省评审专家考试题库(含答案)
- 2025年煤矿工人岗位职业安全操作基础知识培训试题库(附含答案)
- 2025年预防医学传染病防控常识考核卷及答案解析
- 2025年高职(港口与航道工程技术)航道建设阶段测试题及答案
- 公司财务经理工作总结及计划
- 2025年营业线施工安全培训试题题库(含参考答案)
- 2026年保山中医药高等专科学校单招职业技能笔试备考题库及答案详解
- 2026年德阳科贸职业学院高职单招职业适应性测试模拟试题及答案详解
- 2026年安徽现代信息工程职业学院高职单招职业适应性考试备考题库及答案详解
- 2026年广西演艺职业学院单招职业技能笔试备考题库及答案详解
- 医药代销协议书
- 我爱祖国山河课件
- 钢筋混凝土结构课程设计计算书
- 内蒙古中考数学三年(2023-2025)真题分类汇编:专题02 几何初步、相交线与平行线、概率与统计(解析版)
- 云南省2025年高二上学期普通高中学业水平合格性考试《信息技术》试卷(解析版)
- 产品知识培训会议总结
- 眼科进修结业汇报
- 专题11 圆(安徽专用)5年(2021-2025)中考1年模拟《数学》真题分类汇编
- 秀场内外-走进服装表演艺术知到智慧树期末考试答案题库2025年武汉纺织大学
- 酱牛肉制品加工工艺流程图
- 高分子材料完整版课件
评论
0/150
提交评论