Электронная гадалка Шеннона

Погрузись в мир теории информации с Электронной гадалкой Шеннона: задавай бинарные «да/нет» вопросы и наблюдай, как она отгадывает твою задумку за секунды!

Электронная гадалка Шеннона – это интерактивная игра‑симулятор, построенная на принципах теории информации, разработанной Клодом Шенноном. Игра демонстрирует, как с помощью последовательных бинарных вопросов («да/нет») можно быстро сузить пространство возможных вариантов и «угадать» задуманное пользователем понятие, объект или число.

Содержание статьи

  1. История появления
  2. Принцип работы
  3. Как реализовать электронную гадалку
  4. Варианты и модификации
  5. Применения в образовании и развлечениях
  6. Контакты для обращений

История появления

Идея «электронной гадалки» принадлежит Клоду Шеннону (1916‑2001) – отцу современной теории информации. В 1948 году в статье «A Mathematical Theory of Communication» Шеннон ввёл понятие энтропии как меры количества информации. На базе этой теории в 1960‑х годах в США начали экспериментировать с простыми играми‑симуляторами, цель которых – продемонстрировать, как с помощью минимального количества вопросов можно определить любую скрытую переменную.

В русскоязычном сообществе «электронная гадалка Шеннона» получила широкое распространение после публикации отчётов о реализации игры в виде консольных и веб‑приложений (см. работы В.П. Самохина, 2016 г.).

Принцип работы

Самое главное помнить, что построение оптимального бинарного дерева вопросов позволяет за log2(N) шагов (где N – количество возможных ответов) точно определить задуманный объект. Ниже перечислены ключевые пункты алгоритма:

  • Определение множества вариантов. На старте задаётся конечный список элементов (например, 32 животных).
  • Расчёт энтропии. Для каждого возможного вопроса вычисляется, насколько он уменьшает неопределённость (энтропию) текущего множества.
  • Выбор вопроса с максимальной информационной прибылью. Выбирается вопрос, который делит множество на две части как можно более равные.
  • Получение ответа пользователя. После ответа «да» или «нет» отбрасывается половина вариантов.
  • Повторение. Процесс повторяется, пока не останется один вариант – «угаданный» объект.

Таким образом, игра иллюстрирует фундаментальный закон Шеннона: для определения одного из N равновероятных состояний требуется минимум log2(N) бит информации.

Как реализовать электронную гадалку

Шаг 1. Подготовка списка объектов

Создайте массив JSON‑объектов, где каждый объект имеет набор характеристик (признаков). Пример для животных:

[
 {"name":"Лев", "class":"млекопитающее", "habitat":"сафари", "size":"большой"},
 {"name":"Краб", "class":"ракообразное", "habitat":"море", "size":"маленький"},
 // …
]

Шаг 2. Формирование вопросов

Вопросы формируются автоматически, используя все возможные бинарные свойства:

  • «Это млекопитающее?»
  • «Живёт в воде?»
  • «Размер больше 1 м?»
  • «Обитает в пустыне?»

Шаг 3. Алгоритм выбора лучшего вопроса

Для каждого вопроса вычисляем:

  1. Кол‑во элементов, удовлетворяющих условию «да» (A) и «нет» (B).
  2. Энтропию: H = ౼ (A/(A+B))log2(A/(A+B)) ⏤ (B/(A+B))log2(B/(A+B)).
  3. Выбираем вопрос с минимальной H (т.е. максимальное информативное деление).

Шаг 4. Интерфейс

  • Элемент <div id="question"> выводит текущий вопрос.
  • Кнопки Да и Нет вызывают функцию handleAnswer(true/false).
  • После каждой итерации список оставшихся вариантов отображается в <ul id="candidates">.

Пример кода (минимальный)

