资源简介
用VC++实现BIRCH算法的源代码,绝对能运行,是本科论文中要实现的算法
代码片段和文件信息
/*C++基于层次的聚类方法(birch算法介于特殊性这里的阈值和L相等)*/
#include
#include
#include
#include
#include
using namespace std;
#define DIM 2 //每个数据的维数
#define CLUNUM 2 //聚类的数目 //B
#define B 4 //分支因子B
#define STEP 2 //当无法分割时,增加分支因子B
#define T 15 //阈值T
typedef struct CF //CF特征值
{
int N; //数据点的个数
long LS[DIM];
long SS[DIM];
long d ; //半径
double means[DIM]; //中心点
int numbers; //数据点的个数
}INFO;
typedef struct select MAX;
class cluster
{
public:
INFO info;
//只有叶结点里的子簇(每个数据点代表一个簇)
double value[DIM]; //数据值
int thre; //定义阈值
int number; //类标号
cluster *pre; //指向前一个类
cluster *next; //指向下一个类
cluster *child; //指向该类包含数据点的指针
bool leaf;
public:
cluster(); //构造函数
cluster(double x0double x1int num);
~cluster()
{
cout<<“析构!“< }
void insert(cluster *in); //插入节点针对非叶结点即主链表
bool split(cluster *headcluster *next); //对节点进行分裂
void findmax(MAX &max);
void sort(); //安number对类中数据进行排序
};
cluster::cluster()
{
for(int i=0;i {
value[i]=0;
info.LS[i]=0;
info.SS[i]=0;
}
info.N=0;
number=-1;
thre=T;
pre=NULL;
next=NULL;
child=NULL;
leaf=true;
for(int j=0;j info.means[j] = 0;
info.d = 0;
info.numbers = 0;
}
cluster::cluster(double x0double x1int num)
{
for(int i=0;i {
info.LS[i]=0;
info.SS[i]=0;
}
value[0]=x0;
value[1]=x1;
info.N=0;
number=num;
thre=T;
pre=NULL;
next=NULL;
child=NULL;
leaf=true;
info.means[0] = x0;
info.means[1] = x1;
info.d = 0;
}
typedef struct select
{
cluster *parent; //记录父类
cluster *prefirst;
cluster *first; //记录第一个条目
cluster *presecond;
cluster *second; //记录第二个条目
double value; //记录条目间距离
}MINMAX;
bool createlist(cluster *head);
bool createtree(fstream &datacluster *headint &count); //fstream不能作为拷贝参数但可以是引用
void main()
{
fstream data; //打开读取文件流
int count=0; //记录的个数
cluster *head=NULL; //类的头指针
head=new cluster;
//打开文件
string filename(“iris.data“);
data.open(filename.data()ios::in);
//判断文件打开是否出错
if(data.fail())
{
cout << “文件打开失败!“ << endl;
return ;
}
createlist(head);//建立非叶结点链表
createtree(dataheadcount);//创建树进行分类
//关闭源文件
data.close();
//写文件
int i=1;
cluster *iterator1=head*iterator2=NULL;
for(iterator1=head;iterator1!=NULL;iterator1=iterator1->next)
{
iterator1->sort();
cout<<“ 第“<info.N< for(iterator2=iterator1->child;iterator2!=NULL;iterator2=iterator2->child)
{
cout<number<<“ “;
for(int j=0;j {
cout<value[j];
if(j!=DIM-1)
cout<<““;
}
cout< }
i++;
cout< }
system(“pause“);
}
bool createlist(cluster *head)
{
hea
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 606312 2013-05-24 21:03 BIRCH算法\Debug\IrisData4.exe
文件 381060 2013-05-24 21:03 BIRCH算法\Debug\IrisData4.obj
文件 1180672 2013-05-24 21:03 BIRCH算法\Debug\IrisData4.pdb
文件 118784 2013-05-24 21:03 BIRCH算法\Debug\vc60.pdb
文件 75 2013-05-11 09:39 BIRCH算法\iris.data
文件 12041 2013-05-24 21:03 BIRCH算法\IrisData4.cpp
文件 3437 2013-05-24 20:57 BIRCH算法\IrisData4.dsp
文件 526 2013-05-24 21:03 BIRCH算法\IrisData4.dsw
文件 50176 2013-05-24 21:03 BIRCH算法\IrisData4.ncb
文件 247418 2013-05-24 21:06 BIRCH算法\IrisData4.obj
文件 48640 2013-05-24 21:03 BIRCH算法\IrisData4.opt
文件 1089 2013-05-24 21:03 BIRCH算法\IrisData4.plg
文件 98 2013-05-24 19:02 BIRCH算法\Project1.bpf
文件 3124 2013-05-24 19:02 BIRCH算法\Project1.bpr
文件 38400 2013-05-24 21:06 BIRCH算法\Project1.exe
文件 876 2013-05-24 18:51 BIRCH算法\Project1.res
文件 524288 2013-05-24 19:07 BIRCH算法\Project1.tds
文件 330 2013-05-20 19:06 BIRCH算法\result2.txt
目录 0 2013-06-05 11:34 BIRCH算法\Debug
目录 0 2013-06-05 11:34 BIRCH算法
----------- --------- ---------- ----- ----
3217346 20
- 上一篇:给予c++的多线程
- 下一篇:用C++实现的CURE算法的源码
评论
共有 条评论