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

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

На протяжении миллиардов лет жизнь на Земле развивалась как единое дерево со множеством ветвей – Древо Жизни; ее развитию способствовали те или иные алгоритмические процессы.

Со временем постепенно (по мере того как мы будем узнавать, какими способами разные люди выражали эту мысль) станет ясно, что означают эти слова. Некоторые формулировки абсолютно пусты и бессодержательны, другие – очевидным образом ложны. Посередине находятся те, что и в самом деле объясняют происхождение видов – и сулят множество других объяснений. Благодаря как упорной критике откровенных ненавистников идеи эволюции как алгоритма, так и опровержениям ее поклонников, такие формулировки становятся все точнее.

5. Процессы как алгоритмы

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

Поскольку большинство математических обсуждений алгоритмов сосредоточено на их гарантированной или математически доказанной эффективности, люди иногда допускают простейшую ошибку, считая, что процесс, эксплуатирующий случайность или беспорядочность, алгоритмом не является. Но даже при делении в столбик есть место случайности!

Помещается ли делитель в делимом шесть, семь или восемь раз? Как знать! Да и кому это интересно? Этого и не нужно знать: для того чтобы делить в столбик, большого ума не надо. Алгоритм просто требует, чтобы вы выбрали число – любое, если вам угодно, – и проверили результат. Если избранное число слишком мало, увеличьте его на единицу и начните заново; если оно слишком велико – уменьшите. Относительно деления в столбик можно быть уверенным в одном: оно всегда в конечном счете получается, даже если ваш первоначальный выбор максимально неудачен (в этом случае процесс просто займет немного больше времени). Компьютеры успешно решают сложные задачи несмотря на крайнюю глупость – и именно потому кажутся волшебным изобретением: как что-то настолько безмозглое, как машина, может делать что-то настолько толковое? Итак, не вызывает удивления то, сколь часто интересные алгоритмы используют тактику уточнения выбора, механически проверяя каждого взятого наугад кандидата. Это не только не влияет на их доказуемую эффективность – зачастую именно в этом секрет их эффективности63.

Для начала можно сосредоточиться на группе эволюционных алгоритмов, рассмотрев повседневные алгоритмы, обладающие теми же важными особенностями. Дарвин привлекает наше внимание к повторяющимся волнам соперничества и отбора, так что возьмем обычный алгоритм организации турнира с выбыванием (например, теннисного), который неизбежно венчается четвертьфиналами, полуфиналами и, наконец, финалом, в ходе которого определяется единственный победитель.

Заметим, что такая процедура удовлетворяет трем условиям. Процедура не изменится, ведем ли мы счет мелом на доске, в компьютерном файле или – необычная возможность – вообще ничего не записываем, а просто осуществляем отбор, веером расположив несколько отгороженных друг от друга теннисных кортов, у каждого из которых две калитки на вход и лишь одна на выход – и через нее победитель попадает на корт, где состоится следующий матч. (А проигравших пристреливают и прикапывают на месте.) Не нужно быть гением, чтобы провести участников состязания через такое «сито», в конце каждого матча заполняя бумаги (или расстреливая проигравших). Алгоритм всегда сработает.

вернуться

62

Специалисты в области компьютерных наук иногда ограничивают понятия алгоритма, называя так только программы, которые обязательно в какой-то момент оканчиваются – то есть, например, те, в которых нет бесконечных циклов. Но как бы ни было полезно такое ограничение в некоторых случаях для математиков, нам от него толку немного. В самом деле, лишь немногие из постоянно выполняющихся по всему миру программ можно назвать алгоритмами в этом узком смысле слова; большинство неопределенно долго выполняет один и тот же цикл, терпеливо ожидая указаний (например, приказа прервать цикл, без которого выполнение программы продолжится). Однако их подпрограммы являются алгоритмами в строгом смысле слова – если, конечно, в них не таится необнаруженный «баг», из‐за которого программа может «зависнуть».

вернуться

63

Об особенно любопытных свойствах вероятностных алгоритмов Михаэля Рабина см.: Dennett 1984. P. 149–152.

полную версию книги