правила deMorgan объяснены

Вы могли объяснить правила deMorgan максимально максимально (например, кому-то только с фоном математики средней школы)?

21
задан Stephen C 20 February 2017 в 15:02
поделиться

7 ответов

У нас есть два значения: T и F.

Мы можем объединить эти значения тремя способами: NOT, AND и OR.

NOT - самый простой:

  • NOT T = F
  • NOT F = T

Мы можем записать это в виде таблицы истинности:

when given.. | results in...
============================
           T | F
           F | T

Для краткости

x | NOT x
=========
T | F
F | T

Считайте, что NOT является дополнением, то есть превращает одно значение в другое.

AND работает с двумя значениями:

x y | x AND y
=============
T T | T
T F | F
F T | F
F F | F

AND является T только тогда, когда оба его аргумента (значения x и y в таблице истинности) являются T - и F в противном случае.

OR является T, если хотя бы один из его аргументов является T:

x y | x OR y
=============
T T | T
T F | T
F T | T
F F | F

Мы можем определить более сложные комбинации. Например, мы можем написать таблицу истинности для x AND (y OR z), и первая строка будет следующей.

x y z | x AND (y OR z)
======================
T T T | ?

Как только мы узнаем, как оценить x AND (y OR z), мы можем заполнить остальную часть таблицы.

Чтобы оценить комбинацию, оцените части и работайте дальше. Скобки показывают, какие части нужно оценивать в первую очередь. То, что вы знаете из обычной арифметики, поможет вам решить эту задачу. Допустим, у вас есть 10 - (3 + 5). Сначала вы оцените часть в скобках, чтобы получить

10 - 8

и оцените ее как обычно, чтобы получить ответ 2.

Оценка этих выражений выполняется аналогично. Мы знаем, как работает OR, поэтому можем немного расширить нашу таблицу:

x y z | y OR z | x AND (y OR z)
===============================
T T T | T      | ?

Теперь мы почти вернулись к таблице x AND y. Мы просто подставляем значение y ИЛИ z и оцениваем. В первой строке мы имеем

T AND (T OR T)

что совпадает с

T AND T

что просто T.

Мы повторяем тот же процесс для всех 8 возможных значений x, y и z (2 возможных значения x умножить на 2 возможных значения y умножить на 2 возможных значения z), чтобы получить

x y z | y OR z | x AND (y OR z)
===============================
T T T | T      | T
T T F | T      | T
T F T | T      | T
T F F | F      | F
F T T | T      | F
F T F | T      | F
F F T | T      | F
F F F | F      | F

Некоторые выражения могут быть сложнее, чем нужно. Например,

x | NOT (NOT x)
===============
T | T
F | F

Другими словами, NOT (NOT x) является эквивалентом просто x.

Правила ДеМоргана - это удобные приемы, которые позволяют нам преобразовывать эквивалентные выражения, соответствующие определенным шаблонам:

  • NOT (x AND y) = (NOT x) OR (NOT y)
  • NOT (x OR y) = (NOT x) AND (NOT y)

(Вы можете думать об этом, как NOT распространяется через простые выражения AND и OR. )

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

NOT (here AND there)

Применяя правило, это еще один способ сказать "тебя нет ни здесь, ни там".

Упражнение: Как бы вы могли выразить второе правило на простом английском?

Для первого правила давайте посмотрим на таблицу истинности для выражения слева от знака равенства.

x y | x AND y | NOT (x AND y)
=============================
T T | T       | F
T F | F       | T
F T | F       | T
F F | F       | T

Теперь правая сторона:

x y | NOT X | NOT Y | (NOT x) or (NOT y)
========================================
T T | F     | F     | F
T F | F     | T     | T
F T | T     | F     | T
F F | T     | T     | T

Итоговые значения в обеих таблицах одинаковы. Это доказывает, что выражения эквивалентны.

Упражнение: Докажите, что выражения НЕ (x ИЛИ y) и (НЕ x) И (НЕ y) эквивалентны.

34
ответ дан 29 November 2019 в 06:31
поделиться

Вам необходимо использовать запрос. ApplicationPath. Это то, для чего он предназначен.

Редактирование, чтобы пойти с вашим комментарием.

Поскольку вы хотите «чистить способ для обработки косой косы, я рекомендую создать функцию утилиты, которая возвращает путь приложения с логикой в ​​нем, чтобы иметь дело с Slash, как вы видите посадку.

-121--2343282-

Нарисуйте простую диаграмму Venn, два пересекающихся круга. Положить в левый и б в правой части. Сейчас (A и B), очевидно, пересекающийся бит. Итак, не (A и B) - это все, что не в пересекающейся бит, остальная часть обеих кругов. Цвет, который в.

Нарисуйте еще два круга, как ранее, A и B, пересекающиеся. Сейчас не (а) - это все, что в правильном круге (б), но не пересечение, потому что это, очевидно, а также, как и B. Цвет этого в. Точно так же не (б) это все в левом кругу, но не пересечение, Потому что это B, а также А. Цвет этого в.

