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

📄 sort.cpp

📁 用C语言实现了ISODATA算法,包括ISODATA.vcproj
💻 CPP
字号:
// Sort.cpp

#include "stdafx.h"
#include "Sort.h"

extern int dim;

Sort::Sort()
{
	z = Pattern();
	n = 0;	
	_d = 0.0;
	max = 0;
	sigma_max = 0.0;

	for(int i=0;i<MAXNUM;i++)
		x[i] = Pattern();

	for(int i=0;i<MAXDIM;i++)
		sigma[i] = 0.0;
}

Sort::~Sort()
{
}

// 判pattern为该类
int Sort::Insert(Pattern pattern)
{
	x[n] = pattern;
	n++;
	
	return n;
}

// 计算类心
Pattern Sort::CalCenter()
{
	z = Pattern();
	for(int i=0;i<n;i++)
		z += x[i];
	
	z /= n;
		
	return z;
}

double Sort::Cal_D()	// 计算模式到类心的平均距离
{
	_d = 0.0;
	for(int i=0;i<n;i++)
		_d += Pattern::Distance(x[i], z);
	_d /= n;

	return _d;
}

// 计算类内距离的标准差矢量
int Sort::CalSigma()
{
	double temp = 0.0;

	for(int k=0;k<dim;k++)
	{
		for(int i=0;i<n;i++)
			temp += (x[i].x[k] - z.x[k])*(x[i].x[k] - z.x[k]);
		
		sigma[k] = sqrt(temp/n);

		if(sigma_max < sigma[k])
		{
			sigma_max = sigma[k];
			max = k;
		}
	}

	return max;
}

// 当两类均未合并过时,将该类与w类合并
bool Sort::Combin(Sort &w)
{
	if( (z.n < 0) || (w.z.n < 0) )
		return false;

	z = (1/(n+w.n)) * (n * z + w.n + w.z );
	z.n = -1;	// 新的聚类中心,不可取消
	w.z.n = -2;	// 应取消中心的类
	return true;
}

⌨️ 快捷键说明

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