⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 semimini.h

📁 某个实验事编写粗糙集智能信息处理的程序
💻 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 + -