
- •Абстрактные типы данных, типы данных, структуры данных.
- •Классификация Структур данных.
- •Коллекция.
- •Нелинейные коллекции
- •6. Метод устранения – метод цепочек.
- •1) Посещение узла n 2) Прохождение левого поддерева 3) Прохождение правого поддерева
- •16, 4, 93, 47, 14, 66, 255, 13, 4, 31, 552, 41, 74, 39. Идеально-сбалансированное,поисковое, avl.
6. Метод устранения – метод цепочек.
При этом подходе к хешированию, таблица рассматривается как массив связанных списков. Каждая такая цепочка называется блоком и содержит записи отображаемой хеш функции в один и тот же табличный адрес. Чтобы обнаружить элемент данных, нужно применить хеш функцию для определения нужного связного списка и выполнить там последовательный поиск. Пример таких цепочек размер таблицы T, рекомендуется брать от 1/3n от количества элементов до 1/2n. В общем случае, метод цепочек быстрее открытой адресации, т.к. просматривает только те ключи, которые попадают в один и тот же табличный адрес. Кроме того, открытая адресация предполагает наличие таблицы фиксированного размера, в то время как в методе цепочек элементы таблицы создаются динамически.
1. Наибольшее применение метода хеширования получило системное программирование. В настоящее время все символьные таблицы строятся по методу хеширования.
2. Управление базами данных.
3. Применяется для организации таблиц, используемых в языках искусственного интеллекта.
4. Защита информации, криптографии, кодировании.
Пример. Требуется построить хеш таблицу, содержащую следующие ключи: 25 15 17 29 11 36 89 84 61 83
Хеш функция – сумма цифр ключа.
Вариант 1 – линейные пробы.
N=10. T=1.5*10=15. 0..14.
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
|
|
11 |
89 |
|
|
15 |
25 |
17 |
36 |
61 |
29 |
84 |
83 |
|
83 |
61 |
11 |
89 |
|
|
15 |
25 |
17 |
36 |
|
29 |
|
|
|
F(25)=7
F(15)=6
F(17)=8
F(29)=11
F(11)=2
F(36)=9
F(89)=17%15=2
A1=(2+1)%15=3
F(84)=12
F(61)=7…=10
F(83)=11
A1=(11+1)%15=12
A2=(11+2)%15=13
Вариант 2. – квадратичные пробы.
F(61)
A1=(7+1^2)%15=8
A2=(7+2^2)%15=11
A3=(7+3^2)%15=1.
Вариант 3. – метод цепочек.
T=1/2*10=5
0 |
|
|
|
|
|
|
|
|
|
1 |
15 |
29 |
83 |
|
|
|
|
|
|
2 |
25 |
11 |
89 |
84 |
61 |
|
|
|
|
3 |
17 |
|
|
|
|
|
|
|
|
4 |
36 |
|
|
|
|
|
|
|
|
Деревья.
Деревья – нелинейная структура, которая состоит из узлов и ветвей и имеет направлением от единственного начального узла, называемого корнем к внешним узлам, называемым листьями. Каждый узел дерева является корнем поддерева, который определяется данным узлом и всеми потомками этого узла. Прохождение от родительского узла к его дочернему дереву и его потомкам осуществляется вдоль путей. Путь от корня к узлу дает меру, называемую уровнем узла. Уровень узла – длина пути от корня к этому узлу. Глубина дерева – максимальный уровень любого его узла.
Выделим виды рассматриваемых деревьев: 1. Бинарные (идеально сбалансированные, поисковые, сбалансировано-поисковые) 2. Сильноветвящиеся (Б-дерево).
Бинарные деревья – упорядоченные деревья второй степени. Это такое множество узлов B, что это множество – дерево, если множество узлов пусто. B разбивается на три пересекающихся подмножества. D – коневой узел {l1, l2,…,} – левое поддерево, {r1,r1…} – правое поддерево. Бинарное дерево является рекурсивной структурой, т.к. каждый узел – это корень своего собственного поддерева, у которого в свою очередь есть потомки. Процедуры обработки деревьев тоже рекурсивны. На любом уровне n бинарное дерево может содержать от 1 до 2^n узлов. Число узлов, приходящееся на уровень, является показателем плотности дерева. Крайними мерами плотности дерева являются с одной стороны – вырожденное дерево (у которого есть ! лист и, каждый листовой узел имеет только одного сына), с другой стороны – это законченное и полное дерево. Законченные бинарное дерево на каждом уровне о..n-1 имеет полный набор вершин, а все листья уровня n расположены слева. Законченное бинарное дерево, содержащее 2^n узлов на уровне n является полным. ∑ узлов = 2^(n+1)-1. Двоичные деревья часто используются для представления множества данных, среди которых идет поиск по уникальному ключу. Структура дерева построена из узлов, соответственно узел дерева содержит поле с данными и два указателя: на левый и на правый. Left|data|right------Null|data|Null.
Корневой узел определяет входную точку дерева, а поле указателя – узел следующего уровня. Листовой узел содержит нулевое значение в поле правого и левого указателя.
Struct node
{
int data
Node data
Node *left;
Node * right;
}
Рекурсивные методы прохождения деревьев.
Рекурсивное определение бинарного дерева определяет эту структуру, как корень с двумя поддеревьями. Сила рекурсии проявляется вместе с методами прохождения. Каждый алгоритм прохождения дерева выполняет в узле три действия: 1. Заходит или посещает узел. 2. Рекурсивно спускается по левому поддереву. 3. Рекурсивно спускается по правому поддереву. Спустившись по дереву, алгоритм определяет, что он находится в узле и может выполнить те же три действия. Спуск прекращается по достижению пустого дерева. Различные алгоритмы рекурсивного прохождения отличаются порядком, в котором они выполняют свои действия в узле. Рассмотрим прямой, симметричный и обратный методы прохождения.
Прямой метод определяется посещением узла в первую очередь и последующим прохождением сначала левого, а потом правого поддеревьев: