Полное построение алгоритма
Algorithm - однозначно трактуемая процедура решения задач.
Процедура - конечная последовательность точно определенных шагов или операций, для выполнения каждой из которых требуется конечный объем ОП и времени, кроме того, алгоритм должен работать конечн. время при любых входных данных.
Алгоритм – процедура, которая может быть реализована на данном ПК при помощи данного языка.
Алгоритм имеется только тогда, когда можно написать программу для ЭВМ.
Уровень:
Шаг используется для определения функции
1. Допущения
N (городов)- 20 городов
Вояжер должен проехать по оптимальному пути
2. Построение модели
При разработки модели возникает два вопроса:
1) какие математические структуры больше всего подходят для задачи
2) существуют ли решенные аналогичные задачи
3. Разработка алгоритма
Algorithm EIS
4. Проверка правильности алгоритма
Правильно не значит эффективно. Алгоритмы редко хороши во всех отношениях.
5. Реализация алгоритма (программа)
При реализации алгоритма задаются следующие вопросы: какие структуры данных, каких они типов, сколько массивов, их размерность, какой язык.
6. Анализ алгоритма и его сложности
Существует количественный критерий.
Если А-алгоритм,
n-
размерность,
-
рабочая функция, дающая верхнюю границу
для максимального числа основных
операций, которые выполняет алгоритм
А для решения задач в размерности n.
А- полиноминален, если рабочая функция растет не быстрее, чем полином от n, в противном случае А- экспоненциален.
7. Проверка программы (аналитически и экспериментально)
8. Документация
Некоторые основные приемы алгоритмизации
Структурное программирование
От алгоритма требуется:
1) Правильно алгоритмизовывать функцию.
2) Время и усилие для вычисления любого значения функции должно быть наименьшим.
3) От алгоритма требуется такая реализация, что бы она была легка для понимания, проста для доказательства правильности и удобна для модификации.
Системный подход к программированию предложенных методик, использование которых уменьшает вероятность ошибок в программах, обличает модификацию.
Блок схема - ориентированная сеть , вершины которой могут быть первого из трех типов.
T
f
P
f
;
ф
F
P,
предикатные
вершины
Передача управления от одной из двух ветвей к одной выходящей
Структурная блок схема - блок схема, которая может быть выражена как композиция из четырех элементов элементарных блок схем.
Любая блок схема может быть представлена структурной блок схемой.
S1
do
S1,S2
od
S2
T
F
B
S1
S2
Выбор
(альтернативный)
if B then S1 else S2 fi
булево выражение
while B do S1 od
do S1 while B od
Частный случай альтернативы
Самая главная особенность – 1-вход и 1-выход.
if B then do S1, S2 od
else if C then S2 else S4 fi, fi
Строго говоря, под структурным программирование понимается процесс разработки с помощью структурных блок-схем, в более широком смысле структурные программы допускают больше разнообразия элементарных структур управления, хотя в совокупности вполне достаточно, но это не означает, что построение будет простейшим и наиболее действительным.
case i of S1, S2….Sn fo
if i=1 then S1 else
if i=2 then S2 else
……………….
………………..
………………...
if i=n then Sn fi, fi
k S1, if B S2; goto k fi
d
S2
S1
B
F
T
S1
o
S1, while B do S2, S1 od od
Некоторые структуры данных
В гл.1 мы высказали утверждение о том, что выбор структур данных может существенно
повлиять на скорость и эффективность реализованного алгоритма. В этом разделе мы введём несколько структур данных (связанные списки , стеки и очереди) и процедуры для работы с ними , которые часто оказываются полезными.
Рассмотрим преимущества и недостатки использования массивов.
Среди преимуществ отметим следующие:
1. Массивы помогают объединять множества данных в осмысленные группы.
2. Имена массивов с индексами минимизируют потребность в слежении за многими элементами
данных с различными именами.
Использование индексов обеспечивает непосредственный и автоматический доступ к любому
элементу в массиве
Индексация позволяет также производить с помощью циклов DO и FOR автоматическую,
Быструю и эффективную обработку всех данных или выделенных подмножеств данных, хранимых в массивах.В эту работу входит инициализация, поиск, хранение и модификация.
Недостатки массивов не так очевидны. Лучше всего массивы годятся для данных, значения которых не измняются, порядок которых (важен он или не важен) также не изменяется. Если порядок элементов в массиве подвергается изменению, то каждый раз, когда порядок меняется, перестановка элементов требует очень много времени.
Рассмотрим ,например, N-элементный массив CS100(N), в котором содержатся лексикографически упорядоченные имена студентов,слушающих в данный момент курс программирования CS100(рис. 1,а).Если студенты Гридин и Сидоров перестают посещать курс, а новый студент Дроздов добавляется, то нам бы хотелось получить новый список слушателей, приведённый на рис. 1,б. Подумайте о трудности и стоимости написания и выполнения программы, которая смогла бы перестроить массив CS100 в соответствии с этими изменениями. С другой стороны, связанный список представляет собой структуру данных, которая требует дополнительной памяти, но позволяет легко вносить такие изменения.