Две рисунки выглядят одинаково. Вы доказали, что не (A и B) = не (а) или нет (b). T'Oth Case остается как упражнение для студента.

2
ответ дан 29 November 2019 в 06:31
поделиться

Это просто способ восстановления заявлений истины, которые могут предоставить более простые способы написания условных условных.

На простом английском языке:
Когда что-то не так или что, это тоже не так и не то.
Когда что-то не так и то, это тоже не так или не то.

Примечание: Учитывая неточность английского языка на слово «или», я использую его, чтобы означать неисключительную или в предыдущем примере.

Например, следующий псевдокод эквивалентен:
, если нет (A или B) ...
Если (не а) и (не б) ....

если нет (а и б) ...
Если нет (а) или нет (b) ...

5
ответ дан 29 November 2019 в 06:31
поделиться

Если вы полицейский, ищущий несовершеннолетних пьющих, вы можете сделать одно из следующих, и закон Де Моргана говорит, что они равны:

Формация 1 (A AND B)

Если они моложе возраста... лимит И пить алкоголик напиток, арестуйте их.

ФОРМУЛЯЦИЯ 2 (NOT(NOT A OR NOT B))

Если они превышают . возрастной ценз ИЛИ выпивка безалкогольный напиток, отпусти их.

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

2
ответ дан 29 November 2019 в 06:31
поделиться

Параллелизм сводится к управлению общим состоянием.

"Все проблемы параллелизма сводятся к координация доступа к изменяемому состоянию. Чем менее изменяемое состояние, тем легче обеспечивает безопасность резьбы. " - Java Concurrency in Practice

Таким образом, вы должны задать себе вопрос:

  • Каковы присущие общие данные, которые потребуются моему приложению?
  • Когда поток может работать над снимком данных,
  • Могу ли я определить известный шаблон и использовать абстракцию более высокого уровня, а не блокировки низкого уровня и координацию потоков, Например, очереди, исполнитель и т.д.?
  • Подумайте о глобальной схеме блокировки, чтобы избежать взаимоблокировки и иметь последовательное получение блокировок

Самый простой подход к управлению общим состоянием состоит в сериализации каждого действия. Однако этот грубый подход приводит к высокому конфликту блокировок и низкой производительности. Управление параллелизмом можно рассматривать как упражнение оптимизации, в котором вы пытаетесь уменьшить конкуренцию. Итак, последующие вопросы:

  • Каким будет самый простой подход?
  • Каков простой выбор, который я могу сделать, чтобы уменьшить конкуренцию (возможно, с мелкозернистой блокировкой) и улучшить производительность, не делая решение слишком сложным?
  • Когда я перехожу к слишком мелкозернистой, то есть введенная сложность не стоит повышения производительности?

Большой подход к снижению конкуренции основан на некоторой форме компромисса между тем, что было бы необходимо для обеспечения правильного поведения, и тем, что можно сделать для снижения конкуренции.

  • Где можно ослабить некоторые ограничения и принять, что иногда вещи не будут на 100% правильными (например, счетчик)?
  • Могу ли я быть оптимистом и справляться с конфликтами только тогда, когда происходят параллельные изменения (например, использование временной метки и логики повтора - это то, что делает ТМ)?

Обратите внимание, что я никогда не работал над игрой, только на серверной части корпоративных приложений.

-121--2347136-

Если вы хотите нарисовать фон холста, я бы рекомендовал использовать ImageBrush в качестве фона , 'потому что это просто, так как вам не нужно подкласс Canvas , чтобы переопределить Onender .

Но я дам вам демонстрационный исходный код для того, что вы просили:

Создайте класс (я назвал его ImageCanvas )

    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;

    namespace WpfApplication1
    {
        public class ImageCanvas : Canvas
        {
            public ImageSource CanvasImageSource
            {
                get { return (ImageSource)GetValue(CanvasImageSourceProperty); }
                set { SetValue(CanvasImageSourceProperty, value); }
            }

            public static readonly DependencyProperty CanvasImageSourceProperty =
                DependencyProperty.Register("CanvasImageSource", typeof(ImageSource),
                typeof(ImageCanvas), new FrameworkPropertyMetadata(default(ImageSource)));

            protected override void OnRender(System.Windows.Media.DrawingContext dc)
            {
                dc.DrawImage(CanvasImageSource, new Rect(this.RenderSize));
                base.OnRender(dc);
            }
        }
    }

Теперь вы можете использовать его так:

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1" Title="Window1" Height="300" Width="300">
    <Grid>
        <local:ImageCanvas CanvasImageSource="/Splash.png">
            <TextBlock Text="Hello From Mihir!" />
        </local:ImageCanvas>
    </Grid>
</Window>
-121--3242455-

Глядя на некоторые ответы, я думаю, что я могу объяснить это лучше, используя условия, которые

Закон ДеМоргана относится к тому факту, что существует два одинаковых способа написания любой комбинации двух условий - в частности, комбинация AND (оба условия должны быть истинными) и комбинация OR (одно из них может быть истинным). Примеры:

Часть 1 закона ДеМоргана

