我已经确定了一个真值表,如下所示
prev_state| input1 | input2 |next_state| Action
(def/new) |(Disable/Enable)|(Off/On)| |
def | D | Off | def | Nothing
def | D | On | def | Nothing
def | E | Off | def | Nothing
def | E | On | new | call function1
new | D | Off | def | call function2
new | D | On | def | call function2
new | E | Off | def | call function2
new | E | On | new | Nothing
我想知道实现这一目标所需的最少检查次数是多少。
我是否想使用如下卡诺图:
00| 01| 11| 10
-----------------
0 | A | A | B | A |
-----------------
1 | C | C | A | C |
-----------------
其中A对应什么都没有,B调用function1,C调用function2
根据我所看到的,您有 2 个 A 的 2 个组合和一个 A 总共 3 个 A 1 个 B 和 2 个 2 C 的组合
这是否意味着最小比较次数是 3+1+2=6?但是因为 A 什么都不做,所以最小的实现只需要 B 和 C 的 3 种组合?
测试实施
if (prev_state == new && input1 == disable) {
function2();
}
else if (prev_state == new && input2 == Off) {
function2();
}
else if (input1 == enable && input2 == On) {
function1();
}
现在我也看到了上面那个更好还是这个更好:
if ((prev_state == new && input1 == disable) || (prev_state == new && input2 == Off)) {
function2();
}
else if (input1 == enable && input2 == On) {
function1();
}
感谢那些提出 O(1) 但占用内存空间的查找表的人。我现在意识到我更愿意有一个不使用额外内存的解决方案。您是否同意使用卡诺图是得出最小比较量的有效方法?