www.pudn.com > Jx_KClustering.rar > KCluster.cpp
#include "StdAfx.h"
#include "KCluster.h"
// 构造器
KCluster::KCluster(int dataNum, int dimension, int clusterNum, double *DataSet) :
OldCluster(NULL)
{
int i;
DataNum = dataNum;
Dimension = dimension;
ClusterNum = clusterNum;
DataMember = new DataType[DataNum];
ClusterMember = new ClusterType[ClusterNum];
for(i=0; i=ClusterNum)
{
ClusterMember[ClusterIdxA].Sonnum += 1;
NewCenterPlus(ClusterMember, ClusterIdxA, DataMember[i].Data, Dimension);
GetValue(OldCluster[ClusterIdxA].Center, ClusterMember[ClusterIdxA].Center, Dimension);
}
}
ClusteringCompleted = false;
}
// 一个聚类步
bool KCluster::SetupClustering()
{
int i, j, Ret = 0;
int Father;
if (ClusteringCompleted) return true;
//一次聚类循环:1.重新归类;2.修改类中心
for(i=0; i1)
{
ClusterIdxA = DataMember[i].Father;
ClusterMember[ClusterIdxA].Sonnum -= 1;
ClusterIdxB = DataMember[i].Father = FindFather(DataMember[i].Uncle, ClusterNum);
ClusterMember[ClusterIdxB].Sonnum += 1;
NewCenterReduce(ClusterMember, ClusterIdxA, DataMember[i].Data, Dimension);
NewCenterPlus(ClusterMember, ClusterIdxB, DataMember[i].Data, Dimension);
}
}
//判断聚类是否完成,ClusteringCompleted=true,聚类停止
for(j=0; jClusterNum) return -1;
for(i=0; i