• 大小: 552KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: C/C++
  • 标签: BIRCHVC++  

资源简介

用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


评论

共有 条评论

相关资源