Правда, понятие «творчество» обычно применяют к таким деяниям человека, как сочинение стихов, музыки, создание художественных произведений, научных трудов и т.п. А различные решения бытовых проблем, которые зачастую тоже не имеют заранее разработанной технологии, к числу творческих не относят. Это, строго говоря, неверно в принципе. Конечно, «мощности» и характер таких творческих процессов, как, например, выбор платья для «выхода в свет» и разработка новой научной теории, сильно отличаются, но в обоих случаях имеет место именно творческий процесс. То есть, действия человека в обоих случаях не подчинены никакой инструкции.
В общем случае, если для решения какой-либо задачи существуют заранее разработанные правила (инструкция, технология, методика), то решение такой задачи это процесс рутинный (упорядоченный). Если же никаких правил не существует и результат достигается благодаря интуиции, «наитию», «озарению» и т.п., – то такой процесс решения задачи является творческим.
А теперь мы вплотную подошли к определению понятия «алгоритм». Что же это такое?
2
Алгоритм это конечное, упорядоченное множество конкретных предписаний (правил, команд, инструкций), последовательное выполнение которых приводит к решению задачи без необходимости понимания её сути.
В этом коротком определении целых четыре ключевых момента. Рассмотрим их.
Итак, множество предписаний должно быть:
1. Конечным. Даже если все предписания алгоритма будут безукоризненно правильно составлены, но их количество окажется бесконечно велико, то, естественно, задача никогда не будет выполнена. Такую последовательность предписаний алгоритмом назвать нельзя.
2. Упорядоченным. Должна быть строго определена последовательность выполнения предписаний. А если на каком-то этапе выполнения алгоритма требуется изменить эту последовательность, то все возможные варианты должны быть заранее определены, а конкретный вариант дальнейших действий должен однозначно определяться полученными к этому моменту результатами.
3. Состоящим из конкретных предписаний. Все предписания обязательно должны быть такими, чтобы объект (человек, компьютер или другое устройство), выполняющий этот алгоритм, мог однозначно определить и выполнить это предписание. В алгоритме не должно встречаться предписаний типа «действовать по обстановке» или «сделать как можно лучше». Никакая неоднозначность здесь не допустима.
4. Состоящим из таких предписаний, последовательное выполнение которых само по себе приводит к решению задачи. То есть, чтобы в процессе выполнения алгоритма не было никакой необходимости понимать, что это за задача, какие результаты должны получиться, и хороши ли эти результаты.
В четвёртом пункте умышленно допущена одна неточность. Дело в том, что решение задачи это и есть разработка алгоритма решения задачи. Если, например, вы решили задачу про два поезда, следующих навстречу друг другу из пунктов А и Б, то это и означает, что вы составили алгоритм решения этой задачи. Ведь если вам потребуется снова решить точно такую же задачу, но с другими исходными данными, то вы просто подставите эти данные в уже разработанные вами уравнения и выполните последовательность заранее определённых действий. То есть, в этом случае вам надо будет не решать, а выполнять что-то определённое, не требующее творческой работы. Но указанная неточность в определении алгоритма допущена сознательно, чтобы это определение не получилось слишком громоздким и замысловатым.
Если хотя бы одно из перечисленных условий не выполняется, то данное множество правил алгоритмом не является. Иначе говоря, все инструкции алгоритма должны быть составлены таким образом, чтобы в них полностью отсутствовала творческая составляющая. Иначе это будет не алгоритм.
3
Как уже было отмечено, компьютер может работать только по алгоритму (абсолютно любая компьютерная программа представляет собой не что иное, как конечную последовательность конкретных инструкций), а следовательно, никаких задач он не может решить в принципе. Ведь решить задачу – это значит разработать алгоритм её решения, и только потом выполнить его. Но разработать алгоритм по какому-то заранее разработанному алгоритму невозможно. (Даже формулировка этой проблемы получается какой-то замысловатой.) Ведь сама по себе разработка алгоритма является процессом творческим. А процесс творчества и процесс выполнения алгоритма это совершенно разные действия.