<html lang=»ru»>
<head><meta charset=»UTF-8″><title>Гадалка Шеннона</title></head>
<body>
<h2 id=»question»>Нажмите «Старт», чтобы начать</h2>
<button onclick=»startGame»>Старт</button>
<div id=»controls» style=»display:none;»>
<button onclick=»answer(true)»>Да</button>
<button onclick=»answer(false)»>Нет</button>
</div>
<h3>Возможные варианты:</h3>
<ul id=»candidates»></ul>

<script>
const items = [/* массив объектов как выше */];
let candidates = [];
let questions = [];
function startGame {
candidates = […items];
generateQuestions;
nextStep;
}

function generateQuestions {
const props = new Set;
items.forEach(i => Object.keys(i).forEach(k => {if(k!==’name’) props.add(k)}));
questions = [..;props].map(p => ({
prop:p,
text:`Это ${p} = ${items[0][p]}?` // простая формулировка
}));
}

function entropy(question) {
const yes = candidates.filter(i=>i[question.prop]).length;
const no = candidates.length ౼ yes;
if(yes===0 || no===0) return Infinity;
const pYes = yes / candidates.length;
const pNo = no / candidates.length;
return -pYesMath.log2(pYes) ⏤ pNoMath.log2(pNo);
}

function bestQuestion {
let best = null, minH = Infinity;
questions.forEach(q => {
const h = entropy(q);
if(h<minH){ minH=h; best=q; }
});
return best;
}

function nextStep {
const list = document.getElementById(‘candidates’); if(candidates.length===1){ document.getElementById(‘controls’).style.display=’none’;
return;
}
const q = bestQuestion; document.getElementById(‘question’).innerHTML = q.text;
document.getElementById(‘controls’).dataset.prop = q.prop;
document.getElementById(‘controls’).style.display=’block’;
}
function answer(isYes){
const prop = document.getElementById(‘controls’).dataset.prop;
candidates = candidates.filter(i=> (isYes ? i[prop] : !i[prop]));
nextStep;
}
</script>
</body>

Варианты и модификации

  • Тематические гадалки. Вместо животных – известные личности, фильмы, исторические даты и пр.
  • Многовариантные ответы. Вместо бинарных «да/нет» можно использовать триграммы («да», «нет», «не знаю»), что увеличивает количество шагов, но упрощает формулировку вопросов.
  • Адаптивные вопросы. Использование машинного обучения для динамического подбора вопросов на основе исторических данных.
  • Графический интерфейс. Веб‑приложения с анимацией, где каждый вопрос – «кнопка‑ворота», а ответы визуализируются в виде раскладывающегося дерева.

Применения в образовании и развлечениях

Электронная гадалка на основе теории Шеннона — отличный инструмент для:

  1. Обучения базовым понятиям информатики (бит, энтропия, оптимальное кодирование).
  2. Проведения интерактивных викторин на семинарах и школьных уроках.
  3. Разработки чат‑ботов, которые «угадывают» интересы пользователя за несколько вопросов.
  4. Тестирования навыков формулирования эффективных вопросов в маркетинге и аналитике.

Контакты для обращений

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

  • Электронная почта: shannon-gadgets@example.com – общий запрос, предложения сотрудничества.
  • Telegram-чат: t.me/shannon_gadgets – быстрые ответы, обсуждение кода, обмен примерами.
  • GitHub-репозиторий: github.com/entropy-lab/shannon-gadgets – открытый исходный код, задачи (issues) и pull‑request’ы.
  • Форум «Информационные технологии»: Раздел «Игры и алгоритмы» – forum.it.ru/shannon-gadgets.
  • Контактное лицо: Иван Петров, старший разработчик, +7 (916) -23‑45‑67 – живой диалог по телефону в рабочие часы (10:00‑18:00 МСК).

Электронная гадалка Шеннона — это не просто игра, а наглядный эксперимент, показывающий, как информация измеряется и как её можно эффективно извлекать. Реализовать её достаточно просто, а полученный опыт полезен как для начинающих программистов, так и для преподавателей, желающих сделать занятия по теории информации живыми и интерактивными.

Дата последнего обновления: