首先,对于一个布尔表达式,肯定可以用布尔代数里的那一系列定理和定律进行化简。但是,我想除非布尔表达式的项非常少且可化简项显而易见,否则应该没人会去用那一套方法。而且,就算你能化简,你也不一定能保证化简结果是最简的。
化简布尔表达式,首先想到的应该是卡诺图。卡诺图的操作方法非常简单,概括起来就是两字:画圈。而且,不只是画圈,还是画各种圈。对于3~4个变量组成的布尔表达式,运用卡诺图可以很快地化简。但是,当输入变量一多,光是构造一张卡诺图就很麻烦(对于10个变量,卡诺图就有 2 10 = 1024 2^{10}=1024 210=1024个项)。而且,卡诺图画圈的方法非常佛系,不利于算法实现。国外有个朋友写了一个卡诺图化简程序,使用的是C++语言。我下载下了试了一下,还是挺不错的。我用它来化简布尔表达式
F ( A , B , C , D , E ) = ∑ ( 2 , 3 , 7 , 9 , 10 , 11 , 12 , 13 , 18 , 19 , 22 , 23 , 26 , 27 , 30 , 31 ) F(A,B,C,D,E)=\sum(2,3,7,9,10,11,12,13,18,19,22,23,26,27,30,31) F(A,B,C,D,E)=∑(2,3,7,9,10,11,12,13,18,19,22,23,26,27,30,31)
结果如下:

注意一下这里的结果,我将用它来验证接下来要介绍的Q-M法化简的结果。
上面既然说了卡诺图的弊端——不利于算法实现。那么,接下来介绍一种利于算法实现的布尔表达式化简方法——Quine-McCluskey法,或者简称Q-M法。
其实,Q-M法的原理其实和卡诺图是一致的。只不过卡诺图用画圈的形式让化简更加直观通俗,而Q-M法的分组形式更利于程序化执行。下面给出Q-M法的化简步骤。
Q-M法分四步:

1、将布尔表达式的项按只含0个“1”,只含1个“1”,只含2个“1”,…,只含n个“1”(n为变量个数)划分为不同的Group,并按“1”的数量排列(升序或降序均可)成表;
2、准备一张新表。从含有最少数量的“1”的Group开始依次向下,将当前Group中的每一项与下一个Group的每一项比较。若两者只有一个变量不同,则将两项提取出来,并将不同的变量处用“-”标记,生成一个新的项。如果新的项在新表中已存在,则不执行动作;若不存在,则将这个新的项放到新表中的相应Group中。最后,在原表的两个Group中将提取的两项对应的“Subcube Covered”打上标记。
3、在新生成的表中,重复2,直到新表中不存在只有一个变量不同的项为止。
4、化简结果即为所有表中“Subcube Covered”未被标记的项的和。

说的好像很抽象,下面我们给出一个具体的例子来演示一下怎么操作。
还是以扔给卡诺图化简程序的布尔表达式为例:
F ( A , B , C , D , E ) = ∑ ( 2 , 3 , 7 , 9 , 10 , 11 , 12 , 13 , 18 , 19 , 22 , 23 , 26 , 27 , 30 , 31 ) F(A,B,C,D,E)=\sum(2,3,7,9,10,11,12,13,18,19,22,23,26,27,30,31) F(A,B,C,D,E)=∑(2,3,7,9,10,11,12,13,18,19,22,23,26,27,30,31)
先执行1:划分Group,结果如下:

下面进行2:提取只有一个变量不同的项,结果如下:

这步结束之后,我们可以在1的表中标记“Subcube Covered”列,结果如下:

接着,我们在2得到的新表中重复执行2,结果如下:

其中,红色标记的部分为Group中已经存在过的项。这里只是为了演示才将其列出,实际上它们将不被加入表中。
同样的,这一步结束后,可以更新上一步表中的“Subcube Covered”列,结果如下:

其中,黄色标记为未被标记的项。
接着,我们继续在新表中执行2,结果如下:

同样的,更新上一步表中的“Subcube Covered”列,结果如下:

