⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ccluster.cpp

📁 LCL分群法 改善cure kmean.......等
💻 CPP
字号:
#include "stdafx.h"
#include "CCluster.h"
#include "CRecord.h"
#include "float.h"
#include <math.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CCluster::CCluster()
{
	mfRatio = 1.0f;
}

CCluster::CCluster(const char *label)
{
	moLabel = label;
	mfRatio = 1.0f;
}

CCluster::~CCluster()
{
	moRecordArray.RemoveAll();
}

BOOL CCluster::add_record(CRecord *record)
{
	record->set_cluster(this);
	moRecordArray.Add(record);
	return TRUE;
}

float CCluster::get_max_linkage()
{
	if(moRecordArray.GetSize() == 1) {return mfRadius;}

	float max = 0.0f;
	for(long i=0;i<moRecordArray.GetSize();i++){
		CRecord *r = (CRecord *)moRecordArray[i];
		float min = FLT_MAX;
		for(long j=0;j<moRecordArray.GetSize();j++){
			CRecord *s = (CRecord *)moRecordArray[j];
			if(r == s) {continue;}
			float dis = r->euclidean_distance(s);
			if(min > dis){
				min = dis;
			}
		}
		if(max < min){
			max = min;
		}
	}
	max = sqrt(max);
	return max;
}

float CCluster::cal_within_cluster_distance_by_NND()
{
	if(moRecordArray.GetSize() == 0) {return 0.0f;}
	float distance = 0.0f;
	for(long i=0;i<moRecordArray.GetSize();i++){
		CRecord *r = (CRecord *)moRecordArray[i];
		float min = FLT_MAX;
		for(long j=0;j<moRecordArray.GetSize();j++){
			CRecord *s = (CRecord *)moRecordArray[j];
			if(r == s) {continue;}
			float dis = r->euclidean_distance(s);
			if(min > dis){
				min = dis;
			}
		}
		distance += sqrt(min);
	}
	return distance/moRecordArray.GetSize();
}

float CCluster::cal_between_clusters_distance_by_single_linkage(CCluster *that)
{
	if(moRecordArray.GetSize() == 0) {return 0.0f;}
	float min = FLT_MAX;
	for(long i=0;i<moRecordArray.GetSize();i++){
		CRecord *r = (CRecord *)moRecordArray[i];
		for(long j=0;j<that->moRecordArray.GetSize();j++){
			CRecord *s = (CRecord *)that->moRecordArray[j];
			float dis = r->euclidean_distance(s);
			if(min > dis){
				min = dis;
			}
		}
	}
	return sqrt(min);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -