k均值聚类算法
//***********引入库函数
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
//*************定义常量
const int TRUE=1;
const int FALSE=0;
const int MarkovLengh=10000;
const int MaxInnerLoop=10000;
const int MaxOuterLoop=60;
const double CO=;
const double DeclineRate=;
const long MAX=100000;
const int AcceptRate=1;
const double ForceDecline=;
//************定义全局变量
int DataNum; //聚类样本数目
int Dimension; //样本维数
int K; //分类数
double *DataSet; //指向浮点型的指针
int HALT=0;
int Row=3;
//***************************************************************
// 类 GETDATA: 设定全局变量,维数,样本数,和类别数等***
// 随机生成样本或手工输入样本的类***
//***************************************************************
class GETDATA{
public:
GETDATA();
void Display();
void Initial();
void Input();
double FRand(double,double);
double rand1,rand2; //随机数的高低值
};
GETDATA::GETDATA()
{
int i,j;
Dimension=2;
DataNum=50;
K=4;
DataSet=new double[Dimension*DataNum];
for(i=0;i<DataNum;i++)
{
for(j=0;j<Dimension;j++)
DataSet[i*Dimension+j]=(((double)rand()/(double)RAND_MAX)*100);
}
}
//*****************显示当前待聚类的样本(维数,个数,类别数等)
void GETDATA::Display()
{
int i,j;
cout<<" 当前样本集如下:"<<endl<<" {"<<endl;
for(i=0;i<DataNum;i++)
{
cout<<" [";
for(j=0;j<Dimension;j++)
{
cout<<" "<<setw(8)<<DataSet[i*Dimension+j];
}
cout<<" ] ";
if((i+1)%Row==0)
cout<<endl;
}
cout<<endl<<" }"<<endl;
cout<<endl<<" 以上实数样本集由计算机在1---100之间随机产,其中:"<<endl;
cout<<endl<<" 样本维数 Dimension= "<<Dimension<<endl;
cout<<" 样本数 DataNum= "<<DataNum<<endl;
cout<<" 类别数 K= "<<K<<endl;
}
//****************输入待聚类样本,包括维数,个数,类别数等
void GETDATA::Input()
{
char flag;
int i,j;
double s=0;
cout<<endl<<" 请依次输入: 维数样本数目类别数"<<endl;
cout<<endl<<" 维数 Dimension: ";
cin>>Dimension;
cout<<endl<<" 样本数目 DataNum: ";
cin>>DataNum;
cout<<endl<<" 类别数 K:";
cin>>K;
cout<<endl<<" 随机生成数据输入R 人工输入按B: "<<endl; delet
K均值算法C(精选) 来自淘豆网m.daumloan.com转载请标明出处.