📄 c45.pas
字号:
listview1.items.clear;
setvalue(i1,i2,j1,j2,k1,k2); //以下为找第一层
for v:=0 to 5 do
begin
first;
while not eof do //是否读到dataset的最后一条记录
begin
oneEnt(i1,i2,j1,j2,k1,k2,lie1array[v],i1,i2,j1,j2,k1,k2);
next;
end;
EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
E[v]:=gain;
setvalue(i1,i2,j1,j2,k1,k2);
end;
max:=E[0]; //找信息增益的最大值
for v:=1 to 5 do
begin
if E[v]>max
then
max:=E[v];
end;
vh:=-1;
for v:=0 to 5 do
begin
if E[v]=max
then
begin
item := listview1.items.add;
item.caption := '1' ;
node[0]:=lie1array[v];
item.subitems.Add(node[0]) ;
item.subitems.Add(floattostr(max));
end
else
begin
vh:=vh+1;
H[0][vh]:=lie1array[v]; //产生候选数组,前5个
end;
end;
setvalue(i1,i2,j1,j2,k1,k2); //以下为找第二层的‘是分支’
for v:=0 to 4 do
begin
first;
while not eof do //是否读到dataset的最后一条记录
begin
with adoquery1 do
judge:=(fieldbyname(node[0]).AsVariant='1');
twoEnt(i1,i2,j1,j2,k1,k2,H[0][v],judge,i1,i2,j1,j2,k1,k2);
next;
end;
EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
E[v]:=gain;
setvalue(i1,i2,j1,j2,k1,k2);
end;
max:=E[0];
for v:=1 to 4 do
begin
if E[v]>max
then
max:=E[v];
end;
vh:=-1;
for v:=0 to 4 do
begin
if E[v]=max
then
begin
item := listview1.items.add;
item.caption := '2' ;
node[1]:=H[0][v];
item.subitems.Add(node[1]) ;
item.subitems.Add(floattostr(max));
end
else
begin
vh:=vh+1;
H[1][vh]:=H[0][v]; //产生候选数组,前4个
end;
end;
setvalue(i1,i2,j1,j2,k1,k2); //以下为找第二层的‘否分支’
for v:=0 to 4 do
begin
first;
while not eof do //是否读到dataset的最后一条记录
begin
with adoquery1 do
judge:=(fieldbyname(node[0]).AsVariant='0');
twoEnt(i1,i2,j1,j2,k1,k2,H[0][v],judge,i1,i2,j1,j2,k1,k2);
next;
end;
EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
E[v]:=gain;
setvalue(i1,i2,j1,j2,k1,k2);
end;
max:=E[0];
for v:=1 to 4 do
begin
if E[v]>max
then
max:=E[v];
end;
vh:=-1;
for v:=0 to 4 do
begin
if E[v]=max
then
begin
item := listview1.items.add;
item.caption := '2' ;
node[2]:=H[0][v];
item.subitems.Add(node[2]) ;
item.subitems.Add(floattostr(max));
end
else
begin
vh:=vh+1;
H[2][vh]:=H[0][v];
end; //产生候选数组,前4个
end;
for n:=0 to 3 do //以下为找第三层
begin
setvalue(i1,i2,j1,j2,k1,k2);
selectint(n/2,m_2);
selectint(n/4,m_4);
//selectint(n/8,m_8);
for v:=0 to 3 do
begin
first;
while not eof do //是否读到dataset的最后一条记录
begin
with adoquery1 do
judge:=(fieldbyname(node[m_4]).AsVariant=N4[n,0])and(fieldbyname(node[(m_2+1)]).AsVariant=N4[n,1]);
twoEnt(i1,i2,j1,j2,k1,k2,H[(m_2+1),v],judge,i1,i2,j1,j2,k1,k2);
next;
end;
EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
E[v]:=gain;
setvalue(i1,i2,j1,j2,k1,k2);
end;
max:=E[0];
for v:=1 to 3 do
begin
if E[v]>max
then
max:=E[v];
end;
vh:=-1;
for v:=0 to 3 do
begin
if E[v]=max
then
begin
item := listview1.items.add;
item.caption := '3' ;
node[n+3]:=H[(m_2+1),v];
item.subitems.Add(node[n+3]) ;
item.subitems.Add(floattostr(max));
end
else
begin
vh:=vh+1;
H[(n+3),vh]:=H[(m_2+1),v];
end; //产生候选数组,前3个
end;
end; //for(n)'s end
for n:=0 to 7 do //以下为找第四层
begin
setvalue(i1,i2,j1,j2,k1,k2);
selectint(n/2,m_2);
selectint(n/4,m_4);
selectint(n/8,m_8);
for v:=0 to 2 do
begin
first;
while not eof do //是否读到dataset的最后一条记录
begin
with adoquery1 do
judge:=(fieldbyname(node[m_8]).AsVariant=N8[n,0])and(fieldbyname(node[(m_4+1)]).AsVariant=N8[n,1])and(fieldbyname(node[(m_2+3)]).AsVariant=N8[n,2]);
twoEnt(i1,i2,j1,j2,k1,k2,H[(m_2+3),v],judge,i1,i2,j1,j2,k1,k2);
next;
end;
EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
E[v]:=gain;
setvalue(i1,i2,j1,j2,k1,k2);
end;
max:=E[0];
for v:=1 to 2 do
begin
if E[v]>max
then
max:=E[v];
end;
if (max>0)
then
begin
vh:=-1;
for v:=0 to 2 do
begin
if (E[v]=max)
then
begin
item := listview1.items.add;
item.caption := '4' ;
node[n+7]:=H[(m_2+3),v];
item.subitems.Add(node[n+7]) ;
item.subitems.Add(floattostr(max));
end
else
begin
vh:=vh+1;
H[(n+7),vh]:=H[(m_2+3),v];
end; //产生候选数组,前2个
end;
end; //max>0's end
if (max<=0)
then
begin
item := listview1.items.add;
item.caption := '4' ;
node[n+7]:=H[(m_2+3),2];
item.subitems.Add('***') ;
item.subitems.Add('000');
vh:=-1;
for v:=0 to 1 do
begin
vh:=vh+1;
H[(n+7),vh]:=H[(m_2+3),v];
end; //产生候选数组,前2个
end; //max<=0's end
end; //for(n)'s end
for n:=0 to 15 do //以下为找第五层
begin
setvalue(i1,i2,j1,j2,k1,k2);
selectint(n/2,m_2);
selectint(n/4,m_4);
selectint(n/8,m_8);
selectint(n/16,m_16);
for v:=0 to 1 do
begin
first;
while not eof do //是否读到dataset的最后一条记录
begin
with adoquery1 do
judge:=(fieldbyname(node[m_16]).AsVariant=N16[n,0])and(fieldbyname(node[m_8+1]).AsVariant=N16[n,1])and(fieldbyname(node[(m_4+3)]).AsVariant=N16[n,2])and(fieldbyname(node[(m_2+7)]).AsVariant=N16[n,3]);
twoEnt(i1,i2,j1,j2,k1,k2,H[(m_2+7),v],judge,i1,i2,j1,j2,k1,k2);
next;
end;
EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
E[v]:=gain;
setvalue(i1,i2,j1,j2,k1,k2);
end;
max:=E[0];
v:=1 ;
if E[v]>max
then
max:=E[v];
if (max>0)
then
begin
vh:=-1;
for v:=0 to 1 do
begin
if (E[v]=max)
then
begin
item := listview1.items.add;
item.caption := '5' ;
node[n+15]:=H[(m_2+7),v];
item.subitems.Add(node[n+15]) ;
item.subitems.Add(floattostr(max));
end
else
begin
vh:=vh+1;
H[(n+15),vh]:=H[(m_2+7),v];
end; //产生候选数组,前1个
end;
end; //max>0's end
if (max<=0)
then
begin
item := listview1.items.add;
item.caption := '5' ;
node[n+15]:=H[(m_2+3),1];
item.subitems.Add('***') ;
item.subitems.Add('000');
vh:=-1;
//for v:=0 to 1 do
//begin
vh:=vh+1;
H[(n+15),vh]:=H[(m_2+3),0];
// end; //产生候选数组,前1个
end; //max<=0's end
end; //for(n)'s end
except
listview1.items.Clear;
messagedlg('运行出错',mtError,[mbok],0);
end ;
end;
finally
Listview1.Items.EndUpdate; //结束更新
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
listview1.items.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -