- •Понятие алгоритма и его свойства
- •Оценка порядка (временная оценка)
- •Общий случай определения сложности
- •Виды функций оценки сложности алгоритмов
- •Экспериментальный метод оценки трудоемкости (сложности) алгоритма
- •Оценка пространственной (емкостной) сложности
- •Классификация структур данных
- •Линейные структуры данных
- •Сетевые структуры данных
- •Табличные структуры данных
- •Иерархические структуры данных
- •Сложность типовых операций при работе с линейными структурами данных
- •Представление данных в памяти эвм
- •Базовые алгоритмы обработки данных
- •1. Алгоритмы поиска
- •1.1. Алгоритм линейного поиска
- •1.2. Алгоритм дихотомического поиска
- •3. Алгоритмы сортировки
- •3.1. Основные определения и классы алгоритмов
- •Классификация алгоритмов сортировки
- •Наиболее распространенные простые алгоритмы внутренней сортировки (массивов)
- •Сортировка вставками
- •Сортировка выбором
- •3.2.3. Сортировка обменом (Пузырьковая сортировка)
- •3.2.4.Сортировка Шейкером
- •Эффективные методы внутренней сортировки
- •Сортировка Шелла
- •3.3.2. Быстрая сортировка
- •Алгоритмы внешней сортировки
- •Простая сортировка слиянием
- •Сортировка с помощью естественных слияний
- •3.4.3. Сортировка Боуза - Нельсона
Классификация структур данных
Большинство современных языков программирования может реализовывать технологию «структурного программирования». В них применяется структурирование логики программы и используемых ею данных.
Принцип «структурирования данных» воплощается в типизации языка, т.е. наделении его развитой системой типов данных.
Структура данных – это форма хранения и представления информации.
Они бывают простыми и сложными: представляют скалярную единицу информации или набор однотипных данных. Простые структуры данных характеризуются соответствующим типом, например, целочисленный, вещественный, логический, строковый и т.д. Сложные структуры делятся на динамические и статические наборы.
Динамические еще называют рекурсивными. Они в процессе своего жизненного цикла позволяют изменять размер занимаемой области памяти (добавлять и удалять элементы), а статические - нет. И наконец, по организации взаимосвязей между элементами сложных структур данных существует следующая классификация:
Линейные
Массив
Список
Связанный список
Стек
Очередь
Хэш-таблица
Иерархические
Двоичные деревья
N-арные деревья
Иерархический список
Сетевые
Простой граф
Ориентированный граф
Табличные
Таблица реляционной базы данных
Двумерный массив
Файлы
Элементами сложных структур данных, в свою очередь, могут выступать экземпляры как простых, так и сложных структур. Например, структура данных лес – это список непересекающихся деревьев. Рассмотрим перечисленные классы сложных структур данных. Первый уровень классификации построен на основе различий в способе адресации и поиска отдельных элементов в наборе сложной структуры данных.
Линейные структуры данных
Элемент линейной структуры характеризуется порядковым номером или индексом в линейной последовательности элементов.
Массив – это в статическая линейная структура однотипных данных, оптимизированная для операций поиска элемента по его индексу. Однозначное местоположение элемента в памяти обеспечивается именно однотипностью элементов в массиве и определяется произведением его индекса на размер памяти, занимаемой одним элементом.
Линейный
массив.
Адрес (элемент(index)) = размер_ячейки
* index.
Список – это динамическая линейная структура данных, в которой каждый элемент ссылается
только на предыдущий (однонаправленный линейный список),
либо на предыдущий и следующий за ним (двунаправленный линейный список).
Достоинством этой структуры данных является простота реализации. Кроме того, благодаря наличию ссылок, каждый элемент в списке, в отличие от массива, может занимать разный объем памяти. Адрес первого элемента в линейном списке однозначно определяется адресом самого списка.
|
|
Связанный список – это вариант обычного линейного списка, оптимизированный для операций добавления и удаления элементов. Оптимизация заключается в том, что элементы связанного списка не обязаны в памяти располагаться друг за другом. Порядок элементов определяется ссылкой на первый элемент (который не обязан быть в самом начале выделенной для списка памяти) и последовательностью ссылок на остальные элементы списка.
Связанный
список.
Стек
– это динамическая линейная структура
данных, для которой определены всего
две операции: добавление элемента в
конец и удаление последнего элемента.
Еще говорят, что стек реализует очередь
LIFO (Last in, First Out) – последним пришел, первым
вышел. Например, при выполнении программы,
компьютер в случае необходимости вызвать
некоторую функцию или метод сначала
заносит указатель на место ее вызова в
стек. Этот подход обеспечивает корректный
возврат после завершения метода к
инструкции, следующей после точки
вызова. Такая структура данных н
азывается
стеком вызовов подпрограмм.
Стек.
О
чередь
– очень похожая на стек,
динамическая структура данных. Она
реализует дисциплину FIFO (First in, First
out) – первым пришел, первым вышел. В
программировании с помощью очередей,
например, обрабатывают события
пользовательского интерфейса, обращения
клиентов к веб
- сервисам и прочие информационные
запросы.
Очередь.
Хэш-таблица – наиболее сложный из динамических линейных структур данных тип. Она оптимизирована для быстрого поиска элементов за счет вычисления их адреса, как значения хэш-функции. Аргументом этой функции является некий связанный с элементом ключ, например, его порядковый номер. Чтобы гарантировать уникальные значения хэш-функции для уникальных значений ключа (исключить коллизии) хэш-таблица, кроме хитрых алгоритмов, использует оперативную память. Применение рассматриваемых таблиц должно быть оправдано и тщательно продумано.

Список.
Двунаправленный
список.