📄 semimini.h
字号:
// SemiMiniDoc4.h: interface for the CSemiMiniDoc class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SEMIMINIDOC4_H__ED928B80_0043_11D4_A665_0080C8E242DA__INCLUDED_)
#define AFX_SEMIMINIDOC4_H__ED928B80_0043_11D4_A665_0080C8E242DA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef MAX
#define MAX 20
#endif
class CSemiMini //等价Neugen贪心算法的原代码
{
public:
BOOL ReadDataFromFile(char *filename);
// 从文件中读取决策表中的信息,通过调用SetDataType,SetAttName,SetStringTable实现
char** pDataType;
char** pAttName;
char*** pStringTable;//保存决策表的属性值,用字符串形式存储
int iAttNum;
int iRecordNum;
/////////////
/////以下几行为增加部分,处理字符串属性
char*** pStrResult;
double** pNonStringTable;//存放非字符串属性值
int** pStringTableResult;
int iStrAttNum,iNonStrAttNum;//存放表中条件属性的数目
BOOL readAttrInfo(FILE* fp); //将属性名称读入pAttName中,数据类型读入pDataType中
BOOL readTable(FILE* fp); //将字符值读入pStringTable中,非字符串值读入pNonStringTable中
void doString();// 处理字符串类型数据
int* strCuts; //字符串属性断点个数
/////////////
void OnSemiMinidisSave(LPCTSTR lpszPathName);
//保存离散化后的结果,包括离散化后的决策表和所选取的断点集
BOOL OnSemiMinidis(); //具体实现离散化的地方
//通过调用实现InitTable(),GetCut(),GetNewTable()实现
CSemiMini();
virtual ~CSemiMini();
double **InfoTable;//保存决策表的属性值,用浮点数形式存储
protected:
// BOOL SetDataType(FILE* fp,int count); //将数据类型读入pDataType中
// BOOL SetAttName(FILE* fp,int count); //将属性名称读入pAttName中
// BOOL SetStringTable(FILE* fp,int column,int row);//将字符值读入pStringTable中
int **Wp; //和MidCut相对,Wp[i][j]候选断点MidCut[i][j]能区分出的实例对的数目
double **MidCut;//保存候选断点,MidCut[i][j]保存第i个属性的第j个候选断点,
//MidCut[i][0]保存
int **NewTable;
double **Cut;//保存实际选取的断点,根据Wp的值选取,每次选一个Wp中最大的
double* GetDeciSet();//返回一个数组,记录了决策属性的所有出现的值
double** GetLastCut();
//根据选出的断点集,求得最终的断点集,原先的断点集不是连续的(是有序的),即它留下了每个候选断点的
//位置,只有最终选上的断点位置上才不为0,按顺序选出这些断点,形成新的断点集是连续的
int ** SplitSet(int **&Set,int& N,double cut,int m);
//根据断点cut把原来的等价类集合划分成新的等价类集合并返回,新集合的个数保存在N中
void SelectSort(double* &Mid);// 对出现的属性值进行排序
int ComputeWp(int **X,int N,double midcut,int m);
//根据等价类X,计算并返回断点midcut所能区分出的实例对的个数
int judge(int **X, int N);
//判断X中的集合是否全部由决策相同的等价类组成 N为X中的集合的个数
//如果全部由相同的等价类组成,则返回值为0,否则返回值为1;
void GetMidCut();
//计算出所有的候选断点,并存入MidCut中,候选断点的值既是取出现每两个相邻的属性值的中值
void GetNewTable();// 根据所选取的断点,计算出集散化后新的决策表并存入NewTable中
virtual void GetCut();//得到实际选取的断点集
// int InitTable();//将pStringTable中的字符串属性值转换成浮点型并存入InfoTable数组中
char cStyle[10];
int iStage;
bool *AttrNonStr; //新增判断伪,为0,表示不进行离散化
bool *AttrStr;
};
#endif // !defined(AFX_SEMIMINIDOC4_H__ED928B80_0043_11D4_A665_0080C8E242DA__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -