TL;DR
Исключающее ИЛИ любого числового ввода
a + b - ab(1 + a + b - ab)
Двоичный ввод XOR
a + b - 2ab
or (a-b)²
Происхождение
Основные логические операторы
NOT
= (1-x)
AND
= x*y
От этих операторов мы можем получить...
OR
= (1-(1-a)(1-b))
= a + b - ab
Примечание. Если a и b являются взаимоисключающими, то их условие and
всегда будет равно нулю. С точки зрения диаграммы Венна это означает отсутствие перекрытия. В этом случае мы могли бы написать OR
= a + b
, поскольку a*b = 0
для всех значений a и b.
Двухфакторное исключающее ИЛИ
Определение XOR как (a OR B) AND (NOT (a AND b))
:
(a OR B)
--> (a + b - ab)
(NOT (a AND b))
--> (1 - ab)
AND
эти условия вместе, чтобы получить...
(a + b - ab)(1 - ab)
= a + b - ab(1 + a + b - ab)
![введите здесь описание изображения](https://i.stack.imgur.com/eFfi1.png)
Вычислительные альтернативы
Если входные значения являются двоичными, то члены степеней можно игнорировать, чтобы получить упрощенные вычислительно эквивалентные формы.
a + b - ab(1 + a + b - ab)
= a + b - ab - a²b - ab² + a²b²
Если x двоичный (либо 1, либо 0), то мы можем игнорировать степени, так как 1² = 1
и 0² = 0
...
a + b - ab - a²b - ab² + a²b²
-- снять полномочия --› a + b - 2ab
XOR
(бинарный) = a + b - 2ab
Двоичный код также позволяет другим уравнениям быть вычислительно эквивалентными приведенному выше. Например...
Учитывая (a-b)²
= a² + b² - 2ab
Если ввод двоичный, мы можем игнорировать степени, поэтому...
a² + b² - 2ab
-- снять полномочия --› a + b - 2ab
Разрешите написать...
XOR
(бинарный) = (a-b)²
Многофакторное исключающее ИЛИ
XOR
= (1 - A*B*C...)(1 - (1-A)(1-B)(1-C)...)
Как насчет того, когда вы хотите XOR (A, B, C...)? Проблема здесь в том, что если мы попытаемся различить все условия истинности, как мы это делали в составной логике для двухфакторного исключающего ИЛИ, масштабирование будет не очень хорошим, поскольку вам придется добавлять каждую перестановку истинности. Тем не менее, логика такова, что мы можем прийти к XOR комплементарным способом...
XOR
= !(A & B & C...) & !(!A & !B & !C...)
Из которого можно построить арифметическое XOR для любого количества факторов в виде...
(1 - A*B*C...)(1 - (1-A)(1-B)(1-C)...)
Вот некоторый Excel VBA для XOR всего диапазона ячеек...
Function ArithmeticXOR(R As Range, Optional EvaluateEquation = True)
Dim AndOfNots As String
Dim AndGate As String
For Each c In R
AndOfNots = AndOfNots & "*(1-" & c.Address & ")"
AndGate = AndGate & "*" & c.Address
Next
AndOfNots = Mid(AndOfNots, 2)
AndGate = Mid(AndGate, 2)
'Now all we want is (Not(AndGate) AND Not(AndOfNots))
ArithmeticXOR = "(1 - " & AndOfNots & ")*(1 - " & AndGate & ")"
If EvaluateEquation Then
ArithmeticXOR = Application.Evaluate(xor2)
End If
End Function
Любое n из k
Один последний лакомый кусочек здесь. Иногда вам нужно, чтобы условие было истинным, если верно любое количество входных данных n. Это можно рассматривать как расслабленное AND
состояние, при котором вы готовы принять, например, a&b, a&c или b&c. Это можно арифметически смоделировать из составной логики...
(a && b) || (a && c) || (b && c) ...
и применяя наши переводы...
1 - (1-ab)(1-ac)(1-bc)...
Это полезно само по себе, но есть и интересный паттерн, когда вы расширяете термины. Существует шаблон комбинаций переменных и показателей, но он становится очень длинным; однако вы можете упростить, игнорируя полномочия для двоичного контекста. Точный шаблон зависит от того, как n относится к k. Для n = k-1, где k — общее количество проверяемых условий, результат будет следующим:
c1 + c2 + c3 ... ck - n*∏
Где от c1 до ck — все комбинации с n переменными.
Например, true, если выполняются 3 из 4 условий, будет
abc + abe + туз + bce - 3abce
Это вполне логично, поскольку у нас есть сумма OR
из AND
условий за вычетом перекрывающихся AND
условий.
Если вы начнете рассматривать n = k-2, k-3 и т. д., картина станет более сложной, потому что нам нужно вычесть больше перекрытий. Если это полностью распространить на наименьшее значение n = 1, то мы получим не что иное, как обычное условие OR
.
Размышляя о недвоичных значениях и нечеткой области
Фактическое алгебраическое уравнение XOR a + b - ab(1 + a + b - ab)
намного сложнее, чем вычислительно эквивалентные бинарные уравнения, такие как x + y - 2xy
и (x-y)²
. Означает ли это что-нибудь, и есть ли ценность в этой дополнительной сложности?
Очевидно, чтобы это имело значение, вам нужно заботиться о десятичных значениях за пределами дискретных точек (0,0), (0,1), (1,0) и (1,1). Почему это когда-либо имеет значение? Иногда вы хотите ослабить целочисленное ограничение для дискретной задачи. В этом случае вы должны посмотреть на предпосылки, используемые для преобразования логических операторов в уравнения.
Когда дело доходит до перевода булевой логики в арифметику, вашими основными строительными блоками являются операторы AND
и NOT
, с помощью которых вы можете построить как OR
, так и XOR
.
OR
= (1-(1-a)(1-b)(1-c)...)
XOR
= (1 - a*b*c...)(1 - (1-a)(1-b)(1-c)...)
Итак, если вы думаете о десятичной области, то стоит подумать о том, как мы определили эти операторы и как они ведут себя в этой области.
Недвоичное значение NOT
Мы выразили NOT
как 1-x
. Очевидно, что это простое уравнение работает для двоичных значений от 0 до 1, но что действительно здорово, так это то, что оно также обеспечивает дробное или процентное дополнение для значений от 0 до 1. Это полезно, поскольку NOT
также известен как Compliment
в булевой логике, а когда дело доходит до наборов, NOT
относится ко всему, что находится за пределами текущего набора.
Недвоичное значение AND
Мы выразили AND
как x*y
. Еще раз, очевидно, что это работает для 0 и 1, но его эффект немного более произволен для значений от 0 до 1, где умножение приводит к частичным истинам (десятичным значениям), уменьшающим друг друга. Можно представить, что вы захотите смоделировать истину как усредненную или накопительную в этой области. Например, если два условия гипотетически наполовину верны, является ли условие AND
истинным только на четверть (0,5 * 0,5), или оно полностью верно (0,5 + 0,5 = 1), или оно остается наполовину верным ((0,5 + 0,5) / 2)? Как оказалось, четверть истины на самом деле верна для полностью дискретных условий, а частичная истина представляет собой вероятность. Например, перевернете ли вы решку (бинарное условие, вероятность 50%) и сейчас, И снова во второй раз? Ответ: 0,5 * 0,5 = 0,25, или 25% правды. Накопление на самом деле не имеет смысла, потому что оно в основном моделирует состояние OR
(помните, что OR
может быть смоделировано с помощью +
, когда условие AND
отсутствует, поэтому суммирование характерно OR
). Среднее значение имеет смысл, если вы смотрите на согласование и измерения, но на самом деле оно моделирует гибрид AND
и OR
. Например, попросите двух человек сказать по шкале от 1 до 10, насколько они согласны с утверждением На улице холодно? Если они оба говорят 5, то истинность утверждения На улице холодно составляет 50%.
Недвоичные значения в сводке
Вывод из этого взгляда на недвоичные значения заключается в том, что мы можем уловить реальную логику в нашем выборе операторов и построить уравнения с нуля, но мы должны помнить о числовом поведении. Мы привыкли думать о логике как о дискретной (бинарной) и компьютерной обработке как о дискретной, но небинарная логика становится все более и более распространенной и может помочь упростить/возможность решения сложных проблем с дискретной логикой. Вам нужно подумать о том, как ценности взаимодействуют в этой области и как преобразовать их во что-то значимое.
person
u8it
schedule
09.10.2017
if
заявления? - person Anton Gogolev   schedule 05.03.2010