Утверждение: Алиса имеет родного брата.
Условия: У Алисы есть брат ИЛИ у Алисы есть сестра.
Напротив: Алиса является единственным ребёнком ( НЕ имеет родного брата).
Условия: У Алисы НЕТ брата, И у нее НЕТ сестры.

Другими словами: НЕ [A OR B] = [НЕ A] И [НЕ B]

Часть 2 закона ДеМоргана

Заявление: Боб является водителем автомобиля.
Условия: Боб имеет автомобиль И Боб имеет лицензию.
Напротив: Боб НЕ водитель автомобиля.
Условия: Боб НЕ имеет автомобиль, ИЛИ Боб НЕ имеет лицензию.

Другими словами: НЕ [А И В] = [НЕ А] ИЛИ [НЕ В] .

Я думаю, что это было бы немного менее запутанно для 12-летнего ребенка. Это, конечно, менее запутанно, чем вся эта ерунда о таблицах правды (даже я путаюсь, глядя на все это).

18
ответ дан 29 November 2019 в 06:31
поделиться

«У него нет ни машины, ни автобуса». означает то же самое, что «У него нет машины и автобуса»

. «У него нет машины и автобуса». означает то же самое, что и «У него либо нет машины, либо нет автобуса, я не уверен, какой, может, у него ни того, ни другого».

Конечно, простым языком: «У него нет. есть машина и автобус ". подразумевает, что у него есть хотя бы одна из этих двух вещей. Но, строго говоря, с логической точки зрения утверждение также верно, если у него нет ни одного из них.

Формально:

  • not (автомобиль или автобус) = (не автомобиль) и (не автобус)
  • not (автомобиль и автобус) = (не автомобиль) или (не автобус)

По-английски, ' или 'имеет тенденцию означать выбор, что у вас нет обоих вещей. В логике «или» всегда означает то же самое, что и «и / или» в английском языке.

Вот таблица истинности, которая показывает, как это работает:

Первый случай: not (cor or bus) = (not car) and (not bus)

 c | b || c or b | not (c or b) || (not c) | (not b) | (not c) and (not b)
---+---++--------+--------------++---------+---------+--------------------
 T | T ||    T   |      F       ||    F    |    F    |        F
---+---++--------+--------------++---------+---------+--------------------
 T | F ||    T   |      F       ||    F    |    T    |        F
---+---++--------+--------------++---------+---------+--------------------
 F | T ||    T   |      F       ||    T    |    F    |        F
---+---++--------+--------------++---------+---------+--------------------
 F | F ||    F   |      T       ||    T    |    T    |        T
---+---++--------+--------------++---------+---------+--------------------

Second case: not (car and bus) = (not автомобиль) или (не автобус)

 c | b || c and b | not (c and b) || (not c) | (not b) | (not c) or (not b)
---+---++---------+---------------++---------+---------+--------------------
 T | T ||    T    |       F       ||    F    |    F    |        F
---+---++---------+---------------++---------+---------+--------------------
 T | F ||    F    |       T       ||    F    |    T    |        T
---+---++---------+---------------++---------+---------+--------------------
 F | T ||    F    |       T       ||    T    |    F    |        T
---+---++---------+---------------++---------+---------+--------------------
 F | F ||    F    |       T       ||    T    |    T    |        T
---+---++---------+---------------++---------+---------+--------------------
2
ответ дан 29 November 2019 в 06:31
поделиться

Закон ДеМоргана позволяет вам определять последовательность логических операций по-разному. Это применимо к логике и теории множеств, где в теории множеств вы используете дополнение для не, пересечение для и и объединение для или.

Закон ДеМоргана позволяет упростить логическое выражение, выполняя операцию, которая очень похожа на свойство распределения при умножении.

Итак, если у вас есть следующее в C-подобном языке

if !(x || y || z) { /* do something */ }

Это логически эквивалентно:

if (!x && !y && !z)

Это также работает так:

if !(x && !y && z)

превращается в

if (!x || y || !z)

И вы, конечно, можете пойти наоборот.

Эквивалентность этих утверждений легко увидеть, используя так называемую таблицу истинности. В таблице истинности вы просто размещаете свои переменные (x, y, z) и перечисляете все комбинации входных данных для этих переменных. Затем у вас есть столбцы для каждого предиката или логического выражения, и вы определяете для заданных входных данных значение выражения. Любая университетская программа по информатике, компьютерной инженерии или электротехнике, скорее всего, сведет вас с ума от количества и размера таблиц истинности, которые вы должны построить.

Так зачем их изучать? Я думаю, что самая большая причина использования вычислений заключается в том, что они могут улучшить читаемость более крупных логических выражений.Некоторым людям не нравится использовать логическое «не» ! перед выражениями, так как они думают, что это может сбить кого-то с толку, если они его пропустят. Однако влияние закона ДеМоргана на уровень логических элементов микросхем является полезным, поскольку определенные типы логических элементов быстрее, дешевле или вы уже используете для них целую интегральную схему, поэтому вы можете уменьшить количество пакетов микросхем, необходимых для исход.

1
ответ дан 29 November 2019 в 06:31
поделиться
Другие вопросы по тегам:

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