布尔函数的个数以及编号
布尔函数就是由变量以及布尔操作符组成的表达式,比如:F = AB + C就是布尔函数。
给定n的变量,可以组成无穷多个布尔函数,但是,只有2^(2^n)个布尔函数是不同的(即具有不同的真值表)。比如给定A,B,C三个变量,可以组成F = ABC, F = AABC, F = AAABC,...无穷多个布尔函数,但是只有2^(2^3) = 256个不同的布尔函数,其他的布尔函数都可以转化为这256个布尔函数。
给定n个变量就会有2^(2^n)个不同的布尔函数,如果给这些布尔函数从0开始编号,那么通过布尔函数,如何获得这个布尔函数的编号呢?以布尔函数F = AB + C为例,首先画出这个布尔函数的真值表:
C | B | A | F = AB + C |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
然后将真值表的函数结果值从下到上排列起来,对于上面的例子就是: 1 1 1 1 1 0 0 0,那么这串二进制代表的数值就是该布尔函数的编号,即F = AB + C的编号为:248。
从上面的例子可以发现,函数编号如果写成二进制的形式,那么每一bit位对应的就是相关变量的值带入布尔函数后的结果值。比如248的二进制最高位(第7bit位)是1,刚好就是C = 1 B = 1 A = 1(7 = 4 * C + 2 * B + 1 * A)带入F = AB + C的结果值,换句话说,我们只要选出248的第i位,i = 4 * C + 2 * B + 1 * A,就可以得到指定的C B A在第248号布尔函数下的结果值,而根本不需要知道这个布尔函数的确切形式。
规范化形式(Canonical Form)
任何一个布尔函数都只有一个规范化形式,但是规范化形式不是这个布尔函数的最优形式。使用规范化形式的原因是规范化形式与真值表之间的转换特别容易。