k 均值聚類演算法c語言版

2021-04-12 21:12:20 字數 2661 閱讀 6526

k-均值聚類演算法c語言版

#include 

<

stdio.h

>

#include 

<

math.h

>

#define

true            1

#define

false           0 

intn;

//資料個數

intk;

//集合個數

int*

centerindex;

//初始化質心陣列的索引

double

*center;

//質心集合

double

*centercopy;

//質心集合副本

double

*alldata;

//資料集合

double

**cluster;

//簇的集合

int*

top;

//集合中元素的個數,也會用作棧處理

//隨機生成k個數x(0<=x<=n-1)作為起始的質心集合

void

createrandomarray(

intn, 

intk,

int*

center)}if

(j>=

i)//

如果不重複,加入

else

}     }//

返回距離最小的質心的序號

intgetindex(

double

value,

double

*center)

}return

index;}//

拷貝質心陣列到副本

void

copycenter()}//

初始化質心,隨機生成法

void

initcenter()

copycenter();

//拷貝到質心副本}//

加入乙個資料到乙個cluster[index]集合

void

addtocluster(

intindex,

double

value) //

重新計算簇集合

void

updatecluster()

for(i=0

;i<

n;i++)}

//重新計算質心集合,對每一簇集合中的元素加總求平均即可

void

updatecenter()

if(top[i]

>0)

//如果該簇元素不為空}}

//判斷2陣列元素是否相等

intisequal(

double

*center1 ,

double

*center2)

}return

true;}//

列印聚合結果

void

print()

}     }//

初始化聚類的各種資料

void

initdata()

center=(

double

*)malloc(

sizeof

(double)*

k);//

為質心集合申請空間

centerindex=(

int*

)malloc(

sizeof

(int)*

k);//

為質心集合索引申請空間

centercopy=(

double

*)malloc(

sizeof

(double)*

k);//

為質心集合副本申請空間

top=

(int

*)malloc(

sizeof

(int)*

k); 

alldata=(

double

*)malloc(

sizeof

(double)*

n);//

為資料集合申請空間

cluster=(

double

**)malloc(

sizeof

(double*)

*k);

//為簇集合申請空間

//初始化k個簇集合

for(i=0

;i<

k;i++

)printf(

"輸入%d資料:

",n);

for(i=0

;i<

n;i++

)initcenter();

//初始化質心集合      

updatecluster();

//初始化k個簇集合}/*

演算法描述:

k均值演算法:

給定類的個數k,將n個物件分到k個類中去,

使得類內物件之間的相似性最大,而類之間的相似性最小。

*/main()

else

//否則將質心副本置為本次迭代得到的的質心集合

}print();

//輸出結果

getchar();

getchar();}

k 均值聚類演算法c語言版

include stdio.h include math.h define true 1 define false 0 intn 資料個數 intk 集合個數 int centerindex 初始化質心陣列的索引 double center 質心集合 double centercopy 質心集合副本...

k 均值聚類演算法c語言版

檢視文章 k 均值聚類演算法c語言版 2009 08 03 13 44 include include define true 1 define false 0 int n 資料個數 int k 集合個數 int centerindex 初始化質心陣列的索引 double center 質心集合 d...

k 均值聚類演算法c語言版

include stdio.h include math.h define true 1 define false 0 intn 資料個數 intk 集合個數 int centerindex 初始化質心陣列的索引 double center 質心集合 double centercopy 質心集合副本...