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

5.3. Вычислительные и комбинаторные алгоритмы

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

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

Для изображения комбинаторных алгоритмов удобным математическим аппаратом является теория графов.

5.4. Поиск решения комбинаторной задачи.

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

x1 0й уровень

x2 x3 x4 1й уровень

x5 x6 x7 x8 x9 x10 2й уровень

n-1й уровень

nй уровень

Корень дерева (вершина 0го уровня) – это ситуация, в которой мы находимся перед работой алгоритма. Из нее мы можем перейти в одну из ситуаций 1го уровня и так далее. Вершины nго нижнего уровня - это решения. Такие вершины называются целевыми. Вообще говоря, целевые вершины не обязательно должны располагаться на одном уровне, но это всегда можно сделать путем введения фиктивных вершин.

Требуется среди целевых вершин выбрать вершину, соответствующую оптимальному решению.

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

Поэтому поступают следующим образом. Находясь в ситуации, соответствующей некоторой вершине x iго уровня, приписывают смежным с x вершинам i+1го уровня количественную оценку. После этого выбирают на i+1м уровне вершину y с максимальной оценкой. Так находясь в корне дерева – вершине x1, мы оцениваем вершины x2, x3, x4. Если, например, вершина x4 получила максимальную оценку, то на следующем шаге алгоритма выбирается вершина y=x4 и оцениваются вершины x8, x9, x10.

Ситуации, связанные с вершинами x2 и x3, не рассматриваются, то есть ребра х12 и х13 обрываются. Таким образом, каждый раз переходя из вершины х в вершину у, мы обрываем оставшиеся ребра, исходящие из х, тем самым существенно сокращая дерево перебора.

Тем самым, на каждом шаге алгоритма мы осуществляем локально-оптимальный выбор в надежде, что итоговое решение также окажется оптимальным.

Существует сравнительно небольшой класс комбинаторных алгоритмов, для которых глобальный оптимум совпадает с последовательностью локально-оптимальных. Такие алгоритмы называют жадными. На каждом шаге жадный алгоритм “откусывает самый жирный кусок”, а потом пытается “откусить самый жирный среди оставшихся”.

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