在线时间289 小时
注册时间2014-6-2
升级经验11346
魔币10318
十周年兑换券0
推理积分39
游戏积分0
- 积分
- 18136
魔推A级探员
![[限量]*五周年纪念勋章](static/image/common/5th.gif) ![[标准]*好友勋章](static/image/common/100 (74).gif) ![[限量]*转发勋章](static/image/common/100 (68).gif) ![[限量]*十周年纪念勋章](static/image/common/mt100 (1).gif)
|

楼主 |
发表于 2014-7-31 14:33:25
|
显示全部楼层
假设三个输入分别是S0,S1,S2,先定义函数Q(k):
Q(0) = 1
Q(1) = s0 + s1 + s2
Q(2) = s0·s1 + s1·s2 + s2·s0
Q(3) = s0·s1·s2
Q(k)有一个特征,就是当且仅当至少有k个输入信号为1时,Q(k) = 1
再定义函数R(k,i),R(k,i)等于把Q(k)中含si的项移除后剩下的部分,于是有
R(1, 0) = s1 + s2
R(1, 1) = s0 + s2
R(1, 2) = s0 + s1
R(2, 0) = s1·s2
R(2, 1) = s2·s0
R(2, 2) = s0·s1
R(k,i)的特征是当且仅当至少有k个不包括si输入信号为1时,R(k,i) = 1
最后定义函数P(k),P(k)=1当且仅当刚好有k个输入信号为1。那么第i个相反的输出信号就可以表示为 ti = P(0) + P(1)·R(1,i) + P(2)·R(2,i)
函数P(k)可以通过Q(k)来构造,假设用一个矩阵来表示输入信号是1的个数和Q(k)的值之间的关系,这个矩阵可以写成
0123 (输入信号是1的个数)
0001 (Q(3))
0011 (Q(2))
0111 (Q(1))
1111 (Q(0))
现在需要构造的是
0001 (P(3))
0010 (P(2))
0100 (P(1))
1000 (P(0))
构造方法如下:
0001 (Q(3))
0011 (Q(2))
0111 (Q(1))
1111 (Q(0))
先把上面矩阵的第二行进行非运算,然后把结果分别和第三行和第四行进行与运算并替换掉,我们可以得到
0001 (Q(3))
0011 (Q(2))
0100 (~Q(2)·Q(1))
1100 (~Q(2)·Q(0))
把上面矩阵的的第一行和第三行进行或运算再取反,然后把结果分别和第二行和第四行进行与运算并替换掉,可以得到
0001 (Q(3))
0010 (~(Q(3)+~Q(2)·Q(1))·Q(2))
0100 (~Q(2)·Q(1))
1000 (~(Q(3)+~Q(2)·Q(1))·(~Q(2)·Q(0)))
上面的操作只用到两个非门,于是有
P(0) = ~(s0·s1·s2 + ~(s0·s1 + s1·s2 + s2·s0)·(s0 + s1 + s2))·~(s0·s1 + s1·s2 + s2·s0)
P(1) = ~(s0·s1 + s1·s2 + s2·s0)·(s0 + s1 + s2)
P(2) = ~(s0·s1·s2 + ~(s0·s1 + s1·s2 + s2·s0)·(s0 + s1 + s2))·(s0·s1 + s1·s2 + s2·s0)
P(3) = s0·s1·s2
R(1, 0) = s1 + s2
R(1, 1) = s0 + s2
R(1, 2) = s0 + s1
R(2, 0) = s1·s2
R(2, 1) = s2·s0
R(2, 2) = s0·s1
输出信号ti可以写成
t0 = P(0) + P(1)·R(1,0) + P(2)·R(2,0)
t1 = P(0) + P(1)·R(1,1) + P(2)·R(2,1)
t2 = P(0) + P(1)·R(1,2) + P(2)·R(2,2)
用上面的方法,n个非门最多可以反转2^n - 1个输入信号
|
|