- •Понятие о структуре данного. Уровни представления структур данных.
- •Классификация сд в программах пользователя и в памяти эвм
- •Сд в оперативной памяти
- •Сд типа массив.
- •Сд типа запись (прямое декартово произведение).
- •Сд типа таблица.
- •Операции над таблицей:
- •Временная сложность алгоритмов.
- •Сд типа хеш-таблица.
- •Операция включения элемента в таблицу.
- •Операция исключения элемента из таблицы:
- •Сортировки. Улучшенные методы сортировок.
- •Классификация задач по временной сложности.
- •Сд типа стек.
- •Алгоритм сортировки Хоара (стек используется для хранения границ сортируемой области в таблице):
- •Сд типа очередь.
- •Связное распределение памяти.
- •Сд типа линейный односвязный список.
- •Сд типа указатель.
- •Статические и динамические переменные.
- •Сд типа циклический линейный список.
- •Сд типа двусвязный линейный список.
- •Сд типа дек.
- •Многосвязные списки.
- •Средства объектно-ориентированного программирования.
- •Объекты и свойства инкапсуляции.
- •Наследование и переопределение.
- •Полиморфизм. Виртуальные методы.
- •Динамические объекты. Деструкторы.
- •Обработка ошибок при работе с динамическими объектами.
- •Модули, экспортирующие объекты.
- •Нелинейные структуры данных.
- •Сд типа дерево.
- •Представление деревьев в связной памяти эвм.
- •Алгоритмы прохождения деревьев в глубину и в ширину.
- •Представление деревьев в виде бинарных.
- •Представление бинарных деревьев в связной памяти. Прошитые деревья
- •Формирование бинарного дерева.
- •Применение бинарных деревьев в алгоритмах поиска.
- •Операция включения в сд типа бинарное дерево.
- •Операция исключения из бинарного дерева.
- •Представление бинарного дерева в прямоугольной памяти.
- •Применение бинарных деревьев.
- •Сд типа граф.
- •Представление графа в памяти эвм.
- •Алгоритмы прохождения графа.
- •Топологическая сортировка.
- •Организация данных во внешней памяти. Типы и характеристики устройств внешней памяти.
- •Сд типа последовательный файл.
- •Сд типа файл прямого доступа.
- •Сд типа индексно-последовательный файл.
- •Сд типа хеш-файл.
- •Внешняя сортировка.
- •Алгоритм прямого слияния.
- •Многофазная сортировка.
- •Сущность базы данных. Системы управления базами данных.
- •Общая структура субд.
- •Реляционная модель субд.
- •Язык реляционной алгебры.
Операция включения в сд типа бинарное дерево.
Рассмотрим случай постоянно растущего, но никогда не убывающего дерева. Хорошим примером этого является построение частотного словаря. В этой задаче задана последовательность слов и нужно установить число появления каждого слова. Это означает, что, начиная с пустого дерева, каждое слово, встречающееся в тексте, ищется в нем. Если это слово найдено, то счетчик появления данного слова увеличивается; если же слово не найдено, то в дерево включается новое слово со значением счетчика = 1.
Type ElPtr = ^Element
Element = record
Key: integer;
n: integer;
L_Son, R_Son: ElPtr;
end;
Procedure Put (x: integer; var t: ElPtr);
begin
if t=nil then begin
New(t);
with t^ do begin
key:=x; n:=1; L_Son:=nil; R_Son:=nil;
end;
end
else if x> t^.key then Put(x, t^.R_Son)
else if x<t^.key then Put(x, t^.L_Son)
else t^.n:=t^.n+1;
end;
Хотя задача этого алгоритма – поиск с включением, но его можно использовать и для сортировки, т.к. он напоминает сортировку с включением. А так как вместо массива используется дерево, то пропадает необходимость перемещения элементов выше места включения. Для того, чтобы сортировка этого алгоритма была устойчивой, алгоритм должен выполняться одинаково как при t^.key=x, так и при t^.key>x.
Пусть задана
последовательность: 30, 1, 15, 17, 18, 50, 2, 60. После
построения дерева осуществляется
прохождение дерева в симметричном
порядке: 1, 2, 15, 17, 18, 30, 50, 60.
Анализ алгоритма поиска. Если дерево вырождается в последовательность то сложность в таком случае O(N) (в худшем случае). В лучшем же случае, если дерево сбалансировано, то сложность будет O(log 2 N). Таким образом, имеем:
O(N) ПФВС O(log 2 N).
Если считать, что вероятность появления любой структуры дерева одинакова, и ключи появляются с одинаковой вероятностью, то .
Алгоритм сортировки является устойчивым, если элементы с одинаковыми ключами появляются в той же последовательности при симметричном обходе дерева, что и в процессе их включения в дерево.
Операция исключения из бинарного дерева.
При удалении узла дерево должно оставаться упорядоченным относительно ключа:
а) удаляется лист;
б) удаляется узел с одним потомком (потомок слева или справа);
в) удаляется узел с двумя потомками, но в левом потомке нет правого поддерева;
г) общий случай.
Р
t
i
t
g
K
K
t :=t^.R_Son;
d
g
g
e nd;
i f g^.R_Son=nil then begin
g:=t;
t :=t^.L_Son;
dispose(g);
end;
Случай а) является частным случаем этого алгоритма.
Случай в): r указывает на элемент, не имеющий правого поддерева.
g :=t;
g
t
g
К
g
r
r
d ispose(g);
С
Мы ищем такой элемент, у которого
отсутствует правое поддерево (на такой
элемент указывает r).
Последовательность операторов та же,
т.е. удаляемый элемент нужно заменить
самым правым элементом его левого
поддерева. Такие элементы не могут
иметь более одного потомка.
К
t
r
Procedure Get (x: integer; var t: ElPtr);
var g: ElPtr;
begin
if t=nil then {обработка исключительной ситуации, когда элемента с заданным ключом в дереве нет}
else if x>t^.key then Get(x, t^.R_Son)
else if x<t^.key then Get(x, t^.L_Son)
else begin
g:=t;
if g^.L_Son=nil then t:=g^.R_Son
else if g^.R_Son=nil then t:=g^.R_Son
else D(g^.L_Son); {найти r)
dispose(g);
end;
end;