下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年生物化学基础知识练习题集
- 2026年物流与供应链管理专业能力测试题
- 2026年孕妇产前检查及产后急症处理实操题库
- 2026年绿色建筑设计与节能减排技术题库
- 2026年绿色建筑设计与节能技术实践题库
- 2026届湖南省三湘名校生物高一第一学期期末学业质量监测模拟试题含解析
- 2026年当代广告设计与创意思路操作题集
- 2026年智能交通系统设计与优化测试题库
- (2026年)血液透析通路及并发症处理课件
- 2026年大数据分析与处理技巧练习题
- 消防知识培训宣传课件
- 2025-2026学年通-用版英语 高一上学期期末试题(含听力音频答案)
- 2025年国家基本公共卫生服务考试试题(附答案)
- 25秋苏教三年级上册数学期末押题卷5套(含答案)
- 局部晚期肿瘤免疫放疗新策略
- 食品加工厂乳制品设备安装方案
- 高考英语3500词分类整合记忆手册(含完整中文释义)
- 鲁教版(2024)五四制英语七年级上册全册综合复习默写 (含答案)
- 内分泌科ICD编码课件
- 中医护理案例分享
- 骨密度检测的临床意义
评论
0/150
提交评论