1 / 13
文档名称:

人工智能-合一算法(C++).docx

格式:docx   大小:1,449KB   页数:13页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

人工智能-合一算法(C++).docx

上传人:艾米 2023/1/3 文件大小:1.42 MB

下载得到文件列表

人工智能-合一算法(C++).docx

文档介绍

文档介绍:该【人工智能-合一算法(C++) 】是由【艾米】上传分享,文档一共【13】页,该文档可以免费在线阅读,需要了解更多关于【人工智能-合一算法(C++) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。人工智能-合一算法(C++)
Transformdifferent(conststringf1,conststringf2)//求差异集
{
inti=0;
Transformt;
while((i)==(i))
i++;
intj1=i;
while(j1<()-1&&(j1)!=',')
j1++;
if(j1-i==0)returnt;
=(i,j1-i);
intj2=i;
while(j2<()-1&&(j2)!=',')
j2++;
if(j2-i==0)returnt;
=(i,j2-i);
while([j1-i-1]==[j2-i-1])
{
(j1-1-i);
(j2-i-1);
j1--;
j2--;
}
returnt;
}
boolsame(conststringf1,conststringf2);//判断两个公式是否相同
stringchange(stringf,Transformt);//用代换q对公式f进行合一代换
boollegal(Transform&t);//
intvar(conststrings);//s中每个()内的子串是变量还是常量
voidshow();//最终演示算法
};
boolSyncretism::Issyn(stringf1,stringf2,vector<Transform>&lan)
{
while(!same(f1,f2))
{
Transformt=different(f1,f2);
boolflag=legal(t);
if(!flag)
returnfalse;
else
{
(t);//将t加入vectorlan中
if(flag)
{
f1=change(f1,());//用lan的最后一个元素代换
f2=change(f2,());
cout<<"变换后:"<<endl;
cout<<"f1:"<<f1<<endl;
cout<<"f2:"<<f2<<endl<<endl;
}
if(same(f1,f2))break;
}
}
returntrue;
}
boolSyncretism::same(conststringf1,conststringf2)
{
if((f2)==0)returntrue;
elsereturnfalse;
}
stringSyncretism::change(stringf,Transformt)
{
inti=();
while(i<())
{
i=();
if(i<())
f=(i,(),);
}
returnf;
}
boolSyncretism::legal(Transform&t)
{
if(()==0||==0)
returnfalse;
elseif(var()==0||var()==0)returnfalse;
elseif(var()==1&&var()==1&&()!=0)
returnfalse;
elseif(var()==2)
{
if(var()==1)
{
stringtemp=;//变量常量交换位置
=;
=temp;
}
else
{
inti1=var();
i1=iC;
iC=0;
inti2=var();
i2=iC;
if(i1<i2)
{
stringtemp=;//变量常量交换位置
=;
=temp;
}
}
returntrue;
}
else
returntrue;
}
intSyncretism::var(conststrings)
{
if(()==0)return0;//空
if(()==1&&s[0]>='a'&&s[0]<='g')return1;//常量
if(()>1)
{
inti=0;
while(i<()&&(i)!='(')
i++;
iC++;
stringss=(i+1,()-i-2);//抽取s中的匹配的()中的子串
returnvar(ss);
}
elsereturn2;
}
voidSyncretism::show()
{
cout<<"常量:形如a,b,c,d(a-g)等"<<endl<<"变量:形如x,y,z,u等"<<endl;
stringf1,f2;
cout<<"输入F1:";
cin>>f1;
cout<<"输入F2:";
cin>>f2;
vector<Transform>lan;
if(Issyn(f1,f2,lan))
{
if(same(f1,f2))//如果f1,f2相同则合一为ε
{
cout<<"合一σ=ε"<<endl;
return;
}
cout<<"合一σ={";
for(inti=0;i<()-1;i++)
cout<<lan[i].t_f1<<"/"<<lan[i].t_f2<<",";
cout<<lan[i].t_f1<<"/"<<lan[i].t_f2<<"}"<<