
- •1.Алгоритм, атд, структура. Анализ алгоритмов.
- •2. Линейные структуры данных
- •3.Деревья и леса
- •4. Сортировка данных
- •1. Пирамидальная сортировка
- •2. Сортировка слиянием
- •3. Быстрая сортировка Хоара
- •6. Поиск
- •1. Последовательный (линейный) поиск
- •2. Бинарный поиск в упорядоченном массиве
- •1. Бинарные деревья поиска
- •3. Сильноветвяшнеся деревья
- •5. Графы
- •7. Алгоритмы исчерпывающего поиска
1.Алгоритм, атд, структура. Анализ алгоритмов.
АТД, как и обычный тип данных, определяет множество значении и множество операции, применимых к этим значениям. Однако, в отличие от стандартных типов, реализация операции для абстрактного типа не встроена в язык программирования, а является частью определения АТД. При этом прикладные программы используют абстрактные типы так же. как стандартные типы, т.е. только через набор операций, определенных для этого АТД, и не имеют никакого доступа к его реализации.
Определим структуру данных как совокупность элементов данных, между которыми установлены определенные отношения (связи)
Структуры данных принято рассматривать на двух уровнях — логическом и физическом. На логическом (абстрактном или внешнем) уровне рассматриваются наиболее существнные признаки структуры, которые не зависят от способа внутреннего представления данных в памяти.
На физическом (внутреннем) уровне рассматривается конкретный способ представления структуры в оперативной памяти. При этом принимается во внимание как способ хранения самих элементов данных, так и способ представления отношений между данными. В этом случае иногда используются такие термины как структура хранения или внутренняя структура.
Алгоритм — конечная последовательность инструкций, каждая из которых имеет чёткий смысл и может быть выполнена с конечными затратами ресурсов за конечное время. Составление алгоритма для решения задачи называется ее алгоритмизацией.
требования к алгоритму:
□ однозначность (определенность)— каждая инструкция алгоритма должна быть понятна исполнителю алгоритма и иметь однозначное толкование.
□ конечность — решение задачи должно быть получено за конечное число шагов (т.е. «зацикливание» недопустимо) для любых входных данных.
□ детерминированность— для одних и тех же входных данных алгоритм должен каждый раз выдавать один и тот же результат.
Вычислительные модели
Алгоритмы не существуют сами по себе, они создаются для конкретного исполнителя, и при разработке алгоритма разработчик ориентируется на его возможности - доступные ресурсы, операции и стоимости их использования. Все эти факторы учитываются в так называемой вычислительной модели
Одна из наиболее известных таких моделей - машина Тьюринга.
При разработке и анализе "практических" алгоритмов чаще всего в качестве вычислительной модели рассматривается так называемая машина с произвольным доступом, которая, по существу, является моделью современного компьютера. В такой модели имеется оперативная память и один процессор, который последовательно выполняет инструкции программы в оперативной памяти. В модели с внешней памятью, кроме быстрой памяти ограниченного объёма, имеется также внешняя память, обращения к которой производятся значительно медленнее, а обмен данными идёт блоками фиксированного размера (страницами).
Под эффективностью алгоритма понимается рациональное использование ресурсов заданной вычислительной модели
Практически для любой вычислительной модели важнейшими показателями эффективности работы алгоритма являются время работы и размер используемой памяти. Для модели с внешней памятью важным показателем является количество операций обмена между оперативной и внешней памятью. Иногда приходится рассматривать и другие показатели - например, объём сетевого трафика между клиентом и сервером и т.д.
В большинстве случаев нет необходимости находить точное число действий, выполняемых алгоритмом. Интерес представляет общий вид зависимости времени работы алгоритма от размера входных данных, стремящегося в пределе к бесконечности - т.е. асимптотическая временная сложность (аналогично можно рассматривать асимптотическую пространственную сложность).
Типичные временные оценки сложности
Оценка |
Пояснение и примеры задач |
Время работы при n=10 |
Время работы при n=100 |
0(1) |
Время выполнения алгоритма не зависит от объёма входных данных |
100 нc |
100 нc |
0 (log n) |
Логарифмическое время. Например, двоичный поиск, поиск в сбалансированном дереве |
332 нс |
664 не |
0(n) |
Линейное время. Например, каж-дый элемент массива обрабаты-вается постоянное число раз. |
1 МКС |
10 мкс |
0(n* log n) |
Обычно характерно для программ использующих стратегию "разделяй и властвуй", например. алгоритмы быстрой сортировки или сортировка слиянием |
3,32 мкс |
66.44 мкс |
0(nk) |
Полиномиальная сложность. Большое число разнообразных алгоритмов. |
10 мкс (для к=2) |
1 с (для к=2) |
0(kn) |
Экспоненциальная сложность. Характерна для переборных алгоритмов. |
102 мкс (для к=2) |
4,2*1015 лет (для к=2) |
0(n!) |
Факторнальная сложность. Также может встретиться в переборных алгоритмах. |
0.363 с |
1.08*10146 лет |