Элен. Ты мог бы придумать задачку потруднее. За 1 мин до столкновения нас будет разделять 250 м.
Элен не ошиблась. Не можете ли вы объяснить, каким образом она сумела так быстро решить задачу?
От конца к началу
Разумеется, задачу можно решать алгебраически, хотя решение получается довольно громоздким. Элен придумала неожиданный ход, позволивший получить ответ, не прибегая к алгебре: она догадалась, что задачу можно решать от конца к началу!
Грузовик развивает скорость 65 км/ч, а Боб едет со скоростью 80 км/ч. Следовательно, Боб движется относительно грузовика со скоростью 15 км/ч, или 15 000 м/ч, что составляет 250 м/мин. Значит, за минуту до столкновения легковая машина, в которой едут Боб и Элен, находится в 250 м позади грузовика.
Мы знаем также, что, когда Боб закончил рассказывать Элен задачу, их автомашина находилась в 1,5 км позади грузовика, но эта информация не нужна для решения задачи: ответ получается одним и тем же независимо от начального расстояния между машинами.
Следующие две классические головоломки также решаются «обратным ходом».
1. Два космических корабля сближаются, двигаясь по прямой навстречу друг другу. Один корабль летит со скоростью 8 км/мин, другой — со скоростью 12 км/мин. Предположим, что в некоторый момент времени корабли находятся на расстоянии ровно 5000 км друг от друга. На каком расстоянии они будут находиться друг от друга за 1 мин до столкновения?
В этой задаче так же, как и в предыдущей, ответ не зависит от начального расстояния между кораблями. Оно лишь вводит людей в заблуждение, поскольку те начинают думать, будто задачу нужно решать, следя за тем, как уменьшается со временем расстояние между кораблями. Задача решается легко и просто, если понять, что корабли сближаются со скоростью 20 км/мин и, следовательно, за 1 мин до столкновения они будут находиться на расстоянии 20 км друг от друга.
2. Некоему специалисту по молекулярной биологии удалось вывести редкую разновидность бактерий. Ежечасно каждая бактерия делится на 3 части, причем каждая часть мгновенно достигает размеров взрослой бактерии и час спустя претерпевает деление на 3 части.
Ровно в полдень биолог положил 1 бактерию в стерильный контейнер с питательной средой. К полночи контейнер оказался наполненным бактериями до отказа. Когда контейнер наполнился на одну треть?
Как и предыдущие задачи, эта головоломка решается «обратным ходом»; ясно, что на одну треть контейнер заполнился к 11 часам вечера, за час до полуночи.
А теперь мы предлагаем вам проверить свою сообразительность на новом замечательном варианте последней задачи. Все условия остаются прежними, за исключением одного: ровно в полдень биолог положил в стерильный контейнер с питательной средой не одну, а три бактерии. Когда наполнится контейнер? Ответ приведен в конце книги.
Загадочная покупка
Когда друзья доехали до дома, где жили родители Элен, она вручила отцу сверток.
Элен. Здесь то, что ты собирался купить для дома, папочка!
Мистер Браун. Спасибо, дочка! А сколько это стоило?
Элен. Пятьсот стоили 3 доллара.
Мистер Браун. 3 доллара? Значит, по 1 доллару за штуку.
Элен. Правильно, папочка.
Что, по-вашему, Элен купила в подарок отцу?
Плата поштучно
Возможно, вы догадались, что слово «пятьсот» может иметь 2 значения: число пятьсот и 3 цифры 500, написанные подряд. Если одна цифра стоит 1 доллар, то 3 цифры стоят 3 доллара: Элен купила три цифры для номера дома, в котором живут ее родители.
Эта задача-шутка наглядно показывает, что в поисках решения иной раз бывает полезно перечитать условия задачи.
Как отгадать номер телефона?
Боб. Кстати, Элен, ты до сих пор не дала мне номер своего нового телефона.
Элен. Ты знаешь, мы уговорились не сообщать его никому, но для тебя я готова нарушить уговор. Можешь задать мне любые 24 вопроса о номере телефона, на которые можно ответить «да» или «нет», и я отвечу на них.
Боб. Помилуй, Элен! Семизначных телефонных номеров почти 10 млн. Как я смогу отгадать один из них, задав всего 24 вопроса?
Элен. Подумай хорошенько, Боб, и я уверена, что ты сумеешь отгадать мой телефонный номер.
Боб не обманул ожиданий Элен и вскоре действительно придумал простой способ, позволяющий отгадывать любой семизначный телефонный номер, задавая не более 24 вопросов. Придумав такой способ, вы сможете испытать его на своих друзьях и знакомых.
Дихотомия, или разбиение на две части
Боб догадался, что с помощью вопросов, допускающих ответы «да» и «нет», выделенный элемент множества лучше всего искать, придерживаясь следующей стратегии. Если множество содержит четное число элементов, то его следует разделить на две равные части, содержащие одинаковое число элементов. Если множество содержит нечетное число элементов, то его следует разделить на две части так, чтобы они как можно меньше отличались по числу элементов. После того как множество разделено на две части, следует спросить, указывая на одну из них, содержится ли в ней выделенный элемент. Получив ответ и выбрав ту из двух частей, которая содержит выделенный элемент, надлежит повторить всю процедуру сначала. После конечного числа шагов (зависящего от числа элементов в исходном множестве) останется подмножество, содержащее только выделенный элемент — тот самый, который требовалось найти.
Чтобы найти выделенный элемент в множестве из 2 элементов, достаточно задать 1 вопрос, отвечать на который можно только «да» или «нет». В множестве из 4 элементов выделенный элемент будет найден за 2 таких вопроса, в множестве из 8 элементов — за 3 вопроса, в множестве из 16 элементов — за 4 вопроса и т. д. В общем случае n вопросов, допускающих ответы типа «да» или «нет», достаточно, чтобы найти выделенный элемент в множестве из 2n элементов.
В задаче о телефонном номере 24 вопроса позволяют отгадать любое число от 1 до 224 = 16777216, что больше 9999999 — «наибольшего» из семизначных телефонных номеров. Двадцати трех вопросов может не хватить, так как число 223 = 8388608 меньше некоторых семизначных телефонных номеров.
Прежде всего Бобу нужно спросить у Элен: «Номер твоего телефона больше 5000000?» Ответ на этот вопрос позволит Бобу отбросить половину номеров и тем самым вдвое сузить круг дальнейших поисков. Продолжая дихотомию, он заведомо «попадет» в номер телефона Элен, задав не более 24 вопросов.
Большинство людей с трудом верят, что с помощью 24 вопросов, допускающих ответы «да» или «нет», можно отгадать любое число от 1 до 16 777 216, поскольку не сознают, как быстро возрастают члены геометрической прогрессии со знаменателем 2. Именно этот чрезвычайно быстрый рост позволяет сравнительно легко отгадывать, любое задуманное слово, задавая тому, кто его задумал, только вопросы, допускающие ответы «да» или «нет». Если вы достаточно поднаторели в дихотомии, то, хотя задуманное слово может означать что угодно, обычно его можно отгадать, задавая менее 20 вопросов.
Описанную нами процедуру отгадывания семизначного номера телефона специалисты по вычислительной технике называют алгоритмом двоичной сортировки. На том же принципе основан остроумный фокус с отгадыванием чисел. Необходимый реквизит состоит из 6 карточек, показанных на рис. 1.