c語言實現k means演算法

2021-06-25 20:11:33 字數 2200 閱讀 5419

// 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的話,要求是選擇不重複的數,所以要選出...