mibark.h

来自「某个实验事编写粗糙集智能信息处理的程序」· C头文件 代码 · 共 129 行

H
129
字号
// MIBARK.h: interface for the CMIBARK class.
//
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "shareclass.h"

#if !defined(AFX_MIBARK_H__9F0EE422_24ED_11D5_8B35_0080C8E222A1__INCLUDED_)
#define AFX_MIBARK_H__9F0EE422_24ED_11D5_8B35_0080C8E222A1__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
 
class CMIBARK  
{
public:
	CMIBARK();

	// Implementation
public:
    static int iTempFileNum;	//临时文件的编号
	int pAttReduce;
    bool bBlock;		//是否有block
	int iBlockNum;		//block的数目
	char*** pBlockTable;	//放block的表
	struct WCutRecord* struWCutRecord;	//放置断点的链表的入口
	bool bCuts;		//是否有断点
    bool  bSaveTempResult;		//是否保存临时结果
	static CString strFileName;		//保存的文件名
	int** pIntTable;		//整型表
    char** pAttName;		//属性名
    int iInteger;			//整形数的列数
	int iRecordNum;			//记录数
	int iAttNum;			//条件属性个数
	int iStage;				//处理的阶段
	char cStyle[10];		//文件类型
	char** pDataType;		//数据类型
    void GetData(char* FileName);//从文件中读取相关信息,包括记录数,属性名,属性类型,断点值以及决策表值 
	bool SetCutResult(FILE* fp);//将断点读入到CutRecord结构中
	bool SetIntegerTable(FILE *fp,int column, int row);	//将整形值读入到pIntTable中
    bool SetDataType(FILE* fp,int count);//将数据类型读入pDataType中
	bool SetAttName(FILE* fp,int count);//将属性名称读入pAttName中
    void  FreeContent(); //释放所有可能分配了的内存
public:
    int **info;          //原始表,以转化为int。二维指针
	 int con_num;        //条件属性数
	 int rec_num;        //记录对象数
     int element;        //可辩识(决策)矩阵中的元素个数
     int ** array;       //可辩识(决策)矩阵的指针
     int reduct_num;     //共有几组属性约简结果
	
	 int redu_att_num;   //约简后的核属性数
	 int redu_num;       //约简后的条件属性个数
	 int red_dec_num;    //决策属性数
	 int result_num;

	 int *reductset;  //约简核属性集(数字式)
	 int *attreductset;//约简条件属性集
	 int *decreductset; //约简后的决策属性集。
	 int *resultset; //约简结果
	 int *attallreductset;
	 //int *attreducttemset;
     int *attreductsetxu;

     int ** result;               //约简结果
     char *** reduct_att;  //属性约简后的条件属性集



//////////////////////////////////
//	 添加的内容
//////////////////////////////////
	 int **IND_Attrb; //保存对决策表的一个划分
     int IND_Order;//保存该划分的集合个数
	 int IND_MaxNum; //IND_MaxNum表示在上面划分的所有集合中
	 //元素最多的集合所包含的元素的个数
public:
	bool InitTable();//将决策表值从pIntTable复制到info中,把字符型表转化为int类型
    
	int  Create_Array();  //建立可辨识矩阵或决策矩阵
	//建立可辨识矩阵与array中,其中不保存重复的属性组合,也没有保存该属性组合是属于
    //哪两个记录的,并且对于每个属性组合只保留了前两个使他们不同的属性,因为计算核属
    //性既是只有一个属性能区分这两个记录的属性,所以只选择个数为一的属性,而不用全部记录下来,
    //array[i][0]保存的是第i个属性组合的个数(不是1就是2)

    bool Reduct_Table();//计算属性组合//根据互信息选择最终的属性集

   //得到属性表,attredu中保存的是属性的编号,reduct_att中保存的是属性的名称
	bool Get_Att(int ** att,int num);
	
	 //初步简化决策表,删除多余的行,把简化后的决策表保存在info中
	int  Create_Table();  
  	void SelectSort(int * att);  //用选择法对约简后的属性(数组att)按从小到大排序
	bool  SaveFile(char* pFileName);//是否要进行存档

//根据属性集合b对决策表进行划分,B表示属性集合b的元素个数,rownum表示要划分的记录的个数
//划分结果保存在IND_Attrb中,IND_Order表示划分成的集合的个数,IND_MaxNum表示所有集合中
//元素最多的集合所包含的元素的个数
     void IND(int *b, int B, int rownum);

	  //IND_Attrb中的第i个集合与Y中第j个集合交集的元素个数
     int YX_Jiao(int j, int i, int **IND_Y );

	 //计算属性集p相对于属性集q的条件熵,Q和P分别保存了集合q和p的元素个数
     double Entropy(int *q , int Q,int *p ,int P);//H(q|p)

	 //计算并返回决策属性的熵值H(D),划分结果保存在IND_Attrb中
	 double EntropyDec(int *q,int Q);
public:
	//计算划分SetX中包含的集合的个数,即Card(U|X)
	virtual ~CMIBARK();
    bool MIBARK();
    int nSelected;
// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CReduct)
	//}}AFX_VIRTUAL

// Implementation
protected:

};

#endif // !defined(AFX_MIBARK_H__9F0EE422_24ED_11D5_8B35_0080C8E222A1__INCLUDED_)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?