
- •1.Основные понятия эис
- •19. Классификация алгоритмов
- •Классификация Алгоритмов
- •20. Абстрактные типы данных (массивы, связанные списки, выделение памяти)
- •Абстрактные типы данных
- •Элементарные Структуры Данных
- •Массивы
- •Связанные списки
- •Выделение Памяти
- •21. Стеки, очереди, деревья
- •Очереди
- •Деревья
- •Терминология
- •22. Математические характеристики деревьев
- •Свойства
- •23. Обход деревьев
- •Обход Деревьев
- •Алгоритм быстрой сортировки
- •1 2 3 4 5 6 7
- •25. Критерии эффективности алгоритмов (формирование, поиск последовательного масиива)
- •26. Критерии эффективности алгоритма ступенчетого поиска
- •27. Сортировка методом Шелла Сортировка Шелла
- •28. Сортировка простым включением
- •29. Приоритетные очереди
- •30. Радикс сортировка Радикс Сортировка
- •Сортировка Радикс Обменом
- •Прямая Радикс Сортировка
- •Свойства Радикс Сортировок
- •31. Рекурсия Рекурсивные определения
- •Рекурсивные процедуры
- •Итерация и рекурсия
- •32. Рекурсивный обход деревьев, удаление рекурсии Рекурсивный Обход Дерева
- •Удаление Рекурсии
- •33. Элементарные методы сортировки и их характеристики Элементарные Методы Сортировки
- •Правила Игры
- •Сортировка Выбором
- •Сортировка Вставкой
- •34. Простейшие алгоритмы сортировки (методом пузырька, сортировка выбором, шейкер сортировка, ростировка Шелла), сравнение простых методов сортировки. Пузырьковая Сортировка
- •Характеристики Простейших Сортировок
- •Сортировка Файлов с Большими Записями
- •Сортировка Шелла
- •Подсчет Распределения
- •35. Алгоритмы быстрой сортировки, разрядная сортировка Алгоритм быстрой сортировки
- •1 2 3 4 5 6 7
- •36. Пирамидальная сортировка Пирамидальная сортировка
- •37. Сортировка слиянием (простое слияние, двухпутевое слияние, рекурсивный алгоритм слияния) Сортировка слиянием
- •Простое слияние
- •Y 1 2 3 4 5 6 7 8
- •Естественное двухпутевое слияние
- •Рекурсивный алгоритм слияния
20. Абстрактные типы данных (массивы, связанные списки, выделение памяти)
Абстрактные типы данных
Удобно описывать алгоритмы и структуры данных в терминах выполняемых над ними операций вместо того, чтобы вдаваться в детали какой-либо либо конкретной разработки. Когда структура данных определяется подобным образом, то ее называют абстрактным типом данных. Основной идеей определения таких типов данных является разделить «концепцию» того, чем данная структура данных должна заниматься, от какой-либо ее реализации.
Главная характерная черта абстрактного типа данных – это то, что нечто расположенное «снаружи» от определения этой структуры, равно как и алгоритмы, использующие ее, могут использовать эту структуру только через процедуры и функции над ней определенные, и никаким другим образом. Основная мотивация для разработки абстрактных типов данных – это то, что они весьма облегчают работу при создании больших программ. Они дают нам способ ограничения размера и сложности интерфейса между (возможно сложным) алгоритмом и связанной с ним структурой данных, а также, возможно большим количеством программами, которые используют этот алгоритм и структуру данных. Это облегчает понимание больших программ, и делает более удобным процесс изменения и улучшения основных алгоритмов.
Стеки и очереди являются классическими примерами абстрактных типов данных: большинство программ должны знать лишь о нескольких операциях определенных над ними, а не вдаваться в подробности связанные с индексами и указателями.
Массивы и связанные списки могут в свою очередь быть представлены как разновидности одного и того же абстрактного типа данных – линейного списка. Каждый из них поддерживает операции вставки,удаленияипроизвольного доступа до элемента. Этих операций вполне достаточно для описания алгоритма, и линейные списки довольно полезны на начальных этапах разработки алгоритма. Но программист должен осторожно выбирать используемые операции, потому, что у разных реализаций может быть довольно разное быстродействие. Например, использование связанных списков вместо массивов для решета Эратосфена ухудшило бы производительность потому, что эффективность алгоритма зависит от того, насколько быстро программа может получить доступ до того или иного элемента. С другой стороны, использование массива для решения проблемы Джозефа ухудшит программу потому, что скорость алгоритма зависит от того, насколько быстро удаляется элемент1.
Абстрактный тип данных отделяет алгоритм от конкретных структур данных. Так алгоритм, работающий со стеком «знает» о нем только то, что для него определены операции: положить в стек, взять из стека и проверить стек на пустоту. В то же время для реализации стека может быть использован массив или список. На описании алгоритма это абсолютно не сказывается.
Можно заметить, что один и тот же способ организации данных может выступать и как абстрактный тип и как структура данных. Например, с точки зрения алгоритма сортировки списка, список является абстрактным типом данных, при этом базовой структурой может быть массив или указатель. С другой стороны, алгоритм обработки стека считает стек абстрактным типом данных, а стек в свою очередь может быть реализован с помощью списка, который в этом случае уже будет структурой данных.