📄 clust.h
字号:
#ifndef Clust_h
#define Clust_h
class Clust;
class ClustNode;
class ClustSet;
class Phylip;
class SortedNode;
const unsigned RB_NIL = ((unsigned) 0xfff0);
class ClustNode
{
public:
ClustNode()
{
m_uIndex = uInsane;
m_uSize = uInsane;
m_dLength = (float) dInsane;
m_ptrLeft = 0;
m_ptrRight = 0;
m_ptrParent = 0;
m_ptrNextCluster = 0;
m_ptrPrevCluster = 0;
m_uLeafIndexes = 0;
}
~ClustNode()
{
delete[] m_uLeafIndexes;
}
unsigned m_uIndex;
unsigned m_uSize;
float m_dLength;
ClustNode *m_ptrLeft;
ClustNode *m_ptrRight;
ClustNode *m_ptrParent;
ClustNode *m_ptrNextCluster;
ClustNode *m_ptrPrevCluster;
unsigned *m_uLeafIndexes;
};
class Clust
{
public:
Clust();
virtual ~Clust();
void Create(ClustSet &Set, CLUSTER Method);
unsigned GetLeafCount() const;
unsigned GetClusterCount() const;
unsigned GetClusterSize(unsigned uNodeIndex) const;
unsigned GetLeaf(unsigned uClusterIndex, unsigned uLeafIndex) const;
unsigned GetNodeCount() const { return 2*m_uLeafCount - 1; }
const ClustNode &GetRoot() const { return m_Nodes[GetRootNodeIndex()]; }
unsigned GetRootNodeIndex() const { return m_uNodeCount - 1; }
const ClustNode &GetNode(unsigned uNodeIndex) const;
bool IsLeaf(unsigned uNodeIndex) const;
unsigned GetLeftIndex(unsigned uNodeIndex) const;
unsigned GetRightIndex(unsigned uNodeIndex) const;
float GetLength(unsigned uNodeIndex) const;
float GetHeight(unsigned uNodeIndex) const;
const char *GetNodeName(unsigned uNodeIndex) const;
unsigned GetNodeId(unsigned uNodeIndex) const;
JOIN GetJoinStyle() const { return m_JoinStyle; }
LINKAGE GetCentroidStyle() const { return m_CentroidStyle; }
void SetDist(unsigned uIndex1, unsigned uIndex2, float dDist);
float GetDist(unsigned uIndex1, unsigned uIndex2) const;
void ToPhylip(Phylip &tree);
void LogMe() const;
//private:
void SetLeafCount(unsigned uLeafCount);
void CreateCluster();
void JoinNodes(unsigned uLeftNodeIndex, unsigned uRightNodeIndex,
float dLeftLength, float dRightLength, unsigned uNewNodeIndex);
void ChooseJoin(unsigned *ptruLeftIndex, unsigned *ptruRightIndex,
float *ptrdLeftLength, float *ptrdRightLength);
void ChooseJoinNeighborJoining(unsigned *ptruLeftIndex, unsigned *ptruRightIndex,
float *ptrdLeftLength, float *ptrdRightLength);
void ChooseJoinNearestNeighbor(unsigned *ptruLeftIndex, unsigned *ptruRightIndex,
float *ptrdLeftLength, float *ptrdRightLength);
float ComputeDist(unsigned uNewNodeIndex, unsigned uNodeIndex);
float ComputeDistAverageLinkage(unsigned uNewNodeIndex, unsigned uNodeIndex);
float ComputeDistMinLinkage(unsigned uNewNodeIndex, unsigned uNodeIndex);
float ComputeDistMaxLinkage(unsigned uNewNodeIndex, unsigned uNodeIndex);
float ComputeDistNeighborJoining(unsigned uNewNewIndex, unsigned uNodeIndex);
float ComputeDistMAFFT(unsigned uNewNewIndex, unsigned uNodeIndex);
float Calc_r(unsigned uNodeIndex) const;
unsigned VectorIndex(unsigned uIndex1, unsigned uIndex2) const;
unsigned GetFirstCluster() const;
unsigned GetNextCluster(unsigned uNodeIndex) const;
float ComputeMetric(unsigned uIndex1, unsigned uIndex2) const;
float ComputeMetricNearestNeighbor(unsigned i, unsigned j) const;
float ComputeMetricNeighborJoining(unsigned i, unsigned j) const;
void InitMetric(unsigned uMaxNodeIndex);
void InsertMetric(unsigned uIndex1, unsigned uIndex2, float dMetric);
float GetMinMetric(unsigned *ptruIndex1, unsigned *ptruIndex2) const;
float GetMinMetricBruteForce(unsigned *ptruIndex1, unsigned *ptruIndex2) const;
void DeleteMetric(unsigned uIndex);
void DeleteMetric(unsigned uIndex1, unsigned uIndex2);
void ListMetric() const;
void DeleteFromClusterList(unsigned uNodeIndex);
void AddToClusterList(unsigned uNodeIndex);
void RBDelete(unsigned RBNode);
unsigned RBInsert(unsigned i, unsigned j, float fMetric);
unsigned RBNext(unsigned RBNode) const;
unsigned RBPrev(unsigned RBNode) const;
unsigned RBMin(unsigned RBNode) const;
unsigned RBMax(unsigned RBNode) const;
void ValidateRB(const char szMsg[] = 0) const;
void ValidateRBNode(unsigned Node, const char szMsg[]) const;
//private:
JOIN m_JoinStyle;
LINKAGE m_CentroidStyle;
ClustNode *m_Nodes;
unsigned *m_ClusterIndexToNodeIndex;
unsigned *m_NodeIndexToClusterIndex;
unsigned m_uLeafCount;
unsigned m_uNodeCount;
unsigned m_uClusterCount;
unsigned m_uTriangularMatrixSize;
float *m_dDist;
ClustSet *m_ptrSet;
ClustNode *m_ptrClusterList;
};
#endif // Clust_h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -