- •Var X: ссылка;
- •Var X: ссылка;
- •Var X: ссылка;
- •Процедура “Поиск по дереву с включением”.
- •Символ Код
- •Символ Код
- •Символ Частота Код
- •Метод Шелла
- •Получаем ряд приращений 1,4,13,40,121…
- •Слияние – означает объединение двух или более упорядоченных файлов в один упорядоченный файл.
- •Сортировка посредством слияния списков
Процедура “Поиск по дереву с включением”.
Type ссылка =^ узел;
Узел = record
Ключ : integer;
Счетчик : integer;
Лев, прав : ссылка;
End;
Var i,n,k : integer;
Дерево : ссылка;
Procedure поиск (x:integer; var p : ссылка);
Begin
If p=nil then {узла с ключом х нет в дереве – включить}
Begin
New(p); {создаётся новый узел и p-значение
With p^ do ссылки на него}
Begin ключ:=x; счетчик:=1; лев:=nil; прав:=nil
End
End
Else {продолжать поиск}
With p^ do
Begin if x<ключ then поиск(х,лев)
Else if x>ключ then поиск(х,прав)
Else счетчик := счетчик + 1;
End
End; {поиск}
Procedure печать_дерева(t:ссылка; h : integer);
{см. процедуру печати дерева}
Begin
Дерево:=nil;
Write(‘число элементов?’); read(n);
For i:=1 to n do
Begin read(k); поиск(к, дерево);
End;
Печать_дерева(дерево,0)
End.
Анализ программы: n=7; числа: 11,5,4,12,5,9,14
1
)
2) 3)
i=1 i=2 i=3
k
=11
k=5 k=4
4 ) 5)
i
=4 i=5
k=12 k=5 6)
i=6
k=9
7)
i =7
k =14
В-деревья, их свойства, построение. Индексирование массивов данных. Индексные деревья.
Рассматриваемые структуры данных называются B – деревьями и имеют следующие свойства:
Каждая страница содержит не более 2n элементов (ключей).
Каждая страница, кроме корневой, содержит не менее n элементов (n – порядок B – дерева).
Каждая страница является либо листом, т.е. не имеет потомков, либо имеет m + 1 потомок, где m – число находящихся на ней ключей.
Все листья находятся на одном и том же уровне.
На рис. 21 показано B – дерево порядка 2 с 3-мя уровнями. Все страницы содержат 2, 3 или 4 элемента. Исключением является корень, которому разрешается содержать только один элемент. Все листья находятся на уровне 3.
Ключи расположены в возрастающем порядке слева направо, если спроецировать дерево на один уровень, вставляя потомков между ключами, находящимися на странице – предке.
25
10 20
30 40
2 5 7 8
13 14 15 18
22 24
41 42 45 48
32 35 38
26 27 28
Рис. 21. B-дерево порядка 2
Пример: Включение в B–дерево.
Рассмотрим рис. 22
20
A
7 10 15 18
26 30 35 40
B C
22
Рис. 22. Включение в B–дерево порядка 2
Нужно включить в это дерево элемент с ключом 22.
Включение состоит из этапов:
Выяснение, что ключ 22 отсутствует (включение в страницу С невозможно, т.к. она уже заполнена).
Страница С расщепляется на две страницы, т.е. размещается новая страница D.
Количество m + 1 ключей поровну распределяется на C и D, а средний ключ перемещается на один уровень вверх, на страницу предок А.
На рис. 23 изображено B – дерево (рис. 22) после включения элемента с ключом 22.
20 30
22 26
35 40
A
7 10 15 18
Рис. 23. B – дерево после включения элемента
Пример: Построение B-дерева порядка 2 (n=2) с последовательностью
вставляемых ключей:
20; 40 10 30 15 35 7 26 18 22; 5; 42 13 46 27 8 32; 38 24 45 25;
(точки с запятой указывают моменты размещения новых страниц).
1
20
20
20
2)
10 15
30 40
7 10 15 18
26 30 35 40
3
20 30
7 10 15 18
22 26
35 40
10 20 30
4)
22 26
35 40
5 7
15 18
10 20 30
22 26 27
35 40 42 46
13 15 18
5 7 8
32
5
10 20 30 40
5 7 8
13 15 18
22 24 26 27
32 35 38
42 45 46
25
6
25
10 20
30 40
5 7 8
13 15 18
22 24
26 27
32 35 38
42 45 46
Рис. 24. Рост B – дерева порядка 2
Применение бинарных деревьев. Кодирование и сжатие данных. Кодовые деревья, дерево Хаффмена.
АЛГОРИТМ ХАФФМЕНА
Рассмотрим следующую проблему. Предположим, что у нас есть алфавит из n символов и длинное сообщение, состоящее из символов этого алфавита. Мы хотим закодировать сообщение в виде длинной строки битов следующим образом (бит определяем как единицу, содержащую 0 или 1). Присвоим каждому символу алфавита определенную последовательность битов (код). Затем соединим отдельные коды символов, составляющих сообщение, и получим кодировку сообщения. Например, предположим, что алфавит состоит из четырех символов — А, В, С и D — и что символам назначены следующие коды:
