卡诺图化简法

1.学前需要了解知识点
最小项的定义
最小项的表示方法
最小项的相邻性
最小项的定义:一个函数的某个乘积项包含了函数的全部变量,其中每个变量都以原变量或反变量的形式出现,且仅出现一次,则这个乘积项称为该函数的一个标准积项,通常称为最小项。

最小项的表示方法:通常用来表示最小项。

下标i的确定方式:把最小项中原变量记为1,反变量记为0,当变量顺序确定后,可以按顺序排列成一个二进制数,则与这个二进制数相对应的十进制数,就是这个最小项的下标i。

例1:

函数L(A,B,C)中有3个变量,他们的最小项是:

 

如果把原变量记为1,反变量记为0:

 

以上就是下标i的确认方式。

既然i已经确认,也就是说(m0、m1...m7)可以记成:

 

最小项的的相邻性:任何两个最小项如果他们只有一个因子不同,其余因子都相同,则称这两个最小项为相邻最小项。

例如:m0和m1具有相邻性,m1和m2却没有,因为他们有两个不同的因子;m3和m4也不相邻,但是m3和m2相邻。

相邻的两个最小项之和可以合并一项,消去一个变量。如:

 

到此,已经具备接下来学习卡诺图的准备知识点,接下来看看怎么画卡诺图以及卡诺图化简法。

2.卡诺图(karnaugh map)
基本知识:

卡诺图是由美国工程师卡诺(Karnaugh)首先提出的一种用来描述逻辑函数的特殊方格图。

在这个方格图中,每一个方格代表逻辑函数的一个最小项,而且几何相邻(在几何位置上,上下或左右相邻)的小方格具有逻辑相邻性,即两相邻小方格所代表的最小项只有一个变量取值不同。

对于有n个变量的逻辑函数,其最小项有2^n个。因此该逻辑函数的卡诺图由 2^n  个小方格构成,每个小方格都满足逻辑相邻项的要求。

稍微整理下上面的基本知识点:

一种描述逻辑函数特殊方格图。
每格代表一个最小项,上下左右相邻就具备相邻性。
有n个变量,最小项就有2^n且卡诺图也由2^n个格子构成。
两变量的卡诺图:

 

三变量的卡诺图:

 

四变量的卡诺图以此类推吧!就不画了,累啊,偷懒一下。

例2:画出逻辑函数的卡诺图。

 

解:

 

通过上面的例子,我们已经掌握如何画卡诺图,接下来就是如何使用卡诺图进行化简。

3.逻辑函数的卡诺图化简法
卡诺图相邻性的特点保证了几何相邻两方格所代表的最小项只有一个变量不同。因此,若相邻的方格都为1(简称1格)时,则对应的最小项就可以合并。合并的结果是消去这个不同的变量,只保留相同的变量。这是图形化简法的依据。     

综上所述,卡诺图具备以下特性:

卡诺图中两个相邻1格的最小项可以合并成一个与项,并消去一个变量。
卡诺图中四个相邻1格的最小项可以合并成一个与项,并消去两个变量。
卡诺图中八个相邻1格的最小项可以合并成一个与项,并消去三个变量。
利用这3点特性来接着看下面的例子:

上图两个相邻1格的最小项可以合并成一个与项,并消去一个变量,化简式子如下:

 

根据上面3个特性再来看几个例子加深理解,以下是4个相邻1格的:

 

 

再来看一题:

 

用卡诺图化简法求最简与或表达式

先画出卡诺图,然后转换十进制对应1,2,3,6,7的地方填入为1,其余填写为0(这个步骤有前面的知识点支撑,应该不难理解了。)

 

然后获得式子:F =(m1+m3)+(m2+m3+m6+m7)

即:

 

好了到此,我们已经清楚如何化简了,接下来是对如何对卡诺图进行画圈进行探讨。

首先,有这么几点需要明确:

列出逻辑函数的最小项表达式,由最小项表达式确定变量的个数(如果最小项中缺少变量,应按例的方法补齐)。
画出最小项表达式对应的卡诺图。
将卡诺图中的1格画圈,一个也不能漏圈,否则最后得到的表达式就会与所给函数不等;1格允许被一个以上的圈所包围。
圈的个数应尽可能得少。即在保证1格一个也不漏圈的前提下,圈的个数越少越好。因为一个圈和一个与项相对应,圈数越少,与或表达式的与项就越少。
按照2k个方格来组合(即圈内的1格数必须为1,2,4,8等),圈的面积越大越好。因为圈越大,可消去的变量就越多,与项中的变量就越少。
每个圈应至少包含一个新的1格,否则这个圈是多余的。
用卡诺图化简所得到的最简与或式不是唯一的。
带着这7点来看

例3:用卡诺图化简以下表达式


解:  从表达式中可以看出此为四变量的逻辑函数,但是有的乘积项中缺少一个变量,不符合最小项的规定。因此,每个乘积项中都要将缺少的变量补上:

 

因此,获得整个表达式如下:

这里演示了刚才提示的(1)点,最小项缺少变量补齐。

例2:

 

 

 

错误 (多画一个圈)

 

 

正确

例3:

 

 

错误(圈的面积不够大)

 

 

正确

例4:

 

 

错误(圈的面积不够大)

 

 

例5:

 

 

错误(有一个圈无新的1格)

 

 

到此为止,已经学会了如何利用卡诺图化简法来化简函数。
————————————————
版权声明:本文为CSDN博主「Samplay」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hahasusu/article/details/88244155

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python可以通过以下步骤使用卡诺图化简: 1. 创建一个truth table,表示布尔函数的输入和输出。 2. 将truth table按照规则(如最短项的贪心)分组,并将分组的结果标记在卡诺图上。 3. 用卡诺图的分组结果来确定布尔函数的最小项(min terms)和不可简化项(don't care terms)。 4. 使用最小项和不可简化项生成简化后的布尔函数。 以下是一个使用Python代码实现卡诺图化简的例子: ``` from itertools import combinations # create a truth table (inputs -> output) truth_table = {'000': 0, '001': 0, '010': 0, '011': 1, '100': 1, '101': 1, '110': 0, '111': 0} def generate_groups(minterms, num_vars): groups = [[] for i in range(num_vars + 1)] for minterm in minterms: num_ones = bin(minterm).count('1') groups[num_ones].append(minterm) return groups def combine_groups(groups): new_groups = [] for i, group in enumerate(groups): for j, other_group in enumerate(groups): if i != j: for pair in combinations(group, 2): if pair[0] ^ pair[1] in other_group: new_group = set(group + other_group) new_group.remove(pair[0]) new_group.remove(pair[1]) new_groups.append(sorted(list(new_group))) return new_groups def get_min_terms(group): min_terms = [] for minterm in group: bin_num = bin(minterm)[2:] bin_num = '0' * (3 - len(bin_num)) + bin_num min_terms.append(bin_num) return min_terms def simplify_boolean(minterms, num_vars): groups = generate_groups(minterms, num_vars) while True: new_groups = combine_groups(groups) if len(new_groups) == 0: break groups = groups + new_groups min_terms = [] for group in groups: min_terms += get_min_terms(group) return min_terms print(simplify_boolean([3, 4, 5, 6], 3)) # Output: ['011', '101'] ``` 在这个例子中,我们使用了一个truth table来表示一个布尔函数,并创建了一个函数`simplify_boolean`来实现化简布尔函数的操作。该函数接受一个包含minterms的列表和变量数量,返回最小项的字符串表示形式。我们可以看到,该函数使用卡诺图来实现化简操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值