📄 shi.cpp
字号:
#include "shi.h"
//计算欧氏距离
double distance(int a,int b,int aa,int bb);
void main()
{
int i,j,c,n,k,h;
int sum=0;
int data;
double xx,yy,x[1][1],y[1][1];
int a[2][100],z[2][100],w[2][100];
//给100个样本点的2个特征分别赋值
for(i=0;i<2;i++)
for(j=0;j<100;j++)
{data=rand(); //产生随机数
data=data%10; //控制随机数范围:<10
a[i][j]=data;
}
//打印出100个样本点,采用数组形式
printf("the data is as follows:\n");
for(i=0;i<100;i++)
{
printf(" ( ");
for(j=0;j<2;j++)
printf(" %d ",a[j][i]);
printf("); ");
}
//初始类中心
c=2;
x[0][0]=a[0][0];
x[1][0]=a[1][0];
y[0][0]=a[0][1];
y[1][0]=a[1][1];
do {
n=0;
k=0;
h=0;
for(i=0;i<100;i++)
{ //采用欧氏距离
xx=distance(a[0][i],a[1][i],x[0][0],x[1][0]);
yy=distance(a[0][i],a[1][i],y[0][0],y[1][0]);
//欧氏距离小的归于一类
if(xx<yy)
{
z[0][n]=a[0][i];
z[1][n]=a[1][i];
n++;}
else
{
w[0][k]=a[0][i];
w[1][k]=a[1][i];
k++;
}
}
//建立新的聚类中心
for(i=0;i<n;i++)
{
sum=sum+z[0][i];
h=h+z[1][i];
}
x[0][1]=sum/n;
x[1][1]=h/n;
sum=0;
h=0;
for(i=0;i<k;i++)
{
sum=sum+w[0][i];
h=h+w[1][i];
}
y[0][1]=sum/k;
y[1][1]=h/k;
n=0;
k=0;
for(i=0;i<100;i++)
{
xx=distance(a[0][i],a[1][i],x[0][1],x[1][1]);
yy=distance(a[0][i],a[1][i],y[0][1],y[1][1]);
if(xx<yy)
{
z[0][n]=a[0][i];
z[1][n]=a[1][i];
n++;}
else
{w[0][k]=a[0][i];
w[1][k]=a[1][i];
k++;}
}
sum=0;
for(i=0;i<n;i++)
{
sum=sum+z[0][i];
h=h+z[1][i];
}
x[0][0]=sum/n;
x[1][0]=h/n;
sum=0;
h=0;
for(i=0;i<k;i++)
{
sum=sum+w[0][i];
h=h+w[1][i];
}
y[0][0]=sum/k;
y[1][0]=h/k;
}while(x[0][0]==x[0][1]&&x[1][0]==x[1][1]&&y[0][0]==y[0][1]&&y[1][0]==y[1][1]);//新旧中心不等则继续建立新的类中心
//打印出分类结果,采用数组形式
printf("\nc=2\n");
printf("the first kind of data is as follows:\n");
printf("n=%d\n",n); //打印出该类包含的样本个数
for(i=0;i<n;i++)
{
printf(" ( ");
for(j=0;j<2;j++)
printf(" %d ",z[j][i]);
printf("); ");
}
printf("the second kind of data is as follows:\n");
printf("n=%d\n",k); //打印出该类包含的样本个数
for(i=0;i<k;i++)
{
printf(" ( ");
for(j=0;j<2;j++)
printf(" %d ",w[j][i]);
printf("); ");
}
}
double distance(int a,int b,int aa,int bb)
{
double su;
su=sqrt((a-aa)*(a-aa)+(b-bb)*(b-bb));
return su;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -