Как уменьшить логический оператор?

Возможно, это микрооптимизация, хотя я сомневаюсь, что это будет иметь какое-то значение с современной JVM. (Если это стоящая оптимизация, оптимизатор JIT-компилятора, вероятно, выполнит эквивалентное преобразование на уровне нативного кода.)

Возможно, это также (неправильная) попытка заставить код работать, если имеется несколько потоков , Я говорю «неправильно», потому что программист игнорирует требования модели памяти Java. Поскольку до не было ясных отношений между двумя потоками, обращающимися к переменной persons или списком, на который она ссылается, потоки склонны видеть устаревшие данные, что приводит к непредсказуемому поведению.

Могут быть другие причины для этого, которые не очевидны в вашем примере. (Например, если persons было объявлено как volatile и были выполнены некоторые другие предварительные условия, это могло бы быть потокобезопасным, а предположительно избыточная локальная переменная могла бы иметь действительную) цель.)

7
задан starblue 21 March 2009 в 08:57
поделиться

8 ответов

Вы не можете уменьшить" (a ИЛИ b ИЛИ d) И (a ИЛИ c)" к" (a ИЛИ b ИЛИ d ИЛИ c)", потому что первый не удовлетворен "c=true, a, b, d=false", тогда как последний. Таким образом, Вы не можете доказать, что сокращение исправляет также :)

В целом существует много способов уменьшить булевы формулы в размере, и это - также вопрос того, что Вы хотите оптимизировать (общий размер? среднее количество оценок условия?). Karnaugh отображает работу только для небольшого количества переменных. Сокращение большой булевской переменной formulaes в меньшие является усовершенствованной темой, которая является ключом, например, автоматическим дизайном логического канала.

10
ответ дан 6 December 2019 в 06:04
поделиться

Карты Karnaugh? Логическое сокращение выражения?

8
ответ дан 6 December 2019 в 06:04
поделиться

Карта Karnaugh является Вашим другом здесь:

http://en.wikipedia.org/wiki/Karnaugh_map

Необходимо будет отчасти создать его наоборот из вышеупомянутых уравнений, но это - хороший инструмент, чтобы сказать Вам, если это может быть уменьшено далее.

4
ответ дан 6 December 2019 в 06:04
поделиться

a или {(b ИЛИ d) И c}

Обоснование: Если "a", то оператор верен. еще, Вам нужны b или d (для удовлетворения первой части оператора), и c (удовлетворяет вторую половину для случаев когда! a

1
ответ дан 6 December 2019 в 06:04
поделиться

Карты Karnaugh, ключ должен "потянуть" все возможные исходные данные и указать на их выводы. Затем можно начать отфильтровывать исходные данные, которые не имеют значения к выводу, таким образом уменьшающему карту. После того как это оптимизировано, можно затем произвести логику из него.

3
ответ дан 6 December 2019 в 06:04
поделиться

Используя карты Karnaugh:

Это - a ИЛИ b ИЛИ d:

 \ab
cd\ 00 01 11 10
---+-----------+
00 |  | X| X| X|
01 | X| X| X| X|
11 | X| X| X| X|
10 |  | X| X| X|
   +-----------+

Это - a ИЛИ c:

 \ab
cd\ 00 01 11 10
---+-----------+
00 |  |  | X| X|
01 |  |  | X| X|
11 | X| X| X| X|
10 | X| X| X| X|
   +-----------+

Пересекая их, мы добираемся:

 \ab
cd\ 00 01 11 10
---+-----------+
00 |  |  | X| X|
01 |  |  | X| X|
11 | X| X| X| X|
10 |  | X| X| X|
   +-----------+

Очевидно, это - a ИЛИ (что-то), где (что-то):

    00 01
11 | X| X|
10 |  | X|

Начиная с (чего-то) не прямоугольник, требуется два выражения, которые могли быть или AND'ed или OR'ed вместе, в зависимости от того, как мы хотим приблизиться к нему. Мы будем использовать ИЛИ в этом примере, так как он дает более простое выражение.

В этом случае мы можем сгруппировать два X друг рядом с другом с еще два для заполнения всей строки CD, таким образом, CD может быть одним из выражений. Мы можем также сгруппировать два друг на друге с двумя с правой стороны от них для формирования квадрата. Этот квадрат представляет выражение до н.э, так как и a и d варьируются в квадрате.

Таким образом, заключительное выражение является a ИЛИ ((c И d) ИЛИ (b И d)), или + CD + бод. Намного более хороший, не так ли?

1
ответ дан 6 December 2019 в 06:04
поделиться

(a ИЛИ b ИЛИ d) И (a ИЛИ c)

Это означает, когда верного, все верно!

=> a ИЛИ {(b ИЛИ d) И (c)}

=> a ИЛИ (b И C) ИЛИ (d и C)

я думаю, что результат (a ИЛИ b ИЛИ d ИЛИ c) является неправильным, но дайте мне руку когда ее несправедливость.

2
ответ дан 6 December 2019 в 06:04
поделиться

Да, можно доказать его. Вы не можете уменьшить его до (a ИЛИ b ИЛИ d ИЛИ c)

Посмотрите на 3-ю строку ниже. Вашему сокращению не удалось бы генерировать надлежащий ответ.

Просто прокручивать это:

B C D
0 0 0 0 = 0
0 0 0 1 = 0
0 0 1 0 = 0
.
.
.
1 0 0 0 = 1
1 0 0 1 = 1

До сих пор я имею (A ИЛИ (???)) :(

0
ответ дан 6 December 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: