Я определил таблицу истинности, такую как приведенная ниже
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 комбинации по 2 А и по одной Всего 3 для А
1 для B
и 2 комбинации из 2 C
Значит ли это, что минимальное количество сравнений составляет 3 + 1 + 2 = 6?
Но поскольку А ничего не делают, минимальная реализация потребует
только 3 комбинации для B и C?
Выполнение теста
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), но занимающую место в памяти.
Теперь я понимаю, что предпочел бы иметь решение, не использующее дополнительную память. Согласны ли вы с тем, что использование карт Карно является допустимым методом для получения минимального количества сравнений?