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

Ископаемые алгоритмы

Так робок первый интерес.

Б. Пастернак

Способности электронных вычислительных машин известны нам лишь в небольшой степени. Быть может, такое утверждение покажется читателю странным. Раз машина существует, значит, можно ее испытать, выяснить и время разгона, и максимальную скорость, и тормозной путь, и многое другое. Это справедливо для разных машин, но, увы, не для ЭВМ.

Поведение и результаты действия компьютера определяются введенной в него программой; они меняются неузнаваемо вместе со сменой программы. А разнообразие программ для ЭВМ поразительно. Существуют, однако, границы программной многоликости: ЭВМ решает только те проблемы, которые могут быть описаны посредством алгоритмов.

Итак, познать возможности ЭВМ - это познать возможности алгоритмов. Если с помощью алгоритмов удастся описать разумные решения, то Искинт - реальное дело, а если алгоритмы имеют внутренние пороки, то Искинт останется лишь благим пожеланием.

Передо мной небольшая глиняная табличка, найденная при раскопках Древнего Вавилона. На табличке текст: древний писец выдавил эти знаки 3700 лет назад. Касаясь острым стилом сырой глины, писец решал задачу о разделе наследства: вычислял доли каждого из шести сыновей, положенные им по законам божественной династии Хаммурапи. Писец занимался конкретным случаем: и сумма наследства точно обозначена - вот оно, число, представленное в привычной для тогдашних жителей Вавилона шестидесятеричной системе счисления, - и ход расчета указан, и промежуточные результаты выписаны столбиком, и конечный результат обведен рамочкой. Писец решил задачу для одной семьи; по заказу ли мудрого отца семейства, или по желанию нетерпеливых сыновей, но только для этой семьи.

Тогда почему в тексте он не называет отца и сыновей по имени, а говорит о "начальном сокровище", "доле 1-го", "доле 2-го" и "прочих долях"? Отчего рядом с ясными числами приводит туманные для практического взгляда пояснения: "3 и 5, сумма накопленных денег и процента стоимости земли"? Кому советует: "составь число", "вычти", "прибавь", "не забудь"? Кого предупреждает в конце таблички: "Таков ход дела"?

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

Отец и сыновья понадобились писцу лишь для примера. В табличке есть явное доказательство этого. Семья, о которой сообщает писец, имеет только сыновей. Тем не менее древний математик требует: "Найди долю дочери", и вычисляет дочернюю часть наследства: "0". Писец велит далее: "Умножь долю дочери на число дочерей", и аккуратно выдавливает "0X0=0".

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

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

Спустя почти 4 тысячи лет, когда мне пришлось учиться математике в школе и вузе, слово "алгоритм", не было модным. Модным было слово "формула". Вывести формулу, выучить формулу наизусть, забыть формулу, перепутать формулу - вот наши любимые занятия.

Сомневаюсь, знал ли я, что такое алгоритм, в середине 50-х годов, оканчивая политехнический институт. Но прошло 2-3 года, и слово это стало изредка появляться в наших инженерских разговорах. Оно никогда не являлось одно - всегда в паре с электронной вычислительной машиной. Алгоритм помещают в ЭВМ, называя его почему-то уже не алгоритмом, а программой, и там, в недрах машины, среди электронных ламп, происходит чудо мгновенного решения задач.

Я помню весенний Киев 1957 года и встречу со своим соучеником Валерием Куликом на бульваре Шевченко. Рассказывая о новой своей работе, он пылко призывал меня:

- Алгоритмировать надо, Алексей!