📄 knear.h
字号:
// KNear.h: interface for the CKNear class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_KNEAR_H__86EEE553_3C1F_489A_B825_0C84E21A84C3__INCLUDED_)
#define AFX_KNEAR_H__86EEE553_3C1F_489A_B825_0C84E21A84C3__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//////////////////////////////////////////////
// K近邻法估计概率密度
/////////////////////////////////////////////
//////////////////////////////////////////////
//
// Note:
// 目前只能处理1维情况!!!!!!!!!!!!!!!!!!!!!
//
// k Nearest neighbor method
//////////////////////////////////////////////
#include "estimate.h"
class CKNN : public CEstimate
{
public:
typedef struct DISTANCE
{
int iIndex; //样点的序号
double dbDist; //改样点和x的距离
double x; //样点的x1分量 (主要因为只能处理1维,所以做此下策)
}DISTANCE;
public:
CKNN(int nDim);
virtual ~CKNN();
public:
//获得X处的概率密度估计值
//重载基类方法
virtual double Probility(vector<double> x);
private:
DISTANCE * m_pDist;
int m_nCount; //样点个数,此处需要主要是为了 pDist使用
protected:
//计算x附近含Kn个点的区域的体积
inline double CaculateVn(int kn);
};
/***************************************
*Bug!
* I can only dispose one dimension vector!
*
***************************************/
inline double CKNN::CaculateVn(int kn)
{
double dbMin = m_pDist[0].x;
double dbMax = m_pDist[0].x;
for (int i = 0;i < kn; i++)
{
dbMin = min(m_pDist[i].x , dbMin);
dbMax = max(m_pDist[i].x , dbMax);
}
return (dbMax-dbMin);
}
#endif // !defined(AFX_KNEAR_H__86EEE553_3C1F_489A_B825_0C84E21A84C3__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -