- •Тема 1: Полное построение алгоритма
- •Полное построение алгоритма. Этапы:
- •Постановка задачи
- •Построение модели
- •Разработка алгоритма.
- •Проверка правильности алгоритма.
- •Реализация алгоритма в виде программы для эвм
- •Анализ алгоритма и его сложности.
- •Реализация алгоритма (продолжение) Разбиение задачи на процедуры.
- •Проверка программы.
- •Подготовка документации.
- •Генератор перестановок. (Без доказательства)
Реализация алгоритма (продолжение) Разбиение задачи на процедуры.
Вернемся к этапу реализации алгоритма. Поскольку для n=20 наш алгоритм будет работать очень долго, возьмем для контрольного примера n=5. Какие нам понадобятся процедуры для реализации этого алгоритма?
Процедура генерации всех возможных перестановок.
Процедура вычисления стоимость каждого полученного пути.
На первом этапе пункт 1 может быть осуществлен вручную, с помощью ввода данных с клавиатуры.
Необходимо определить, что будет на входе и на выходе каждой процедуры.
Выход - массив перестановок.
Вход - массив перестановок и матрица стоимостей; выход - стоимость.
Вход -
Формирование перестановок "вручную".
1. Для n=2 существует 2! перестановок (1 2) (2 1)
2. Заметим, что перестановка чисел 1…k получается из перестановки 1…k-1 добавлением числа k, которое можно вставить на любое из k мест.
Расположим перестановки 1…k-1 в одну строку по порядку (это можно сделать согласно п 2), начиная с (1 2 …k-1).Допишем к первой перестановке справа число k, и будем переставлять его с ближайшим левым соседом до тех пор, пока оно не окажется крайним левым.
Теперь справа от числа k находится перестановка из чисел 1…k-1, заменим ее на следующую согласно п 2, и будем переставлять число k с ближайшим правым соседом до тех пор пока, оно не окажется крайним правым.
Продолжая таким образом, получим k! смежных перестановок. Так как количество перестановок - четное число, то в последней перестановке число k будет крайним правым, следовательно, от последней перестановки можно перейти к первой(согласно п2).
Приведенное доказательство включает в себя и алгоритм построения всех требуемых перестановок.
Пример:
Для n=3 (1 2) (2 1)
(1 2 3) (2 1 3)
(1 3 2) (2 3 1)
(3 1 2) (3 2 1)
Для n=4 (123) (132) (312) (321) (231) (213)
(1234) (1324) (3124) (3214) (2314) (2134)
(1243) (1342) (3142) (3241) (2341) (2143)
(1423) (1432) (3412) (3421) (2431) (2413)
(4123) (4132) (4312) (4321) (4231) (4213)
Структуры данных.
Матрица перестановок: каждая строка - это перестановка
Матрица стоимостей.
Вектор сумм - номер элемента соответствует строке матрицы перестановок, элемент – стоимость пути для данной перестановки
Проверка программы.
Эксплуатации программы предшествует её отладка. Проверка программы может быть охарактеризована как экспериментальное подтверждение того факта, что программа делает именно то, что должна делать.
Проверка вручную (рассматривается задача небольшой размерности и все просчитываеся на бумаге, если есть сравнение - пример на каждую ветвь (таблица истинности) ).
Тестирование каждого участка программы, то есть множество выводов всех возможных крайних случаев (если все случаи проверить практически невозможно, то проверить только те, которые встретятся с наибольшей вероятностью)
Особенности ОС, которые могли не учесть. Пример с фирмой МS.
Проверка качества алгоритма. Какие были сделаны допущения. Учесть все возможные варианты. Работает ли алгоритм лучше в среднем, чем в худшем случае. (п.6)
Тестирование для определенных вычислительных ограничений.
Анализ среднего функционирования.
Многие программы для некоторых входных данных работают хорошо, а для других плохо. Характеристика работы алгоритма должна менятся плавно от хорошей к плохой при переходе от входных данных, на которых алгоритм работает хорошо, к входным данным на которых это не так.
"Задача коммивояжера"
При n6 работает хорошо.
При 6n15 плохо.
При n15 просто ужастно.
