qm算法源代码及说明.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
QM 算法说明 一、 需求分析 本算法要求输入一最小项和无关项的待化简表达式,通过程序处理输出化简后的结果。 二、 算法流程 程序首先要求用户输入待化简表达式的变量数, 然后要求用户逐个输入值为 1 的项, 以 2 表示输入结束,再要求用户逐个输入无关项同样以 2 结束。程序将用户输入的所有数 据储存在一个数据容器 vector 中,并将相关项单独存在另一个 vector 中。 然后程序通过循环遍历所有相关项,将相邻的项合并成蕴涵项存入新建的 vector 中, 无法再合并的项显然为本源蕴涵项,存入专门的容器。之后再对新建的 vector 中的蕴 涵项重复上述操作,直到找到所有的本源蕴涵项。由于变量最多为 10 个,故合并最多 进行 10 次,故所有合并可在一个 10 元 vector 数组内完成。 当之前的工作完成时, 此时显然已找到所有的本源蕴涵项, 此时遍历之前存储的相关项, 统计被覆盖的次数并输出只被覆盖一次的项所属的本源蕴涵项 (皆为本质本源蕴涵项) 。 之后再从 vector 尾部开始输出其他本源蕴涵项直到所有的相关项都被覆盖为止。 三、 运行结果 测试数据采用 《现代逻辑设计》 (第二版)P86 的样例, F=Σm(4,5,6,8,9,10,13)+d(0,7,15) ; 结果并非最优的,是因为最后没有寻找最小覆盖导致的。 附: C++源代码 #include iostream #include cmath #include cstdlib #include vector //#include fstream using namespace std; //ofstream out(c://a.log); bool comp(int n, char* a, char* b) { for(int i=0; in; i++) { if(a[i]!=b[i] (a[i]!=-b[i]!=-))return false; } return true; } int implicant(int n, char*a, char*b) { int count = 0,temp; for(int i=0; in; i++) { if(a[i]!=b[i]) { count++; temp = i; } } if(count == 1)return temp; else return -1; } bool cointain(int n, char* a, char* b) { for(int i=0; in; i++) { if(a[i]!=b[i] (a[i]!=-))return false; } return true; } int main() { int i,j,k,l,n,count,tmp; char *temp,c; vector char* v[10]; vector char* relative; vector char* prime; vector char* result; bool flag[2]; cout 输入变量数: endl; cinn; temp = new char[n]; cout 请输入最小项(

文档评论(0)

171****9235 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档