// pree1.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include
#include
#include
#define dim 784//定義資料的最大維數
#define num 10000//定義資料的最大數量
#define class 10//定義最大聚類數
int initialize(double *a,int *sum,int *num,int i,int j);//初始化
void oldtonew(double *a,double *oa,int i,int j);//將新值賦給舊值
double distance(int *a,double *b,int i);//求距離,a,b代表兩個點,i代表幾位資料。
int stable(double *a,double *oa,int i,int j);//判斷是否穩定,a代表現在資料,oa代表之前資料,i代表資料量,j代表維數
int function(int *num,double *oa,double *a,int *sum,int b,int c,int d);
int minfind(double *l,int k);//從l中找到最小的,並返回其位置
void display(double *b,int *sum,int i,int j);
int *num = (int*)malloc(sizeof(int)*(num*dim));//用來讀取資料
double *a = (double *)malloc(sizeof(double)*(class*dim));//用來儲存聚類中心
double *oa = (double *)malloc(sizeof(double)*(class*dim));//用來輔助進行更新
int *sum= (int *) malloc (sizeof(int)*class);//用來記錄每個類的個數
char *o = (char *)malloc(sizeof(char)*(num*dim));//用來將逗號吃掉
int main()
else
printf("\n");}}
initialize(a,sum,num,class,dim);
oldtonew(a,oa,class,dim);
function(num,oa,a,sum,num,dim,class);
while(!stable(a,oa,class,dim))
display(a,sum,class,dim);
system("pause");
return 0;
}int initialize(double *a,int *sum, int *num,int i,int j)
}return 0;
}void oldtonew(double *a,double *oa,int i,int j)
}double distance(int *a,double *b,int i)//這裡為距離的平方,但不影響結果。
return l;
}int stable(double *a,double *oa,int i,int j)
}if(flag)
return 1;
else
return 0;
}int minfind(double *l,int k)
}return j;
}int function(int *num,double *oa,double *a,int *sum,int b,int c,int d)
for(i = 0;i< b;i++) //計算距離
for(k = 0;k
*(sum + minfind(a,d)) = *(sum + minfind(a,d))+1;
*(b+i) = minfind(a,d);
}//更新中心
for(i = 0;i
}for(j = 0;j
}for(i =0;i
}free(b);
free(a);
return 0;
}void display(double *b,int *sum,int i,int j)
for(k = 0;k< i;k++)
fprintf(julei,"\n");
printf("\n");}}
C語言實現k means演算法
k means主要思想是在給定k值和若干樣本 點 的情況下,把每個樣本 點 分到離其最近的類簇中心點所代表的類簇中,所有點分配完畢之後,根據乙個類簇內的所有點重新計算該類簇的中心點 取平均值 然後再迭代的進行分配點和更新類簇中心點的步驟,直至類簇中心點的變化很小,或者達到指定的迭代次數。自定義的資料...
K means演算法介紹及C 語言實現
k means演算法是輸入聚類個數k,以及包含 n個資料物件的資料庫,輸出滿足方差最小標準的k個聚類。基本簡介k means 演算法接受輸入量 k 然後將n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值...
c語言實現磁碟排程演算法 C語言實現洗牌演算法
首先看一道題目 有乙個大小為100的陣列,裡面的元素是從 1 到 100,隨機從陣列中選擇50個不重複數。用math.random 100,就可以拿到乙個 0 到 99 的隨機數,是不是重複50次就可以了?當然不是,假如,第一次隨機到5,第二次如果再一次隨機到5的話,要求是選擇不重複的數,所以要選出...