QM算法源代码及说明.docx

上传人:m**** 文档编号:551712459 上传时间:2022-10-14 格式:DOCX 页数:6 大小:36.66KB
返回 下载 相关 举报
QM算法源代码及说明.docx_第1页
第1页 / 共6页
QM算法源代码及说明.docx_第2页
第2页 / 共6页
QM算法源代码及说明.docx_第3页
第3页 / 共6页
QM算法源代码及说明.docx_第4页
第4页 / 共6页
QM算法源代码及说明.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《QM算法源代码及说明.docx》由会员分享,可在线阅读,更多相关《QM算法源代码及说明.docx(6页珍藏版)》请在金锄头文库上搜索。

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 /#include using namespace std;/ofs

3、tream out(c:/a.log);bool comp(int n, char* a, char* b)for(int i=0; in; i+)if(ai!=bi & (ai!=-&bi!=-)return false;return true;int implicant(int n, char*a, char*b)int count = 0,temp;for(int i=0; in; i+)if(ai!=bi)count+;temp = i;if(count = 1)return temp;else return -1;bool cointain(int n, char* a, char*

4、 b)for(int i=0; in; i+)if(ai!=bi & (ai!=-)return false;return true;int main()int i,j,k,l,n,count,tmp;char *temp,c;vector v10;vector relative;vector prime;vector result;bool flag2;cout输入变量数:n;temp = new charn;cout请输入最小项(2结束):endl;flag0 = true;while(flag0)for(i = 0; itempi;if(tempi!=0 & tempi!=1)flag0

5、 = false;break;if(flag0)v0.push_back(new charn);relative.push_back(new charn);strcpy(v0.back(),temp);strcpy(relative.back(),temp);cout请输入无关项(2结束):endl;flag0 = true;while(flag0)for(i = 0; itempi;if(tempi!=0 & tempi!=1)flag0 = false;break;if(flag0)v0.push_back(new charn);strcpy(v0.back(),temp);for(i =

6、 0; i10; i+)if(vi.empty()break;for(j = 0; jvi.size(); j+)flag0 = false;for(k = 0; kvi.size(); k+)if(implicant(n,vij,vik)!=-1)strcpy(temp,vij);tempimplicant(n,vij,vik)=-;flag1 = true;flag0 = true;for(l=0;lvi+1.size();l+)if(!strcmp(vi+1l,temp)flag1 = false;if(flag1)vi+1.push_back(new charn);strcpy(vi+

7、1.back(),temp);if(!flag0)prime.push_back(new charn);strcpy(prime.back(),vij);for(i=0;irelative.size() & !relative.empty();i+)count = 0;for(j = 0; jprime.size()& !prime.empty(); j+)if(comp(n,relativei,primej)count+;tmp=j;if(count=1)result.push_back(new charn);strcpy(result.back(),primetmp);for(j=0;jr

8、elative.size();j+)if(comp(n,relativej,primetmp)relative.erase(relative.begin()+j);j-;prime.erase(prime.begin()+tmp);i-;while(!relative.empty()strcpy(temp, prime.back();prime.pop_back();count = 0;for(i=0;i 0)result.push_back(new charn);strcpy(result.back(),temp);while(!result.empty()for(i = 0; i 4; i+)cout*(result.back()+i);cout ;result.pop_back();coutendl;system(PAUSE);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号