# K-Means的简单模拟

#include<iostream>
using namespace std;
#define N 1000
int flag[N];
double data[N];
double center[N];
double center_temp[N];
bool result = false;
int n;
double dis(int x,int y)
{
return (x-y)*(x-y);
}
void print_info()
{
printf("DATA\n");
for(int i=0;i<n;i++){
printf("%.0lf\t ",data[i]);
}
printf("\n");
printf("FLAG\n");
for(int i=0;i<n;i++){
printf("%d\t ",flag[i]);
}
printf("\n");

}
void print_result(int k)
{
for(int i=0;i<k;i++){
printf("第%d类成员：",i);
for(int j=0;j<n;j++){
if(i == flag[j]){
printf("\t%.0lf",data[j]);
}
}
printf("\n");
}
}
int k_avg(int k)
{
for(int i=0;i<k;i++){
flag[i] = i;
center[i] = data[i];
}
do{
for(int i=0;i<n;i++){
double min = 99999;
int temp;
for(int j=0;j<k;j++){
double distance = dis(data[i],center[j]);
if(distance < min){
min = distance;
temp = j;
}
}
flag[i] = temp;
}
for(int i=0;i<k;i++){
double sum = 0;
int count = 0;
for(int j=0;j<n;j++){
if(flag[j] == i){
sum += data[j];
count++;
}
}
center_temp[i] = sum/count;
}

result = false;
for(int i=0;i<k;i++){
if(center_temp[i] - center[i] > 0.001){
result = true;
center[i] = center_temp[i];
}
}
print_info();
}while(result);
}
int main()
{

cin>>n;
for(int i=0;i<n;i++){
cin>>data[i];
}
int k;
cin>>k;
k_avg(k);
print_result(k);
return 0;
}
/*
10
15 2 3 4 8 79 10 40 5 20
4

10
0 1 2 3 4 5 6 7 8 9
4

5
40 24 60 80 79
3

5
40 24 20 10 79
3

*/

05-15 1万+

07-31 2万+

11-25 2221

10-02 254

11-15 1348

11-06 6万+

07-02 7052

11-19 500

01-05 707

03-18 29

05-01 2034

05-28 3万+

09-26 438

05-19 127

04-14 174

06-12 1272

03-17 3479

05-09 68

03-22 2117

04-14 55万+

02-23 3万+

02-27 4万+

02-27 7万+

03-01 12万+

03-02 9244

03-04 12万+

03-05 5万+

03-08 4万+

03-08 6万+

03-10 11万+

03-10 17万+

03-12 10万+

03-13 10万+

03-14 8234

03-17 6758

03-19 5万+

03-19 7万+

03-22 2万+

03-23 3万+

03-22 3万+

03-23 4万+

03-24 2万+

03-25 2万+

03-25 8万+

03-26 3万+

03-27 4万+

03-29 20万+

03-29 9万+

03-30 14万+

05-21 2536

05-25 4163

03-23 9773

04-02 3万+

04-03 1万+

04-04 8895

04-06 6万+

04-07 4万+

04-09 7万+

04-09 2万+

04-11 5万+

04-11 7716

04-12 8987

04-11 2万+

04-15 5万+

04-18 4万+

04-20 3万+

04-24 2万+

04-25 7704

04-26 1万+

04-29 2万+

05-16 4万+

05-08 3万+

05-19 1万+

05-10 1597

05-11 2万+

05-12 3591

05-13 6223

05-19 5406

05-13 9394

05-14 3251

#### python实用的几个脚本程序（自己在用）

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客