这一步结束后,可以看出新表中已经没有只有一个变量相同的项了,于是算法结束,记得将最后得到的表中的所有项的“Subcube Covered”标上黄色,表示他们未被标记:

最后,Q-M法化简的结果即为所有表中所有未被标记的项的和:
r e s u l t = C ‘ D + A D + B ‘ D E + A ‘ B C ‘ E + A ‘ B D ‘ E + A ‘ B C D ‘ result=C^`D+AD+B^`DE+A^`BC^`E+A^`BD^`E+A^`BCD^` result=C‘D+AD+B‘DE+A‘BC‘E+A‘BD‘E+A‘BCD‘
比较这个结果和之前卡诺图程序化简的结果,可以发现Q-M法化简结果并不是最简。导致这种结果的原因显而易见。如果有多种化简结果,直接用Q-M法化简的到的未标记项包含所有化简结果的乘积项,直接相加的话必然会存在冗余。要解决这个冗余问题,就需要用到下面的素项表

将所有“Subcube Covered”未被标记的项列在一张表中,并将包含的最小项做上标记:

其中,被标记为红色的项表示该列中只有一项。这就表示最后的化简结果中必须包含这个最小项,也就是必须包含这个最小项所在的项。
下面给出对素项表的操作:

1、对所有只包含一项的列(图中的红色标记)的项所在的行画横线,并对横线所经过的项画竖线。结果如下:


可以看出,进过这一步之后只有两项未被划线(图中框处的两项)。

2、找出为包含最大数量未被划线的项的行,若有多行,则必有多种化简结果,需要对每一行单独列出一种情况进行操作。

由于例子中只有两项未被标记,且分别位于两行。因此,这一步找到的行有两行,分别对应两种不同的化简结果。

3、对于2中的行,对其划横线,并对横线所经过的项画竖线。

两种结果分别如下:

4、若经过划线后还存在未划线项,继续2-3直到无未划线项为止。
5、最后的化简结果即为所有划横线的行对应的项的和。

本例中,有两种化简结果:
r e s u l t 1 = C ‘ D + A D + B ‘ D E + A ‘ B C ‘ E + A ‘ B C D ‘ result1=C^`D+AD+B^`DE+A^`BC^`E+A^`BCD^` result1=C‘D+AD+B‘DE+A‘BC‘E+A‘BCD‘
r e s u l t 2 = C ‘ D + A D + B ‘ D E + A ‘ B D ‘ E + A ‘ B C D ‘ result2=C^`D+AD+B^`DE+A^`BD^`E+A^`BCD^` result2=C‘D+AD+B‘DE+A‘BD‘E+A‘BCD‘
将这两种化简结果与卡诺图程序化简的结果相比较,可以发现两者是一样的。
最后,谈一谈对于无关项的处理。
在用Q-M法化简时,首选需要将所有无关项当“1”处理。但是到素项表时,在列中不将无关项列出。同时,也不将“Subcube Covered”未被标记的纯无关项(“MinTerms”中全部是无关项)列在行中。素项表的操作与前述一致。

