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

7.2. Методы разработки алгоритма

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

7.2.1. Метод частных целей

Этот метод имеет весьма общую формулировку: <Необходимо привести трудную задачу к последовательности более простых задач>. Приведенная рекомендация выглядит столь естественной и разумной, что вряд ли вызовет у кого-нибудь возражения. Более того, любой человек очень часто использует этот метод решения стоящих перед ним задач, при этом даже не догадываясь (или не отдавая себе отчета) об имеющемся для него (метода) названии. С другой стороны, на конкретной сложной задаче часто очень трудно указать способ ее разбиения на набор более простых задач. Здесь большое значение имеет опыт и искусство специалиста. Тем не менее, несмотря на общность метода и отсутствие <точного рецепта> его применения очень важно освоить этот метод, так как он лежит в основе решения многих задач и по своей сути составляет основу алгоритмизации и программирования. Именно с вопроса <Можно ли данную задачу разбить на последовательность (набор) более простых?> и нужно написать разработку простого алгоритма.

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

7.2.2. Метод подъема

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

7.3. Программирование с отходом назад

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

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

7.4. Алгоритмы ветвей и границ

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

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