資源簡介
用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?<“文件打開失敗!“?< 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算法的源碼
評論
共有 條評論