Q-M(Quine-McCluskey)法化简布尔表达式相关推荐

  1. 数字逻辑练习题(三)用代数法化简下面的函数为最简“与-或”式

    用代数法化简下面的函数为最简"与-或"式 一.题目描述: 用代数法化简下面的函数为最简"与-或"式: 二.题目解答 (1). (2).

  2. FPGA:逻辑函数的代数法化简

    文章目录 逻辑函数的最简形式 逻辑函数的代数化简法 并项法 吸收法 消去法 配项法 示例1 示例2 逻辑函数的最简形式 1.化简逻辑函数的意义 L=AB+AˉB+AˉBˉ=(A+Aˉ)B+AˉBˉ=1 ...

  3. QM法化简C语言程序,QM基础教程

    中文翻译教程首发CSDN,转载请标明出处:http://www.voidcn.com/article/p-qbuyghua-bpr.html NOTE:本中文教程相对官方原版教程,删减了Buildin ...

  4. 简述隐含表法化简状态步骤

    首先画表格,缺头去尾 输出结果是否相同,不相同全部×掉 把剩余需要考虑的状态填入表中 相同状态不填,如S0S1一栏不填S2 循环不填,S3S4一栏不填S3/S4 不断循环如S0S1里有S2S3,S2S ...

  5. 质量工具之故障树分析FTA(3) - FTA的数学基础

    云质QMS原创 转载请注明来源 作者:王洪石 关键词:问题解决.根本原因分析.故障树.故障树分析.FTA.可靠性.鱼骨图.集合.布尔代数.逻辑.布尔代数式 FTA的数学基础 我们前文提到,故障树分析F ...

  6. FPGA:逻辑函数的卡诺图化简法

    文章目录 最小项与最小项表达式 最小项的定义 最小项的性质 逻辑函数的最小项表达式 卡诺图化简法 用卡诺图表示逻辑函数 卡诺图的引出 两变量卡诺图 三变量卡诺图 四变量卡诺图 已知逻辑函数真值表,画卡 ...

  7. 计算机逻辑函数,计算机智能化简多变量逻辑函数的算法分析

    摘要: 在设计逻辑电路图时,由真值表直接得到的函数往往比较复杂.代数法和卡诺图法等方法对于变量数目较多的逻辑函数则效果不佳,本文介绍一种可编程化简复杂逻辑函数的方法──Q-M法(也叫表格法),该方法可 ...

  8. 数字逻辑代数基础——基本定理、公式与卡诺图化简法、格雷码、LSFR等

    复习一下数字电路,下次就省事直接看自己写的了. 目录 1.常用门电路图 2.逻辑代数的基本定理----化简时比较好用 3.化简逻辑函数时几个关键的公式(A'代表A的非) 4.格雷码与二进制的转换 5. ...

  9. 卡诺图与逻辑代数化简法

    内容包括逻辑代数化简法(基本定律.基本原则等)与卡诺图化简法(含工具软件,真实案例讲解),竞争与冒险的消除.紫色文字是超链接,点击自动跳转至相关博文.持续更新,原创不易! 目录: 一.卡诺图化简法 1 ...

最新文章

  1. linq to sql初步
  2. 开发日记-20190521 关键词 bash的几个初始化文件
  3. Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)
  4. linux多网口dhcp服务绑定,Linux系统实现多网段DHCP服务器配置
  5. 在python中是否可以使用if作为变量名_在Python中可以使用if 作为变量名_python使用符号 标示注释...
  6. virtio、vhost和vhost-user比较
  7. The example program of C on point
  8. C语言运算符优先级和结合性
  9. 物流软件之Microcity介绍
  10. Nsight Compute(NCU) Scheduler Statistics 数据解读
  11. w3c 整站 php源码,W3C联盟系统 v1.3
  12. 考CFA证书只通过一级有用吗?
  13. 快速查询多个圆通快递未签收单号的走件信息
  14. 误删的文件怎么寻回?
  15. 【c#技术】一篇文章搞掂:水晶报表
  16. 【解决方案】国标GB28181视频监控平台国标流媒体服务器EasyGBS如何实现安保行业日常巡查视频监控系统解决方案?
  17. SAP 登录的一些参数
  18. Java如何正确的使用try catch finally关闭文件流的总结
  19. 外服剑灵卡刀宏使用教程
  20. 音乐欣赏之古典乐曲经典开头

热门文章

  1. python创建员工_python-作业:员工信息表
  2. 房子“面目全非”,解约倒赔6万多!自如租房,我好伤
  3. 江苏海洋大学计算机专业排名,江苏海洋大学怎么样是几本?师资排名揭秘?有哪些热门优势专业?...
  4. PhotoshopCS5 第三篇 创建选区
  5. 计算机专业大学生摆摊,计算机本科毕业生义乌摆摊卖烧饼 打出“大学生烧饼”招牌...
  6. 如何禁用Mac防火墙激活软件
  7. 地球大气延伸超越月球轨道!探索系外水星球的新希望
  8. 华为交换机实现远程管理
  9. 中国制造业国际竞争力的实证方法研究——兼与波特指标及产业分类法比较
  10. Excel小技巧(上)