Выбрать главу

Юноша закусил губу и продолжал смотреть на королевские игрушки. Ему вдруг совсем по-детски захотелось подбежать к "мушкетеру" да потихоньку вытащить у него шпагу из ножен. Автомат не заметит, не поймет, не остановится, а по-прежнему будет механически извлекать отсутствующее оружие, салютовать ничем. Его поведение потеряет всякий смысл. Если сей воин даже встретит на своем пути стену, он не свернет, а продолжит свой марш напролом. Смешно и нелепо!

"Нелепости вполне можно избежать, - решил внезапно Р. Декарт, - только одно требуется для этого: чтобы автомат проверял самого себя. "Мушкетер", прежде чем обнажать шпагу, должен бы ответить на вопрос: "Шпага в ножнах?" Если да, действовать решительно, а если нет, обратиться, положим, к окружающим: верните, мол, мое оружие. И стена автомату не страшна. Время от времени он обязан проверять: "Дорога свободна?" Если да, не останавливаться, а если нет, поискать другого пути".

Итак, серьезный алгоритм наряду с повелительными предложениями должен содержать и предложения вопросительные. Заглянем в нашу библиотечку. Операции-вопросы, хоть их и немного, сразу бросаются в глаза: "Данное слово входит в словарь?", "Красавица здесь?"

Сразу бросается в глаза и особенность этих вопросов: они поставлены в такой плоскости, что допускают только два ответа - "да" и "нет". Слово или входит в словарь, или не входит в него; красавица или в этой части царства, или не в этой, а в другой, не в Баклушах, а в Балясах. И у "мушкетера" шпага либо в ножнах, либо ее мысленно извлек оттуда юный Р. Декарт.

Лет через десять после памятного осмотра автоматов Р. Декарт написал небольшую работу под названием "Правила для руководства ума". В этих правилах, адресованных людям, философ особое внимание уделял отчетливому пониманию того, что мы действительно хотим отыскать, задавая вопрос, и того, что лишь отдаленно связано с вопросом. "Человеческий ум подвержен двоякого рода заблуждению, - говорит Р. Декарт. - Или он захватывает больше, чем надо для определения какого-либо вопроса, или, наоборот, что-нибудь упускает".

Алгоритм п заблуждения несовместимы. Именно поэтому в алгоритм пропускаются лишь очень строгие и четкие вопросы. Здесь днем с огнем не сыщешь вопросов вроде "Что есть истина?", "Как быть дальше?" или "Можно ли побороть несправедливость?", Здесь не м&

сто ни темным, ни вечным, ни проклятым вопросам. Вопрос здесь прям, ясен и прозрачен. Он требует обязательного и недвусмысленного ответа: "да" или "нет".

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

Многократно и искусно используя "да" или "нет", удается обойти любое препятствие, добраться до любой цели, где бы она ни пряталась. Помните, в поисках Спящей красавицы нам помогла вещая птица? Птица, видимо, знала толк в алгоритмировании - отвечала только "да" и "нет" и была уверена, что этого достаточно.

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

Отдел кадров большого завода... Кадровики обращаются к вычислительной машине: отпечатай список всех наших мужчин в возрасте от 20 до 35 лет, которые не женаты. Машина, хранящая в своей памяти полный перечень рабочих и служащих завода, тотчас берет из него первую фамилию и придирчиво проверяет: мужчина? молодой? холост?

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

И в любом случае возвращается к началу алгоритма: вновь извлекает очередную фамилию из списка, опять проверяет, снова то ли печатает ее, то ли пропускает - как проверка покажет. И опять упрямо поворачивает к истокам задачи.