liedynamicreduct.h

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

H
80
字号
#if !defined(AFX_LIEDYNAMICREDUCT_H__CB883879_B28E_11D5_A0FF_0080C8E21834__INCLUDED_)
#define AFX_LIEDYNAMICREDUCT_H__CB883879_B28E_11D5_A0FF_0080C8E21834__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// LieDynamicReduct.h : header file
/*-------------------------------------------------------------

  动态约简算法1.

  算法描述如下:
    1.先计算一个约简结果集(使用可辨识矩阵)
	2.随机删除若干个记录(records),再次计算约简结果集
	3.重复2直到某个条件(剩下的记录数少于40%)为止
	4.计算1结果中各约简在2结果中出现的次数(trade).次数多,则表明结果
	较优.
  作者: Kylin Li
  时间: 2000.10
  
  依赖的类:
     STL list类    (c++ Standard Template Liaray)
	 CTable        (约简公共基类 table.h)
	 CLieBitArray  (位运算包装类 liebitarray.h)

  使用方法:
     CTable* table=new CLieDynamicReduct;
	 //or CLieDynamicReduct *table=new CLieDynamicReduct;
	 if(table->Perform("inputfilename","outputfilename"))
	    //ok!
	 else
	    // error happened,mostly storage insufficient.
	 delete table;
  
  其它说明:
     构造函数中调用srand()初始化了随机数生成器.

--------------------------------------------------------------*/
#include "../table.h"
#include<list>
#include "liebitarray.h"


typedef std::list<CLieBitArray> Contain;
typedef std::pair<CLieBitArray,int> Result_Node;
typedef std::list<Result_Node> Result_Contain;
class CLieDynamicReduct : public CTable
{
public:
	CLieDynamicReduct();           
	virtual ~CLieDynamicReduct();

protected:
	bool Initialize(CString FileName);
	bool reduct();
	bool WriteFile(CString name);

private:
	bool CreateDescMatrix(Contain& table);		//创建可辨识矩阵
	
	//从matrix中得到约简结果reducts
	bool GetReductsFromMatrix(const Contain& matrix,Contain& reducts);
	void ReductMatrix(Contain& matrix);	//化简matrix(针对可辨识矩阵)
	void RandomDelete(long num);		//随机删除num个记录

private:
	Result_Contain result;
	//下面两个值在约简之前(使用他们之前)确定.
	//其中 times_of_del 默认为40.
	int num_of_del_every_time;
	int times_of_del;
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_LIEDYNAMICREDUCT_H__CB883879_B28E_11D5_A0FF_0080C8E21834__INCLUDED_)

⌨️ 快捷键说明

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