- •Понятие о структуре данного. Уровни представления структур данных.
- •Классификация сд в программах пользователя и в памяти эвм
- •Сд в оперативной памяти
- •Сд типа массив.
- •Сд типа запись (прямое декартово произведение).
- •Сд типа таблица.
- •Операции над таблицей:
- •Временная сложность алгоритмов.
- •Сд типа хеш-таблица.
- •Операция включения элемента в таблицу.
- •Операция исключения элемента из таблицы:
- •Сортировки. Улучшенные методы сортировок.
- •Классификация задач по временной сложности.
- •Сд типа стек.
- •Алгоритм сортировки Хоара (стек используется для хранения границ сортируемой области в таблице):
- •Сд типа очередь.
- •Связное распределение памяти.
- •Сд типа линейный односвязный список.
- •Сд типа указатель.
- •Статические и динамические переменные.
- •Сд типа циклический линейный список.
- •Сд типа двусвязный линейный список.
- •Сд типа дек.
- •Многосвязные списки.
- •Средства объектно-ориентированного программирования.
- •Объекты и свойства инкапсуляции.
- •Наследование и переопределение.
- •Полиморфизм. Виртуальные методы.
- •Динамические объекты. Деструкторы.
- •Обработка ошибок при работе с динамическими объектами.
- •Модули, экспортирующие объекты.
- •Нелинейные структуры данных.
- •Сд типа дерево.
- •Представление деревьев в связной памяти эвм.
- •Алгоритмы прохождения деревьев в глубину и в ширину.
- •Представление деревьев в виде бинарных.
- •Представление бинарных деревьев в связной памяти. Прошитые деревья
- •Формирование бинарного дерева.
- •Применение бинарных деревьев в алгоритмах поиска.
- •Операция включения в сд типа бинарное дерево.
- •Операция исключения из бинарного дерева.
- •Представление бинарного дерева в прямоугольной памяти.
- •Применение бинарных деревьев.
- •Сд типа граф.
- •Представление графа в памяти эвм.
- •Алгоритмы прохождения графа.
- •Топологическая сортировка.
- •Организация данных во внешней памяти. Типы и характеристики устройств внешней памяти.
- •Сд типа последовательный файл.
- •Сд типа файл прямого доступа.
- •Сд типа индексно-последовательный файл.
- •Сд типа хеш-файл.
- •Внешняя сортировка.
- •Алгоритм прямого слияния.
- •Многофазная сортировка.
- •Сущность базы данных. Системы управления базами данных.
- •Общая структура субд.
- •Реляционная модель субд.
- •Язык реляционной алгебры.
Сд типа хеш-файл.
Осуществляется отображение n:1. Хеширование является реализацией вышерассмотренной идеи. Хеширование задается функцией:
Function h (key.Tk): 0..N;
При создании файла каждый элемент отмечается как пустой. Запись данных в файл производится следующим образом. Вычисляется значение функции h. Если элемент с вычисленным номером пуст, то данные сохраняются в этом элементе. В противном случае ищется первый справа пустой элемент. Если дошли до конца файла, то возвращаемся назад и продолжаем поиск. Записываем в первый пустой элемент.
Чтение из файла производится по ключу аналогично. Вычисляется значение функции h. Если элемент пуст, то нужного элемента в файле нет. В противном случае ключ этого элемента сравнивается с заданным и в случае совпадения – ключ найден. Если значения сравниваемых ключей различны, то начинаем последовательный просмотр следующих элементов до тех пор, пока не найдется первый пустой элемент или элемент с заданным ключом.
A = k mod N – функция хеширования (N – простое число)
[k mod (10000/100)]
h(k) = B + m[k mod (10 n/10 l)], где B и m – константы, n > l.
В качестве хеш-функции может быть использован полином. В таком случае ключ – значение данного полинома. Вначале вычисляется полином, а затем берется по модулю относительно переменной N.
Внешняя сортировка.
Внешняя сортировка необходима, когда число сортируемых записей превышает объем основной памяти. Структура данных при данной сортировке должна быть такой, чтобы сравнительно медленные периферийные запоминающие устройства могли справиться с потребностями алгоритма сортировки. По этой причине большинство методов внутренней сортировки бесполезны для внешней сортировки.
Основная идея внешней сортировки заключается в том, что мы делим весь сортируемый файл на несколько множеств, затем отдельно осуществляем сортировку каждого из них, сохранив их при этом в отдельных файлах., а затем проводим процедуру слияния этих файлов. Слияние означает объединение двух или более упорядоченных последовательностей в одну упорядоченную последовательность. Слияние использует очень простые СД, которые можно пройти последовательным образом. Такой процесс – внутренняя сортировка с последующим внешним слиянием и является основной идеей алгоритма внешней сортировки.
Рассмотрим алгоритм слияния (x, y, z – ключи в файлах):
Имеем: x1 x2 … xn (1 файл); y1 y2 … ym (2 файл); z1 z2 … zn+m (3 файл).
i=1, j=1, k=1;
найти наименьшее;
если x i < y j, то идти к п.3 иначе к п.5;
вывести x i ; z k x i ; i=i+1; k=k+1;
если i n, то идти к п.2;
вывести y j … y m , т.е. z k … z n+m y j … y m ;
конец алгоритма.
вывести y j ; z k y j ; k=k+1; j=j+1;
если j m, то идти к п.2;
вывести x i … x n , т.е. z k … z n+m x i … x n ;
конец алгоритма.
Алгоритм прямого слияния.
Этот алгоритм является одним из простейших.
фаза разделения
фаза слияния
b(1) b(2)
b(k) a
a a
a
2 4
2k
проход 1 проход 2
проход k
c(1)
c(2)
c(k)
Серия – упорядоченная последовательность. Серия может быть различной длины.
Алгоритм:
Последовательность а разбивается на две половины b и c. Затем осуществляется слияние частей b и c, при этом серия размерностью 1 становится серией размерностью 2.
Полученная последовательность снова обрабатывается последовательностью 1 и 2. Получается серия размерностью 4.
Повторяем шаги, получая серии 8, … до тех пор, пока не будет упорядочена вся последовательность.
Рассмотренный алгоритм еще называют трехленточным (каждый файл последовательного доступа называют лентой).
a = {50, 3, 7, 60, 80, 90, 13, 15}
Поскольку на каждом проходе размерность серии удваивается, то сортировка заканчивается, когда p n, где р – размер серии, а n – размер исходного файла.
Количество проходов: k = [log 2 n]. По определению при каждом проходе все множество из n элементов копируется ровно 1 раз, следовательно общее число пересылок М = n[log 2 n]. Число сравнений С еще меньше, чем М, т.к. при копировании остатка последовательности сравнения не производятся. Поскольку сортировка слиянием использует ВЗУ, то временные затраты на операцию пересылки на несколько порядков превышают временные затраты на операции сравнения.
Улучшение характеристик сортировки можно обеспечить увеличением файлов на фазе разделения и фазе слияния. Обозначим количество файлов – N. Тогда слияние r серий при 1 проходе дает r/N – количество серий, а на k-том проходе r/Nk. Тогда количество проходов будет k = [log N n], а количество пересылок М = n[log N n].
Например, при N=4:
Если N
– большое, то можно использовать
улучшенные сортировки (деревом): |
80 |
|
|
10 |
70 |
|
|
100 |
200 |
|
|
50 |
60 |
|
|
38
|
38 |
38 |
10 |
|
10 |
|
|
||
50 |
100 |
200 |
|
|
50 |
60 |
|
Вообще можно считать, что имеется N/2 входов и столько же выходов, и они меняются местами после каждого отдельного прохода.