Шрифт:
Интервал:
Закладка:
Волшебные слова — коды и колдовство
Давайте посмотрим на простые алгоритмы сопоставления с образцом, чтобы понять, о чем идет речь. Фокусники давно поняли: если им известна простая закономерность, о которой вы не догадываетесь, это можно использовать для создания волшебных эффектов. Например, практика телепатии имеет долгую и славную историю. Находящемуся на сцене фокуснику завязывают глаза, а его помощник собирает какие-то предметы у зрителей. Затем благодаря «ментальной связи» человек с завязанными глазами описывает собранные предметы, не видя их. Для этого используются специальные вербальные коды, и, чтобы освоить этот фокус, артистам приходится много запоминать.
Например, если выбранный предмет — ручка, ассистент, допустим, говорит: «Итак, что у меня в руке?» Если это карманные часы, ассистент задает вопрос иначе: «Какой предмет у меня в руке? Хорошо подумай. Время есть». Конечно, все это довольно грубые примеры — фокусники действуют гораздо тоньше, и поэтому их правила труднее запомнить. Такие выступления были очень популярны в прошлом, и артисты разрабатывали все более и более изощренные словесные коды. Закономерность была спрятана у всех на виду в произносимых словах, и расшифровка кода позволяла осуществить невозможное на сцене.
Учитесь читать мысли
Вы можете поэкспериментировать со скрытыми закономерностями и попробовать себя в чтении мыслей. Для рассматриваемого варианта не нужна столь же хорошая память, как для традиционного. Вам потребуется сообщник — партнер, который в курсе дела, и зрители. Во время выступления (постарайтесь, чтобы ваши действия выглядели загадочными и таинственными) человек из вашей команды, фокусник, выходит из комнаты. Затем зрители втайне от него выбирают предмет, который маг должен назвать по возвращении.
Ассистент остается в комнате, где делают выбор, чтобы «гарантировать честную игру и проследить, чтобы никто не передумал». После возвращения мага ассистент начинает ходить по комнате — вроде бы безо всякой цели — и указывает на разные предметы, каждый раз задавая один и тот же вопрос: «Это выбранный предмет?» И каждый раз маг отвечает правильно.
Вместо того чтобы запоминать сложную последовательность словесных кодов, можно с тем же эффектом использовать простое сопоставление с образцом на основе прогнозирующего алгоритма. Заранее условьтесь с ассистентом о каком-то предмете — например, лампе. Что бы вы ни выбрали, назовем это x. Секретный сигнал состоит в том, что, когда ассистент указывает на этот объект, вы понимаете, что следующий (назовем его y) и будет избранным. Ваш общий секрет — алгоритм, приведенный на рис. 62. Конечно, нужно заранее договориться, что вы обозначите, как x.
Если вас попросят снова показать фокус и попытаться угадать серию предметов, закономерность станет слишком очевидной. С этим легко справиться, применив немного алгоритмического мышления и расширив алгоритм. Каждый раз, выполняя фокус, вы используете разные предметы, прежде чем указать на выбранный, — например, лампу, потом ковер, потом выключатель. Теперь x меняется каждый раз. Код для совместного использования может выглядеть примерно как на рис. 63.
Конечно же, перед началом вам надо убедиться, что у вас есть лампа, ковер и выключатель. Вы указываете на лампу, пытаясь угадать первый предмет (когда номер попытки — 1), ковер при угадывании второго предмета (когда номер попытки — 2) и выключатель для третьего раза (когда номер попытки — 3). Последнее утверждение по умолчанию — на случай, если вас попросят найти четвертый, пятый или даже шестой предмет. Некоторых людей невозможно удовлетворить! К этому вы не готовы, но правильное алгоритмическое мышление должно обеспечить варианты на любой случай. Поэтому у вас есть отговорка по умолчанию, если кто-то из зрителей будет настаивать на продолжении после трех заготовленных чудес ясновидения: «Мои экстрасенсорные возможности истощены. Прошу прощения, я не могу продолжать».
Если образец подводит, что тогда получится?
Этот алгоритм сопоставления с образцом в большинстве случаев позволит вам развлечь аудиторию, но иногда возникают проблемы. Логика наших рассуждений должна быть безупречной в каждой детали. Возможно, вы подумаете, что охватили все варианты, но если вторым предметом, выбранным аудиторией, окажется красивый ковер, который вы хотели использовать как второй сигнал? В алгоритме сопоставления с образцом появляется проблема. Незапланированная в нашем алгоритме неожиданность. Получается, надо показать на ковер — а потом снова показать на ковер! Это будет выглядеть не слишком-то волшебно.
Конечно, во время фокуса вы как человек будете импровизировать на ходу и выкручиваться с помощью юмора — например, действительно два раза покажете на ковер и пошутите на эту тему. Но если вы запрограммировали робота-фокусника, который точно следует алгоритму, то все будет выглядеть глупо. Робот сможет пошутить только в том случае, если вы предусмотрели возможные проблемы и добавили в алгоритм код для соответствующих шуток.
Итак, если робот-фокусник не справится с задачей, это не конец света. Но если бы речь шла об алгоритме сопоставления с образцом, который определяет, выполнены ли в правильном порядке все разнообразные действия, необходимые для выпуска посадочных шасси воздушного судна, и в нем возникла бы похожая проблема, случай был бы совсем другим. Продумать все вероятные ситуации и предусмотреть для них встроенное сопоставление с образцом сложнее, чем представляется, но программистам это необходимо, чтобы их программное обеспечение работало правильно.
В так называемых системах с особыми требованиями к безопасности эксплуатации есть целый ряд образцов, которые обязательно нужно найти и на которые нужно правильно отреагировать, — например, в ПО для больниц, для управления ядерными реакторами или самоуправляемых машин нового поколения. Если мы просто учтем массу возможных вариантов, то все равно нам не удастся охватить все. Поэтому в информатике используются логическое и аналитическое мышление и создаются математические способы анализа таких систем — например, они могут базироваться на идеях, которые мы применили к решению головоломок в главе 4. Математика обеспечивает нам более мощный инструмент для поиска образцов в системе. Потом пишутся программы, реализующие логическое мышление, основанное на математике. Компьютеры гораздо лучше нас изучают возможности и ничего при этом не упускают. Компьютеры в огромных объемах занимаются за нас вычислительным мышлением.
Простые числа в математических фокусах
Давайте рассмотрим другой тип фокусов, основанных на сопоставлении с образцом, — тип, который работает всегда (всегда, всегда, всегда), потому что нам известны математические принципы, стоящие за его закономерностями. В математике как таковой крайне важна способность видеть и понимать закономерности, а потом превращать их в общие факты, которые называют теоремами, — здесь мы снова наблюдаем метод обобщения, относящийся к вычислительному мышлению (основы вычислительного мышления были почерпнуты в самых разных источниках). Математика хорошо сочетается с магией, и, как только математики и программисты находят закономерности, фокусники могут использовать их в магических трюках.