Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мясникова СИАОД.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
572 Кб
Скачать
☆

Процедура “Поиск по дереву с включением”.

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

  1. В-деревья, их свойства, построение. Индексирование массивов данных. Индексные деревья.

Рассматриваемые структуры данных называются B – деревьями и имеют следующие свойства:

  1. Каждая страница содержит не более 2n элементов (ключей).

  2. Каждая страница, кроме корневой, содержит не менее n элементов (n – порядок B – дерева).

  3. Каждая страница является либо листом, т.е. не имеет потомков, либо имеет m + 1 потомок, где m – число находящихся на ней ключей.

  4. Все листья находятся на одном и том же уровне.

На рис. 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.

Включение состоит из этапов:

  1. Выяснение, что ключ 22 отсутствует (включение в страницу С невозможно, т.к. она уже заполнена).

  2. Страница С расщепляется на две страницы, т.е. размещается новая страница D.

  3. Количество m + 1 ключей поровну распределяется на C и D, а средний ключ перемещается на один уровень вверх, на страницу предок А.

На рис. 23 изображено B – дерево (рис. 22) после включения элемента с ключом 22.

20 30

22 26

35 40

A

7 10 15 18

B C D

Рис. 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

) 22

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

  1. Применение бинарных деревьев. Кодирование и сжатие данных. Кодовые деревья, дерево Хаффмена.

АЛГОРИТМ ХАФФМЕНА

Рассмотрим следующую проблему. Предположим, что у нас есть алфавит из n символов и длинное сообщение, состоящее из символов этого алфавита. Мы хотим закодировать сообщение в виде длинной строки битов следующим образом (бит опреде­ляем как единицу, содержащую 0 или 1). Присвоим каждому символу алфавита определенную последовательность битов (код). Затем соединим отдельные коды символов, составляющих сообщение, и получим кодировку сообщения. Например, пред­положим, что алфавит состоит из четырех символов — А, В, С и D — и что символам назначены следующие коды: