#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<iomanip.h>
#define N 500 //N 定义为给定训练数据的估计个数
#define M 6 //M 定义为候选属性的个数
#define c 2 //定义 c=2 个不同类
#define s_max 5 //定义 s_max 为每个候选属性所划分的含有最大的子集数
int av[M]={3,3,2,3,4,2};
int s[N][M+2],a[N][M+2]; //数组 s[j]用来记录第 i 个训练样本的第 j 个属性值
int path_a[N][M+1],path_b[N][M+1]; //用 path_a[N][M+1],path_b[N][M+1]记录每一片叶子的
路径
int count_list=M; //count_list 用于记录候选属性个数
int count=-1; //用 count+1 记录训练样本数
int attribute_test_list1[M];
int leaves=1;
//用数组 ss[k][j]表示第 k 个候选属性划分的子集 Sj 中类 Ci 的样本数,数组的具体大小可根
据给定训练数据调整
int ss[M][c][s_max];
//第 k 个候选属性划分的子集 Sj 中样本属于类 Ci 的概率
double p[M][c][s_max];
//count_s[j]用来记录第 i 个候选属性的第 j 个子集中样本个数
int count_s[M][s_max];
//分别定义 E[M],Gain[M]表示熵和熵的期望压缩
double E[M];
double Gain[M];
//变量 max_Gain 用来存储最大的信息增益
double max_Gain;
int Trip=-1; //用 Trip 记录每一个叶子递归次数
int most;
void main(void) {
int i,j=-1,k,temp,l,count_test,true_class=0,count_train;
char trainname[256],testname[256];
int test[N][8];
cout<<"请输入训练集文件名:";
cin>>trainname;
ifstream trainfile;
trainfile.open(trainname,ios::in|ios::nocreate);
if(!trainfile){
cout<<"无法使用训练集,请重试!"<<'';
exit(1);