И эвристики и алгоритмы - это приемы решения задач, четкие, определенные приемы, прилагаемые ко многим задачам. Здесь, в детерминированности и массовости, если пользоваться более строгим языком, нет никаких различий между эвристиками и алгоритмами. Нет различий и в остроумии, изяществе, внутренней силе: встречаются ослепительные по красоте алгоритмы, встречаются и занудные эвристики. Различие между ними проявляется только в одном - в успешности решения задач; алгоритм успешен всегда, эвристика - часто, но не всегда.
Выходит, что эвристика в определенном смысле хуже алгоритма? Но наше "хуже" носит схоластический характер, потому что эвристики работают с теми задачами, для которых нет строгого алгоритма. Вот он, гвоздь вопроса!
Программу САИНТ, написанную Д. Слейглом, удалось через шесть лет усовершенствовать другому ученому - Л. Мозесу; ее оценки стали многочисленнее и тоньше, в результате чего почти исчезли лишние ветви дерева целей. Программа берет интегралы без колебаний, но при этом еще остается эвристической.
Через два года Р. Риш, третий исследователь, напрочь отказался от эвристик. Он придумал алгоритм интегрирования многих видов выражений.
Ну что тут скажешь?! Интегрирование с момента его изобретения и по сию пору считалось серьезной умственной работой. На голову, не умеющую интегрировать, не надевали фуражку инженера. Алгоритма интегрирования не было; откуда взяться простым и однозначным правилам там, где нужна изобретательность?
И все же алгоритм интегрирования оказался возможным. И красивым. И эффективным не на 96, как эвристическая программа Д. Слейгла, а на все 100 процентов.
История с интегралами - поучительный пример, но не доказательство того, что эвристики лишь временные работники в программах Искинта, что в будущем их вытеснят жесткие и жестокие алгоритмы.
Думаю, произойдет совсем другое: они сольются, эвристики и алгоритмы. Понятие "алгоритм" сегодня живет, дышит, развивается, растет. Мы видели - оно вобрало в себя неопределенность и размытость. Оно охватит и эвристичность - умение просто и красиво решать задачи. "Эвристический алгоритм" - непривычное словосочетание, но мы быстро привыкнем к нему.
Мне кажется, что "теория противоположных углов" возникла из-за недооценки гибкости и мощности понятия "алгоритм". При слове "алгоритм" в головах у сторонников этой теории возникает нечто раз навсегда затверженное, неизменное, тупое, нудное, машинное; при слове "эвристика" им грезится что-то изящное, непринужденное, меняющееся, остроумное, неназойливое, человеческое. Но эта греза и есть алгоритмы, проницательные, элегантные, дерзкие алгоритмы.
Впрочем, чему здесь удивляться? Алгоритмы, в том числе эвристические алгоритмы, - порождение человеческого ума. Мы отрываем их от себя и дарим машинам. Если хотите, происходит "переселение душ" из людей в машины. Коль у программиста душа тупая и нудная, то и машинный алгоритм не блещет. Если же программист - человек с нестандартными идеями, с глубокой любовью к делу, тогда и на программы ложится яркий отсвет его личности.
Подлинное различие между Искинтом и человеком находится не на линии "алгоритмическое - эвристическое", оно находится на меже "частное - общее".
Программы, о которых шла речь в данной главе, делают что-нибудь одно. УЧЕНИКи решают арифметические задачки. САИНТ интегрирует. Попробуйте заставить УЧЕНИКов заняться "Ханойской башней" - не справятся, даже о чем идет речь, не поймут. Введите в САИНТ задачу про Мэри и Энн - программа просто остановится. И "Ханойская башня" непостижима для САИНТа.
Нетрудно построить эвристическую программу, которая вмиг разбросает кольца "Ханойской башни". Но в шашки она играть не сможет, хотя мы и сообщим ей шашечные правила. В шашки играет другая программа, играет, между прочим, в силу мастера. Только не предлагайте ей на этом основании головоломки или арифметические задачи.
Однодумы! Все эти программы - однодумы, одно понимают, в одном сильны, в одном результативны, а в другом нет.
Нет, они совсем неплохие, эти программы, но уж больно подогнаны по мерке задачи. Программист и рад бы иначе, но машина иначе не может, иначе задача не решается. А человек ведет себя совсем по-иному. Когда он приступает к новому для себя виду задач, у него заведомо нет узких эвристик; он их изобретает в процессе решения и совершенствует, если приходится всерьез заниматься такими задачами.
Видный советский ученый, академик П. Анохин, считал фундаментальным свойством живого способность к "опережающему отражению действительности". Эта способность в высшей степени свойственна человеку. Основываясь на своих потребностях, желаниях и мотивах, человек самостоятельно и гибко выбирает себе цели, а уж цели ведут его к постановке конкретных задач и к изобретению способов их решения.