Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kniga_Osnovy_informatiki_i_informatsionnyh_tehn....doc
Скачиваний:
46
Добавлен:
21.04.2019
Размер:
2.84 Mб
Скачать

5.2. Основные этапы и методы разработки алгоритмов

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

На этапе анализа задачи уточняется постановка задачи, исходные данные для ее решения и предъявляемые к решению требования и условия, при которых задача должна быть решена.

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

 Существуют ли решенные аналогичные задачи?

 Какие математические структуры больше всего подходят для описания того, что известно и что надо найти, какие отношения выявлены между объектами модели?

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

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

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

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

Алгоритмы решения задач могут реализовывать различные методы. При решении задач на ЭВМ широко используются методы эвристики и имитации.

Эвристический алгоритм позволяет найти некоторое приближенное, необязательно оптимальное решение задачи, его можно быстрее и проще реализовать, чем «точный» алгоритм. Кроме того, следует помнить, что существуют задачи, которые просто не имеют точных решений.

При использовании этих методов все требования, предъявляемые к точному решению, разбиваются на два класса: те, которые должны быть удовлетворены (или могут быть легко удовлетворены), и те, по отношению к которым можно «пойти на компромисс».

Не существует универсальной структуры, описывающей эвристические алгоритмы, но многие из них основываются или на методе частных целей, или на методе подъема.

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

Например, для вычисления факториала n! (по определению n! = 12…(n–1)n при n > 0 и 0! = 1) можно повторять операцию умножения, начав со значения 1 (1 умножить на 2, полученный результат умножить на 3 и т.д.: n! = ((…((12)3)…)(n–1))n):

f  1; f  f1; f  f2; f  f3; …; f  f(n–1); f  fn.

Этот способ решения задач – один из наиболее часто используемых при вычислениях с помощью компьютера (примером являются многие численные методы решения задач).

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

Пример простейшего рекурсивного алгоритма решения задачи – вычисление факториала. Эту задачу можно решить, сгруппировав множители следующим образом: n! = (12…(n–1))n, произведение, записанное в скобках, – это (n–1)!, таким образом: n! = (n–1)!n.

При разработке рекурсивного, как и итерационного, алгоритма обязательно указывается условие, при котором рекурсия останавливается. В данном примере значение n уменьшается, пока не достигнет значения 0. Вычислив значение 0! = 1, рекурсия начинает «обратный ход», при выполнении каждого шага которого происходит возврат вычисленного значения и умножение.

Рекурсивные алгоритмы широко используются при решении задач с помощью компьютера (в частности, задач искусственного интеллекта).

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

Для записи алгоритма в процессе решения задачи используются различные способы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]