欢迎来到天天文库
浏览记录
ID:6567193
大小:36.66 KB
页数:6页
时间:2018-01-18
《qm算法源代码及说明》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、QM算法说明一、需求分析本算法要求输入一最小项和无关项的待化简表达式,通过程序处理输出化简后的结果。二、算法流程程序首先要求用户输入待化简表达式的变量数,然后要求用户逐个输入值为1的项,以2表示输入结束,再要求用户逐个输入无关项同样以2结束。程序将用户输入的所有数据储存在一个数据容器vector中,并将相关项单独存在另一个vector中。然后程序通过循环遍历所有相关项,将相邻的项合并成蕴涵项存入新建的vector中,无法再合并的项显然为本源蕴涵项,存入专门的容器。之后再对新建的vector中的蕴涵项重复上述操作,直到找到所有的本源蕴涵项。由于变量最多为10个,故合并最多进行10次,故所有合并
2、可在一个10元vector数组内完成。当之前的工作完成时,此时显然已找到所有的本源蕴涵项,此时遍历之前存储的相关项,统计被覆盖的次数并输出只被覆盖一次的项所属的本源蕴涵项(皆为本质本源蕴涵项)。之后再从vector尾部开始输出其他本源蕴涵项直到所有的相关项都被覆盖为止。三、运行结果测试数据采用《现代逻辑设计》(第二版)P86的样例,F=Σm(4,5,6,8,9,10,13)+d(0,7,15);结果并非最优的,是因为最后没有寻找最小覆盖导致的。附:C++源代码#include#include#include#include/
3、/#includeusingnamespacestd;//ofstreamout("c://a.log");boolcomp(intn,char*a,char*b){for(inti=0;i4、elsereturn-1;}boolcointain(intn,char*a,char*b){for(inti=0;iv[10];vectorrelative;vectorprime;vectorresult;boolflag[2];cout<<"输入变量数:"<>n;temp=newchar[n]5、;cout<<"请输入最小项(2结束):"<>temp[i];if(temp[i]!='0'&&temp[i]!='1'){flag[0]=false;break;}}if(flag[0]){v[0].push_back(newchar[n]);relative.push_back(newchar[n]);strcpy(v[0].back(),temp);strcpy(relative.back(),temp);}}cout<<"请输入无关项(2结束):"<6、=true;while(flag[0]){for(i=0;i>temp[i];if(temp[i]!='0'&&temp[i]!='1'){flag[0]=false;break;}}if(flag[0]){v[0].push_back(newchar[n]);strcpy(v[0].back(),temp);}}for(i=0;i<10;i++){if(v[i].empty())break;for(j=0;j7、],v[i][k])!=-1){strcpy(temp,v[i][j]);temp[implicant(n,v[i][j],v[i][k])]='-';flag[1]=true;flag[0]=true;for(l=0;l
4、elsereturn-1;}boolcointain(intn,char*a,char*b){for(inti=0;iv[10];vectorrelative;vectorprime;vectorresult;boolflag[2];cout<<"输入变量数:"<>n;temp=newchar[n]
5、;cout<<"请输入最小项(2结束):"<>temp[i];if(temp[i]!='0'&&temp[i]!='1'){flag[0]=false;break;}}if(flag[0]){v[0].push_back(newchar[n]);relative.push_back(newchar[n]);strcpy(v[0].back(),temp);strcpy(relative.back(),temp);}}cout<<"请输入无关项(2结束):"<6、=true;while(flag[0]){for(i=0;i>temp[i];if(temp[i]!='0'&&temp[i]!='1'){flag[0]=false;break;}}if(flag[0]){v[0].push_back(newchar[n]);strcpy(v[0].back(),temp);}}for(i=0;i<10;i++){if(v[i].empty())break;for(j=0;j7、],v[i][k])!=-1){strcpy(temp,v[i][j]);temp[implicant(n,v[i][j],v[i][k])]='-';flag[1]=true;flag[0]=true;for(l=0;l
6、=true;while(flag[0]){for(i=0;i>temp[i];if(temp[i]!='0'&&temp[i]!='1'){flag[0]=false;break;}}if(flag[0]){v[0].push_back(newchar[n]);strcpy(v[0].back(),temp);}}for(i=0;i<10;i++){if(v[i].empty())break;for(j=0;j7、],v[i][k])!=-1){strcpy(temp,v[i][j]);temp[implicant(n,v[i][j],v[i][k])]='-';flag[1]=true;flag[0]=true;for(l=0;l
7、],v[i][k])!=-1){strcpy(temp,v[i][j]);temp[implicant(n,v[i][j],v[i][k])]='-';flag[1]=true;flag[0]=true;for(l=0;l
此文档下载收益归作者所有