Основные этапы полного построения алгоритма
Осуществление плана
Чтобы придумать план, найти идею решения, требуется очень многое: ранее приобретенные знания, мозг, приученный к логическому мышлению, полная сосредоточенность, а также удача. Реализовать же план достаточно просто: здесь требуется главным образом терпение.
План указывает лишь общие контуры решения; теперь нужно убедиться, что все детали вписываются в эти общие контуры. Поэтому следует терпеливо рассмотреть эти детали, одну за другой, пока всё не станет совершенно ясным и не останется ни одного тёмного угла, в котором может скрываться ошибка.
При реализации плана важна доказательность каждого шага, и принимать следует лишь то, «что усматривается с полной ясностью или выводится с полной достоверностью» (Р. Декарт – см. приложение В).
При реализации плана необходимо проверять каждый свой шаг. Убедиться в правильности некоторого шага в рассуждениях можно либо интуитивно, либо логически. Можно сосредоточить внимание на рассматриваемом утверждении до тех пор, пока оно не станет столь явным и отчётливым, что не останется никакого сомнения в правильности выбранного шага. Но можно поступить и иначе, выводя утверждение по логическим правилам. Самое важное, чтобы была твердая убеждённость в правильности каждого шага. Однако надо понимать разницу между «увидеть» и «доказать»: ясно ли вам, что предпринятый шаг правилен? А в состоянии ли вы доказать, что он правилен?
Взгляд назад
Никакую задачу нельзя исчерпать до конца: если её решение действительно нельзя усовершенствовать, то, во всяком случае, всегда можно глубже осмыслить её решение.
Проверка каждого шага (хода) решения ещё не гарантирует отсутствие ошибок; важна проверка и результата решения. Особенно важно не проглядеть какой-либо быстрый интуитивный способ (если он имеется) проверки результата или хода решения. Полезен вопрос: нельзя ли получить тот же результат иначе? Конечно, короткое интуитивное рассуждение устроит в большей мере, чем длинное и тяжеловесное: нельзя ли усмотреть его с первого взгляда? Когда оглядываемся назад на решение задачи, представляется естественная возможность исследовать связь данной задачи с другими задачами.
Применительно к построению алгоритма С. Гудман и С. Хидетниеми [2] сформулировали аналогичные подход и вопросы, которые воспроизведены ниже.
· постановка задачи;
· построение модели;
· разработка алгоритма;
· проверка правильности алгоритма;
· реализация алгоритма;
· анализ алгоритма и его сложности;
· написание программы на подходящем языке;
· отладка программы;
· составление документации.
Постановка задачи
Прежде чем понять задачу, следует её точно сформулировать. Это условие само по себе не является достаточным для понимания задачи, но оно абсолютно необходимо. Для плохо сформулированных задач полезны следующие вопросы:
· Понятна ли терминология, используемая в предварительной формулировке?
· Что дано? Что нужно найти? В чём состоит условие?
· Каких данных не хватает? Все ли они нужны?
· Являются ли какие-то имеющиеся данные бесполезными?
· Какие сделаны допущения?
Возможны и другие вопросы в зависимости от конкретной задачи. Часто после получения полных или частичных ответов на некоторые из вопросов их приходится ставить повторно.