资源简介
用C语言写的K-means聚类算法,有助于初学者的学习使用
代码片段和文件信息
#include
#include
using namespace std;
int main()
{
int point[10][3]={{000}{535}{754}{545}{386}{487}{646}{113}{634}{224}};
int z[10][3]={0};
z[0][0]=point[0][0];
z[0][1]=point[0][1];
z[0][2]=point[0][2];
//依次算出与第一个点z的距离,找出最大距离点,确定第二个z
double temp_distance=0.0;
int count=0;//记录z所在点的序列
int z_num=0;
for(int item=0;item<10;item++)
{
double distance=sqrt((point[item][0]-z[0][0])*(point[item][0]-z[0][0])+(point[item][1]-z[0][1])*(point[item][1]-z[0][1])+(point[item][2]-z[0][2])*(point[item][2]-z[0][2]));
if(distance>temp_distance)
{
temp_distance=distance;
count=item;
}
}
z_num++;
//确定记录第二个z
z[1][0]=point[count][0];
z[1][1]=point[count][1];
z[1][2]=point[count][2];
z_num++;
//计算阈值q
double q=0.5*sqrt((z[1][0]-z[0][0])*(z[1][0]-z[0][0])+(z[1][1]-z[0][1])*(z[1][1]-z[0][1])+(z[1][2]-z[0][2])*(z[1][2]-z[0][2]));
double w_distance[10];
do
{
//以下为聚类中心到每一个样本的最小距离
for(int i=0;i<10;i++)
{
double min_distance=sqrt((point[i][0]-z[0][0])*(point[i][0]-z[0][0])+(point[i][1]-z[0][1])*(point[i][1]-z[0][1])+(point[i][2]-z[0][2])*(point[i][2]-z[0][2]));
for(int j=1;j<=z_num;j++)
{
double distance=sqrt((point[i][0]-z[j][0])*(point[i][0]-z[j][0])+(point[i][1]-z[j][1])*(point[i][1]-z[j][1])+(point[i][2]-z[j][2])*(point[i][2]-z[j][2]));
if(distance min_distance=distance;
}
w_distance[i]=min_distance;
}
//以下为取这些最小距离中的最大值
temp_distance=w_distance[0];
for(int temp=1;temp<10;temp++)
{
if(w_distance[temp]>temp_distance)
{
temp_distance=w_distance[temp];
count=temp;
}
}
if(temp_distance>q)
{
z[z_num][0]=point[count][0]; //最大值对应的样本作为聚类中心
z[z_num][1]=point[count][1];
z[z_num][2]=point[count][2];
z_num++;
}
else break;
}while(true);
//以下为输出所分得的类别
cout<<“由最大最小算法进行归类\n“;
for(item=0;item cout<<“(“<
//以下为最近距离算法
cout<<“归完类后由最近距离得最后结果\n“;
for(int i=0;i<10;i++)
{
int k=0;
double min_distance=sqrt((point[i][0]-z[0][0])*(point[i][0]-z[0][0])+(point[i][1]-z[0][1])*(point[i][1]-z[0][1])+(point[i][2]-z[0][2])*(point[i][2]-z[0][2]));
for(int j=0;j {
double distance=sqrt((point[i][0]-z[j][0])*(point[i][0]-z[j][0])+(point[i][1]-z[j][1])*(point[i][1]-z[j][1])+(point[i][2]-z[j][2])*(point[i][2]-z[j][2]));
if(distance {
min_distance=distance;
count=i;
k=j;
}
}
cout<<“(“<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-08-31 19:31 MaxMinDis1\
目录 0 2018-08-31 19:28 MaxMinDis1\MaxMinDis\
目录 0 2018-08-31 19:27 MaxMinDis1\MaxMinDis\Debug\
文件 524348 2012-05-04 22:29 MaxMinDis1\MaxMinDis\Debug\MaxMinDis.exe
文件 778116 2012-05-04 22:29 MaxMinDis1\MaxMinDis\Debug\MaxMinDis.ilk
文件 151673 2012-05-04 22:29 MaxMinDis1\MaxMinDis\Debug\MaxMinDis.obj
文件 2009712 2012-04-26 12:13 MaxMinDis1\MaxMinDis\Debug\MaxMinDis.pch
文件 1074176 2012-05-04 22:29 MaxMinDis1\MaxMinDis\Debug\MaxMinDis.pdb
文件 74752 2018-08-31 19:28 MaxMinDis1\MaxMinDis\Debug\vc60.idb
文件 110592 2012-05-04 22:29 MaxMinDis1\MaxMinDis\Debug\vc60.pdb
文件 3167 2012-05-04 22:29 MaxMinDis1\MaxMinDis\MaxMinDis.cpp
文件 3437 2018-08-31 19:27 MaxMinDis1\MaxMinDis\MaxMinDis.dsp
文件 524 2018-08-31 19:28 MaxMinDis1\MaxMinDis\MaxMinDis.dsw
文件 50176 2018-08-31 19:28 MaxMinDis1\MaxMinDis\MaxMinDis.ncb
文件 48640 2018-08-31 19:28 MaxMinDis1\MaxMinDis\MaxMinDis.opt
文件 252 2018-08-31 19:27 MaxMinDis1\MaxMinDis\MaxMinDis.plg
文件 15737 2018-08-31 15:06 MaxMinDis1\Microsoft Office Word 文档.docx
- 上一篇:C语言流程图生成器56102
- 下一篇:C语言经典算法大全
评论
共有 条评论