Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы и структ дан.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
233.51 Кб
Скачать

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. Рекурсивно спускается по правому поддереву. Спустившись по дереву, алгоритм определяет, что он находится в узле и может выполнить те же три действия. Спуск прекращается по достижению пустого дерева. Различные алгоритмы рекурсивного прохождения отличаются порядком, в котором они выполняют свои действия в узле. Рассмотрим прямой, симметричный и обратный методы прохождения.

Прямой метод определяется посещением узла в первую очередь и последующим прохождением сначала левого, а потом правого поддеревьев: