?? algorithm.h
字號:
// Algorithm.h: interface for the CAlgorithm class.
/////////////////////////////////////////////////////////////////////
// 算法的頭文件 ///////////////////
//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
//////// 模式結(jié)構 /////////////////////
////////////////////////////////////////////////////////////////
struct PATTERN_S
{
double *pat;//模式數(shù)組指針
PATTERN_S *pNext;//下一個模式結(jié)構指針
};
//////////////////////////////////////////////////////////////////
//////// 類結(jié)構 //////////////////////
//////////////////////////////////////////////////////////////////
struct CLUSTER_S
{
PATTERN_S *pPat;//模式鏈指針
double *pCenter;//類心指針
double MaxBiaozhuncha;//類內(nèi)距離的標準差矢量最大值
int MaxBiaozhunchaPos;//類內(nèi)距離的標準差矢量最大值位置
double PatCentMeanDis;//模式到類心的平均距離
bool CombineOrNot;//表示是否在一個循環(huán)內(nèi)被合并過
CLUSTER_S *pNext;//下一個類結(jié)構指針
};
////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
class CAlgorithm
{
public:
CAlgorithm();
virtual ~CAlgorithm();
/////////////////////////////////////////////////////////////////////
// 數(shù)據(jù)類型定義 //
/////////////////////////////////////////////////////////////////////
PATTERN_S *pPattern;//模式結(jié)構指針
CLUSTER_S * pCluster;//類結(jié)構指針
double c;//預期的類數(shù)
int Nc;//初始聚類中心個數(shù)
double Thn;//每一類中允許的最小模式數(shù)目
double Ths;//類內(nèi)各個分量分布的標準差上限
double ThD;//兩類中心之間的最小距離下限
int L;//在每次迭代中可以合并的類的最多對數(shù)
int I;//允許的最多迭代次數(shù)
int Ip;//實際迭代的次數(shù)
int PatNum;//模式的個數(shù)
int PatDim;//模式的維數(shù)
int UnClusPatNum;//未歸類的模式的個數(shù)
int ClusNum;//當前類的個數(shù)
double TotalMeanDis;//各個模式到其類中心的總體平均距離
double k;//類分裂時用的系數(shù)k
public :
////////////////////////////////////////////////////////////////////////////
// 數(shù)據(jù)的計算 //
///////////////////////////////////////////////////////////////////////////
int CalClusCent(CLUSTER_S *c);//計算更新類中心
int CalPatCentMeanDis(CLUSTER_S *c);//計算更新各類中模式到類心的平均距離
int Random(int max);//返回一個1-max之間的隨機數(shù)
double CalPatClusCentDis(PATTERN_S *p,CLUSTER_S *c);//計算模式與類之間的距離
int CalClusMaxBiaozhuncha(CLUSTER_S *c);//計算類內(nèi)距離的標準差矢量的最大值
double CalTotalMeanDis();//計算各個模式到其類內(nèi)中心的總體平均距離
double CalClusCentDis(int posc1,int posc2);//根據(jù)位置計算兩個類心之間的距離
////////////////////////////////////////////////////////////////////////////////
// 用于測試的函數(shù) //
////////////////////////////////////////////////////////////////////////////////
int DisplayInfo();//顯示當前模式與類的信息
int DisplayPattern(PATTERN_S *p);//顯示模式信息
int DisplayCluster(CLUSTER_S *c);//顯示類中信息
int PatternOutput();//顯示模式數(shù)據(jù)
int PatternInput();//讀入模式數(shù)據(jù)
int ParaSet();//參數(shù)設置
int PatternFromArray(double input[]);//把數(shù)組轉(zhuǎn)換為模式鏈結(jié)構
int MemoryFree();//釋放內(nèi)存
/////////////////////////////////////////////////////////////////////////////////
// 節(jié)點的操作,用于類和模式鏈表的關系操作 /////
////////////////////////////////////////////////////////////////////////////////
CLUSTER_S* GetClusPointer(int position);//根據(jù)位置參數(shù)返回類結(jié)構指針
PATTERN_S* SelectPattern(int position);//根據(jù)位置參數(shù)選出一個模式并返回模式結(jié)構指針
int CountPattern(PATTERN_S *p);//返回模式結(jié)構鏈的長度
int FreePatInClus(PATTERN_S *p);//釋放已聚類的模式
int AddNullCluster();//添加一個空類
int AddCluster(CLUSTER_S *p);//添加一個類
int DeleteCluster(int position);//刪除一個類
int AddPatToClus(PATTERN_S *p,CLUSTER_S *c);//將一個模式加入一個類節(jié)點
int CombineCluster(int posc1, int posc2);//根據(jù)位置參數(shù)合并兩個類
int SeperateCluster(CLUSTER_S *c);//將一個類分裂
////////////////////////////////////////////////////////////////////////////////
// iso-data算法的步驟 //
////////////////////////////////////////////////////////////////////////////////
int Step1();//參數(shù)設置、模式輸入、隨機產(chǎn)生初始分類
int Step2();//根據(jù)模式與每個類之間的距離,將其加入距離最小的一個類
int Step3();//如果類太小,合并并返回第二步
int Step4();//計算類心、模式類心平均距離
int Step5();//根據(jù)類的數(shù)量判斷是交分裂處理還是交給合并處理
int Step6_7();//計算類內(nèi)距離的標準差矢量的最大值
int Step8();//根據(jù)類內(nèi)距離的標準差矢量的最大值判斷是否分裂并分裂
int Step9_10();//根據(jù)類心間距離判斷是否合并并合并
int Step11();//判斷是否繼續(xù)迭代或結(jié)束
////////////////////////////////////////////////////////////////////////////////
// iso-data算法的全程函數(shù) //
////////////////////////////////////////////////////////////////////////////////
void Test();
void Process();
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -