⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.txt

📁 FCM程序实现
💻 TXT
字号:
#include 
#include 
#define TRUE 1 
#define FALSE 0 
int N;//数据个数 
int K;//集合个数 
int * CenterIndex;//初始化质心数组的索引
double * Center;//质心集合 
double * CenterCopy;//质心集合副本
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 ) ); 
for( i=0;i=i)//如果不重复,加入 
center[i]=a;
 else i--;//如果重复,本次重新随机生成 } 
} //返回距离最小的质心的序号
 int GetIndex(double value,double * center) 
{ 
int i=0; 
int index=i;//最小的质心序号
 double min=fabs(value-center[i]);//距质心最小距离 
for(i=0;i0)//如果该簇元素不为空 
Center[i]=sum/Top[i];//求其平均值
 } 
} 
int IsEqual(double * center1 ,double * center2)//判断2数组元素是否相等
 {
 int i; 
for(i=0;iN) 
{
 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)*K); 
AllData=(double *)malloc(sizeof(double)*N);//为数据集合申请空间 
Cluster=(double **)malloc(sizeof(double *)*K);//为簇集合申请空间 
//初始化K个簇集合 
for(i=0;i<K;i++)
 { 
Cluster[i]=(double *)malloc(sizeof(double)*N); 
Top[i]=0; 
} 
printf("输入%d数据: ",N); 
for(i=0;i<N;i++) 
{ 
scanf("%d",&(a)); AllData[i]=a;
 } 
InitCenter();//初始化质心集合
 UpdateCluster();//初始化K个簇集合 }
 /* 算法描述: K均值算法: 给定类的个数K,将N个对象分到K个类中去, 使得类内对象之间的相似性最大,而类之间的相似性最小。 */ 
main()
 { 
int Flag=1;//迭代标志,若为false,则迭代结束 
int i=0; 
InitData();//初始化数据 
while(Flag)//开始迭代
 { 
UpdateCluster();//更新各个聚类 
UpdateCenter();//更新质心数组 
if(IsEqual(Center,CenterCopy))//如果本次迭代与前次的质心聚合相等,即已收敛,结束退出
 {
 Flag=0; 
} 
else//否则将质心副本置为本次迭代得到的的质心集合
 { 
CopyCenter();//将质心副本置为本次迭代得到的的质心集合
 } 
} 
Print();//输出结果 
getchar();
 getchar(); 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -