Таблицы принятия решений

Классы эквивалентности и границы отлично работают, когда результат зависит от ОДНОГО поля. Но скидка на курс на нашем полигоне зависит сразу от трёх условий одновременно: есть ли промокод, повторная ли это покупка, оплачивает ли пользователь картой в рассрочку. Проверить каждое условие по отдельности не покажет, что происходит, когда они встречаются вместе — а именно комбинации условий чаще всего и остаются непроверенными.

Чему научишься за этот урок:
— строить таблицу принятия решений для нескольких условий сразу;
— считать число комбинаций и видеть риск комбинаторного взрыва;
— сокращать таблицу, не теряя ни одного уникального исхода.

Когда одного поля недостаточно

Возьмём правило скидки на курс на нашем полигоне. Условие 1 — есть ли промокод (да/нет). Условие 2 — повторная ли это покупка (да/нет). Условие 3 — оплата картой в рассрочку (да/нет). Правило: если это повторная покупка — скидка 15%, независимо от промокода и способа оплаты. Если это не повторная покупка, но есть промокод — скидка 10%. Если нет ни повторной покупки, ни промокода — скидка 0%.

Таблица принятия решений оформляет такие правила в виде строк: каждая строка — одна конкретная комбинация значений всех условий и действие, которое ей соответствует. Три условия по два значения каждое дают 2 x 2 x 2 = 8 возможных комбинаций — вот полная таблица для нашего правила о скидке.

  Полная таблица решений: скидка на курс (3 условия x 2 значения = 8 комбинаций)

  +----+-------+--------+---------+--------+
  | N  | Промо | Повтор | Рассроч | Скидка |
  +----+-------+--------+---------+--------+
  | 1  | да    | да     | да      | 15%    |
  | 2  | да    | да     | нет     | 15%    |
  | 3  | да    | нет    | да      | 10%    |
  | 4  | да    | нет    | нет     | 10%    |
  | 5  | нет   | да     | да      | 15%    |
  | 6  | нет   | да     | нет     | 15%    |
  | 7  | нет   | нет    | да      | 0%     |
  | 8  | нет   | нет    | нет     | 0%     |
  +----+-------+--------+---------+--------+

Комбинаторный взрыв

8 строк для трёх условий — это ещё немного. Четыре условия дают уже 16 строк, пять условий — 32. Число комбинаций растёт не линейно, а по формуле 2 в степени n, где n — число условий с двумя значениями каждое: десять условий дают уже 1024 строки. Проверить вручную каждую строку такой таблицы физически невозможно — а значит, нужен способ таблицу сократить, не пропустив ни одного уникального исхода.

Сокращение таблицы без потери покрытия

Приём называется «безопасное сокращение» (safe combination): если две строки таблицы отличаются значением только ОДНОГО условия, а действие в обеих строках одинаковое — это условие в данной паре строк не влияет на результат. Такие строки можно объединить в одну, пометив это условие как «неважно».

В нашей таблице строки 1 и 2 отличаются только условием «Рассрочка» (да/нет), а действие в обеих — скидка 15%. Значит, рассрочка в этой паре ни на что не влияет — строки объединяются. То же самое происходит со строками 5 и 6. После этого шага повторная покупка = да даёт скидку 15% при ЛЮБОМ значении промокода и рассрочки — все четыре строки с повторной покупкой = да сводятся к одной. Аналогично рассрочка не влияет на результат и в строках с повторной покупкой = нет — там сокращение идёт по тому же принципу. В итоге восемь строк сводятся к трём уникальным правилам.

  После безопасного сокращения: 8 строк -> 3 уникальных правила

  +---------+--------+---------+--------+
  | Промо   | Повтор | Рассроч | Скидка |
  +---------+--------+---------+--------+
  | неважно | да     | неважно | 15%    |
  | да      | нет    | неважно | 10%    |
  | нет     | нет    | неважно | 0%     |
  +---------+--------+---------+--------+

Итог:
— таблица принятия решений делает комбинации условий явными и проверяемыми, а не спрятанными в требовании;
— число комбинаций растёт как 2 в степени n — с трёх условий (8 строк) до пяти (32 строки) очень быстро;
— сокращать таблицу можно только безопасно: объединять строки, где действие одинаково при ЛЮБОМ значении одного из условий, не теряя ни одного уникального исхода.

Контрольный вопрос. Что представляет собой одна строка в таблице принятия решений?

АОдну конкретную комбинацию значений условий и действие, которое ей соответствует
БСписок всех возможных условий без указания их значений
ВОдин негативный тест из семи категорий предыдущих уроков

Подсказка: Вспомни, из чего состоит полная таблица скидки на курс из этого урока.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Сколько всего комбинаций даёт таблица с 3 условиями, каждое из которых имеет 2 значения (да/нет)?

А6
Б8
В9

Подсказка: 2 x 2 x 2 = ?

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Сколько комбинаций даст таблица принятия решений с 5 условиями, каждое из которых имеет 2 значения?

А10
Б25
В32

Подсказка: Число комбинаций растёт как 2 в степени n, где n — число условий.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Что означает «безопасное сокращение» (safe combination) строк таблицы принятия решений?

АОбъединение строк, которые отличаются значением только одного условия, но дают одинаковое действие
БУдаление строк, которые кажутся маловероятными на практике
ВОбъединение любых двух соседних строк для уменьшения размера таблицы

Подсказка: Вспомни правило из середины урока: когда именно можно объединять строки.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. По этому правилу: промокода нет, это повторная покупка, оплата в рассрочку. Какая скидка?

Правило скидки на курс: если «Повторная покупка» = да — скидка 15% (независимо от промокода и способа оплаты). Если «Повторная покупка» = нет и «Промокод» = да — скидка 10%. Если «Повторная покупка» = нет и «Промокод» = нет — скидка 0%. Способ оплаты (рассрочка) на размер скидки не влияет.

А0
Б10
В15

Подсказка: Проверь условия по порядку из правила: сначала — повторная покупка.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. По этому правилу: промокод есть, это не повторная покупка, оплата картой без рассрочки. Какая скидка?

Правило скидки на курс: если «Повторная покупка» = да — скидка 15% (независимо от промокода и способа оплаты). Если «Повторная покупка» = нет и «Промокод» = да — скидка 10%. Если «Повторная покупка» = нет и «Промокод» = нет — скидка 0%. Способ оплаты (рассрочка) на размер скидки не влияет.

А0
Б10
В15

Подсказка: Повторной покупки нет — переходи к следующему условию правила, промокоду.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. По этому правилу: промокода нет, это не повторная покупка, рассрочки нет. Какая скидка? Ответь числом процентов, без знака %.

Правило скидки на курс: если «Повторная покупка» = да — скидка 15% (независимо от промокода и способа оплаты). Если «Повторная покупка» = нет и «Промокод» = да — скидка 10%. Если «Повторная покупка» = нет и «Промокод» = нет — скидка 0%. Способ оплаты (рассрочка) на размер скидки не влияет.

Подсказка: Ни одно из условий на скидку в этом случае не сработало.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Какие пары этих строк можно безопасно объединить в одну ЗА ОДИН шаг, потому что они отличаются значением только ОДНОГО условия и дают одинаковое действие? Выбери все подходящие пары.

В таблице решений скидки на курс есть 4 строки с одинаковым значением условия «Повторная покупка» = да: (Промокод=да, Рассрочка=да) → 15%; (Промокод=да, Рассрочка=нет) → 15%; (Промокод=нет, Рассрочка=да) → 15%; (Промокод=нет, Рассрочка=нет) → 15%.

Выберите все верные варианты.

А(да,да) и (да,нет) — отличаются только Рассрочкой
Б(да,да) и (нет,да) — отличаются только Промокодом
В(да,да) и (нет,нет) — отличаются и Промокодом, и Рассрочкой сразу
Г(да,нет) и (нет,да) — отличаются и Промокодом, и Рассрочкой сразу

Подсказка: Безопасное объединение за один шаг работает только для пары строк, где меняется РОВНО одно условие, а не два сразу.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. У другой таблицы решений 4 условия, каждое принимает 2 значения. Сколько строк (комбинаций) будет в полной, ещё не сокращённой таблице? Ответь числом.

Подсказка: Используй формулу 2 в степени n, где n — число условий.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. Опиши таблицу решений для этого правила: перечисли все 4 комбинации условий «Купон» и «Сумма > 5000» и действие для каждой («скидка есть» или «скидка нет»). Ответ — нумерованный список из 4 пунктов.

Принято, если перечислены все 4 комбинации: (купон=да, сумма>5000=да) → скидка есть; (купон=да, сумма>5000=нет) → скидка есть; (купон=нет, сумма>5000=да) → скидка есть; (купон=нет, сумма>5000=нет) → скидка нет.

Правило: скидка на товар применяется, если есть купон ИЛИ сумма заказа больше 5000 рублей. Скидки нет только тогда, когда нет ни купона, ни суммы больше 5000.

Подсказка: Условий два, у каждого два значения — всего 4 комбинации. Скидки нет ровно в одном случае.

✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.

Онлайн-проверка ответа появится позже

Контрольный вопрос. После сокращения таблицы решений на 3 условия (изначально 8 строк) осталось 3 уникальных правила. Что это означает?

АТолько 3 из 8 комбинаций дают РАЗНЫЕ исходы — остальные строки задают тот же исход другим набором значений условий
Б5 строк из таблицы были ошибочными, и их удалили как неверные
ВТаблица стала неполной и потеряла часть возможных исходов

Подсказка: Сокращение не удаляет исходы — оно объединяет строки с ОДИНАКОВЫМ исходом.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. Можно ли одним шагом безопасно объединить ВСЕ ТРИ строки со «скидка есть» в одну строку, пометив оба условия как «неважно»? Ответь «да» или «нет» и обоснуй одним предложением с учётом того, какое действие даёт четвёртая строка.

Критерий приёмки: нет — потому что помечать условие «неважно» можно только тогда, когда действие одинаково при любом его значении для ВСЕХ комбинаций остальных условий; здесь четвёртая строка (купон=нет и сумма≤5000) даёт другое действие («скидка нет»), значит одним шагом объединить все три строки со «скидка есть» нельзя — сначала нужно найти пары, отличающиеся ровно одним условием.

Для правила «скидка есть, если купон ИЛИ сумма > 5000» три из четырёх строк таблицы дают действие «скидка есть», и только одна строка — «скидка нет».

Подсказка: Правило безопасного объединения требует, чтобы действие совпадало для ВСЕХ значений условия внутри объединяемой группы, а не для большинства строк таблицы.

✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.

Онлайн-проверка ответа появится позже

Что дальше

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

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева