📄 algorithm.h
字号:
// Algorithm.h: interface for the CAlgorithm class.
/////////////////////////////////////////////////////////////////////
// 算法的头文件 ///////////////////
//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
//////// 模式结构 /////////////////////
////////////////////////////////////////////////////////////////
struct PATTERN_S
{
double *pat;//模式数组指针
PATTERN_S *pNext;//下一个模式结构指针
};
//////////////////////////////////////////////////////////////////
//////// 类结构 //////////////////////
//////////////////////////////////////////////////////////////////
struct CLUSTER_S
{
PATTERN_S *pPat;//模式链指针
double *pCenter;//类心指针
double MaxBiaozhuncha;//类内距离的标准差矢量最大值
int MaxBiaozhunchaPos;//类内距离的标准差矢量最大值位置
double PatCentMeanDis;//模式到类心的平均距离
bool CombineOrNot;//表示是否在一个循环内被合并过
CLUSTER_S *pNext;//下一个类结构指针
};
////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
class CAlgorithm
{
public:
CAlgorithm();
virtual ~CAlgorithm();
/////////////////////////////////////////////////////////////////////
// 数据类型定义 //
/////////////////////////////////////////////////////////////////////
PATTERN_S *pPattern;//模式结构指针
CLUSTER_S * pCluster;//类结构指针
double c;//预期的类数
int Nc;//初始聚类中心个数
double Thn;//每一类中允许的最小模式数目
double Ths;//类内各个分量分布的标准差上限
double ThD;//两类中心之间的最小距离下限
int L;//在每次迭代中可以合并的类的最多对数
int I;//允许的最多迭代次数
int Ip;//实际迭代的次数
int PatNum;//模式的个数
int PatDim;//模式的维数
int UnClusPatNum;//未归类的模式的个数
int ClusNum;//当前类的个数
double TotalMeanDis;//各个模式到其类中心的总体平均距离
double k;//类分裂时用的系数k
public :
////////////////////////////////////////////////////////////////////////////
// 数据的计算 //
///////////////////////////////////////////////////////////////////////////
int CalClusCent(CLUSTER_S *c);//计算更新类中心
int CalPatCentMeanDis(CLUSTER_S *c);//计算更新各类中模式到类心的平均距离
int Random(int max);//返回一个1-max之间的随机数
double CalPatClusCentDis(PATTERN_S *p,CLUSTER_S *c);//计算模式与类之间的距离
int CalClusMaxBiaozhuncha(CLUSTER_S *c);//计算类内距离的标准差矢量的最大值
double CalTotalMeanDis();//计算各个模式到其类内中心的总体平均距离
double CalClusCentDis(int posc1,int posc2);//根据位置计算两个类心之间的距离
////////////////////////////////////////////////////////////////////////////////
// 用于测试的函数 //
////////////////////////////////////////////////////////////////////////////////
int DisplayInfo();//显示当前模式与类的信息
int DisplayPattern(PATTERN_S *p);//显示模式信息
int DisplayCluster(CLUSTER_S *c);//显示类中信息
int PatternOutput();//显示模式数据
int PatternInput();//读入模式数据
int ParaSet();//参数设置
int PatternFromArray(double input[]);//把数组转换为模式链结构
int MemoryFree();//释放内存
/////////////////////////////////////////////////////////////////////////////////
// 节点的操作,用于类和模式链表的关系操作 /////
////////////////////////////////////////////////////////////////////////////////
CLUSTER_S* GetClusPointer(int position);//根据位置参数返回类结构指针
PATTERN_S* SelectPattern(int position);//根据位置参数选出一个模式并返回模式结构指针
int CountPattern(PATTERN_S *p);//返回模式结构链的长度
int FreePatInClus(PATTERN_S *p);//释放已聚类的模式
int AddNullCluster();//添加一个空类
int AddCluster(CLUSTER_S *p);//添加一个类
int DeleteCluster(int position);//删除一个类
int AddPatToClus(PATTERN_S *p,CLUSTER_S *c);//将一个模式加入一个类节点
int CombineCluster(int posc1, int posc2);//根据位置参数合并两个类
int SeperateCluster(CLUSTER_S *c);//将一个类分裂
////////////////////////////////////////////////////////////////////////////////
// iso-data算法的步骤 //
////////////////////////////////////////////////////////////////////////////////
int Step1();//参数设置、模式输入、随机产生初始分类
int Step2();//根据模式与每个类之间的距离,将其加入距离最小的一个类
int Step3();//如果类太小,合并并返回第二步
int Step4();//计算类心、模式类心平均距离
int Step5();//根据类的数量判断是交分裂处理还是交给合并处理
int Step6_7();//计算类内距离的标准差矢量的最大值
int Step8();//根据类内距离的标准差矢量的最大值判断是否分裂并分裂
int Step9_10();//根据类心间距离判断是否合并并合并
int Step11();//判断是否继续迭代或结束
////////////////////////////////////////////////////////////////////////////////
// iso-data算法的全程函数 //
////////////////////////////////////////////////////////////////////////////////
void Test();
void Process();
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -