我很感激在寻找专门针对K-map最优性的文献方面提供了一些帮助。
我理解,例如,您可以在SOP(产品总和)表达式和K-map之间进行映射,以及为什么通常您会期望K-map优化表达式更简单,因为找到最大值1的分组对应于在天真的SOP表达中找到一些冗余。
我可以模糊地看到K-map方法可能不会产生最优解,因为我们实际上唯一能做的就是利用布尔值的分布和同一性(A + A'= 1)属性代数。但我真的不明白我们用K-map执行的代数运算,这可能使我们能够达到更优的解决方案。
结果是我不知道如何开始证明K-map不总是最佳的证据。
我试图阅读:this 但是在那篇论文中,刚才引用了找到最优布尔表达式的问题是在NP中,我认为作者只是隐含地说K-maps不能是最优的,因为作为算法它们不是在NP时间运行。
为什么K-maps不是最优的,而不仅仅是“反例”的方式..实际上为什么?你能证明给我,还是直接向我证明?
答案 0 :(得分:1)
您认为最佳? K-map仅为您提供SOP或POS形式的最佳方程。所以这取决于你想要什么。
未执行的代数运算包括例如Distributivity of ∧ over ∨
。应用该规则可能会为您提供较少术语的功能。
k-map不会使用ie xor
给出方程,因为结果方程仅使用or
和and
以及not
。所以,如果我采用从函数派生的真值表(^
为xor
):
lambda a, b, c, d: a ^ b ^ c ^ d
结果真值表没有矩形,SOP形式可能被认为是不理想的:
lambda a, b, c, d: (not a and b and c and d) or (not a and not b and not c and d) or (not a and not b and c and not d) or (not a and b and not c and not d) or (a and b and c and not d) or (a and b and not c and d) or (a and not b and c and d) or (a and not b and not c and not d)
如果您只使用or
和and
且输入函数比输出函数短,则在输入中使用括号。如果是这种情况,你也可以在k-map的输出中分解出一些变量(使用布尔代数),你将得到一个至少与之短的等式。
泛化:最小化布尔函数就像找到任何其他数字序列的等式。总会有多种解决方案。但哪个功能最简单?我可能会说:“给我一个函数,返回1表示0,2表示1,4表示2表示,8表示3表示”。你可以说“功能是pow(2,x)”。我可以说“错了!我想的是1<< x”。函数不相等的所有值都超出了规范的范围。它们对应于K-map中的“不知道”。
当我说“我的功能更简单,因为我只是简单地说所有术语”时,你可以说:“但如果我添加一个额外的变量并且它不遵循你的模式,你的功能就变得太笨重了复杂,我只是遵循SOP或POS模式“。