資源簡介
使用C語言實現的矢量量化算法,適合搞這方面研究的學術工作者下載使用。

代碼片段和文件信息
#include?“stdafx.h“
#include?“Clustering.h“
#include?“stdio.h“
#include?“math.h“
/******************************************************************************
/* Name: LBGCluster
/* Function: Clustering?input?vectors?using?LBG?algorithm
/* Using?Euclidean?distance
/* Parameter: X?--?Input?vecters
/* N?--?Number?of?input?vectors
/* Y?--?Clustering?result
/* M?--?Number?of?clustering?center
/* Return: 0?--?Correct
/* 1?--?Error
/*
/******************************************************************************/
int?LBGCluster(VQ_VECTOR?*X?int?N?VQ_CENTER?*Y?int?M)
{
if(N int L=1000?m=1?nCenter?i?j?k;//L迭代的次數
int nDimension?=?X[0].nDimension;
double??D0?D;
struct??VQ_CENTERINFO
{
double* ??Data;
int ??nDimension;
double*???SumData;
int ??Num;
};
VQ_CENTERINFO *Center?=?(VQ_CENTERINFO*)malloc(M*sizeof(VQ_CENTERINFO));
if(Center?==?NULL) return?-1;
double *Distance?=?(double*)malloc(N*sizeof(double));
if(Distance?==?NULL) return?-1;
for(?i=0;?i {
Center[i].nDimension?=?nDimension;
Center[i].Data?=?(double*)malloc(sizeof(double)*nDimension);
Center[i].SumData?=?(double*)malloc(sizeof(double)*nDimension);
if(?Center[i].Data?==?NULL?||?Center[i].SumData?==?NULL?)
{
AfxMessageBox(?“Memory?used?up!“?);
return?-1;
}
for(?j=0;?j {
Center[i].Data[j]?=?X[i*N/M].Data[j];
Center[i].SumData[j]?=?0;
}
Center[i].Num?=?0;
}
D0=1;?????????D=1e+10;
while(m1e-5)
{
for(i=0;?i {
for(?j=0; j Center[i].SumData[j]?=?0;
Center[i].Num?=?0;
}
D0?=?D; D?=?0; m++;
for(i=0;?i {
Distance[i]?=?1e+10;
for(int?j=0;?j {
double??Dist?=?0;
for(?k=0;?k Dist?+=?(X[i].Data[k]-Center[j].Data[k])*(X[i].Data[k]-Center[j].Data[k]);
if(??Dist? {
nCenter?=?j;
Distance[i]?=?Dist;
}
}
X[i].nCluster?=?nCenter;
for(?k=0;?k Center[nCenter].SumData[k]?+=?X[i].Data[k];
Center[nCenter].Num++;
D?+=?Distance[i];
}
for(i=0;?i {
if(Center[i].Num?!=?0)
for(?k=0;?k Center[i].Data[k]?=?Center[i].SumData[k]/Center[i].Num;
else
{
int?MaxNum=0;
for(?k=1;?k MaxNum?=?Center[i].Num?>?Center[MaxNum].Num???i:?MaxNum;
int???Num?=?Center[MaxNum].Num/2;
for(?k=0;?k Center[MaxNum].SumData[k]?=?0;
Center[MaxNum].Num?=?0;
for(k=0;?k {
if(X[k].nCluster?!=?MaxNum) continue;
if(Center[i].Num? {???
X[k].nCluster?=?i;
for(?m=0;?m Center[i].SumData[m]?+=?X[k].Data[m];
Center[i].Num++;
}
else
{
for(?m=0;?m Center[MaxNum].SumData[m]?+=?X[k].Data[m];
Ce
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????11832??2003-01-07?07:06??矢量量化的C語言實現\Clustering.cpp
?????文件???????3256??2003-01-07?07:05??矢量量化的C語言實現\Clustering.h
?????目錄??????????0??2008-12-24?14:43??矢量量化的C語言實現
-----------?---------??----------?-----??----
????????????????15088????????????????????3
- 上一篇:串口調試助手保存excel源程序
- 下一篇:OPENGL 畫顏色漸變六角星+旋轉
評論
共有 條評論