Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

AlgStr / Библиотека / POSIBNIK / Главы для пособия / Практическая работа1

.doc
Скачиваний:
33
Добавлен:
23.03.2015
Размер:
98.82 Кб
Скачать

Практическая работа

Тема:Спецификация и реализация нелинейных структур данных(деревья)

Понятие деревьев возникает там, где необходимо произвести классифика-цию. Деревья возникают при описании дерева игры в шахматы, игра в Х и 0 и т.д.

Деревья важны для хранения информации, для представления таблиц. Неотъемлемой частью дерева является рекурсивность. Деревья легко обрабатывать с помощью рекурсивных процедур.

Деревья состоят из узлов, узлы деревьев тяжело нарисовать в виде линейной структуры. Линейный список-это частный случай дерева. У дерева есть корень и поддеревья.

Можно выделить такие понятия: степень, ранг узла, узел разветвления, уровень дерева, регулярное дерево, точка роста, пустое дерево (NIL), высота дерева, ширина дерева (количество узлов на самом широком уровне).

Описать эти понятия.

По дереву необходимо ходить с корня. О деревьях можно говорить про упорядоч. деревьях. В памяти упорядоченных деревьев есть понятие леса. Вся эта терминология идет из генеологического дерева. Существует два вида таких деревьев:

-родословная (показывает прородителей данного узла)

Чарльз

Елизавета V Филипп

мама папа

Елизавета Георгий IV

Филипп

Если дерево упорядоченное, то левая ветвь женская, правая-мужская. Д.родословная может быть и не деревом.

-родовая схема (показывает потомков данного лица)

Гомер

Иофет

Ной

Хам Это уже дерево истинное

Сим

Человек придумал много возможностей изображения дерева

I.

II.

III. A IV. (A(B(H)(S))(c(D)(E)(G))(F)))

B V. ABH. J..CD. EG..F...

H

J

C

D

E

VI.Десятинная система обозначений Дьюи

1. A-вся библиотека

1.1. B-раздел. литературы

1.1.1.H-раздел кубинской литературы

1.1.2. J-раздел китайской литературы

1.2.C- научная литература

1.2.1. D

1.2.2. E

1.2.2.1. G

Эта система используется для структур библиотеки и книги.

Например: матрицу можно представить в виде дерева

А

А[1] A[2] A[n]

A[1,1] A[1,2] ...

Алгеброические файлы перед тем, как происходит компиляция, тоже строятся деревья

a-b*(c/d+c/f)

5 4 3 1 2

Наиболее важными являются бинарные деревья.

Определение: бинарное дерево-это либо пусто,либо корень и два поддерева (левое и правое). Бинарное дерево является ориентированным.

Для непустого бинарного поддерева выполняется для всех узлов бинарного дерева все ключи левого поддерева меньше в некотором смысле ключа корня. Корня< ключа правого поддерева.

Бинарные деревья называются деревьями поиска и являются самыми простыми деревьями поиска.

Преобразование произвольного дерева в двоичное (в котором в узле не более 2-х сыновей)

Пример:

I.

Пол

II.Функциональное описание-описание поведения данной абстракции

Алгеброическая спецификация дерева:

TREE_T_SPEC

introduces

NEW: TREE (пустая константа создает пустое дерево)

Левое под правое

construct: T,TREE_T,TREE_T TREE_T

аргум контруктора узла

IS_EMPTY: TREE_T BOOL //пустое или нет

ROOT:TREE_T T //выдел.корень

LEFT:TREE_T T_TREE //взятие левого поддерева

RIGTH:TREE_T T_TREE //взятие правого поддерева

constreins New,construct,IS_EMPTY //перечисление всех операций

so that //такая что

generated by [NEW,construct] //перечислены базовые

конструкторы

portition by [IS_EMPTY,ROOT,LEFT,RIGHT] // как можна разделить дерево

на части

for all [t:T,ltree,rtree:TREE_T]

опис. типы

переменные

1) IS_EMPTY(NEW) TRUE

2) IS_EMPTY (construct(t,ltree,rtree)) FALSE

3) ROOT (NEW) ошибка // у пустого дерева нельзя

выделить корень

набор 4) ROOT(construct(t,ltree,rtree)=t //если я создал поддерево с правым

аксиом . и левым поддер., то корень t

.

.

формальным образом описано дерево

III. Логическое описание-представление нового понятия за счет

существующих

Типы:

TREE_T=(пустое/непустое)

Непустое =(корень:T;

левое_ПД: TREE_T;

правое ПД: TREE_T)

Алгоритм: NEW TREE_T

NEW Пустое

IV.Физическое представление

Будем рассматривать 3 способа физического представления:

1.Сплошное представление на базе адресной арифметики

1 2 3 4 5 6 7

Левого сына узла с индексом к запишется в 2к , а правого-в узла (2*к+1).

Как имея узел к, узнать родителя-взять [k/2] (на цело)

2.На основе массива узлов (указатель-это индекс)

ROOT

Key left right

1 And 0 0

2 End 0 3

3 For 5 6

4 Begin 1 2

5 For 0 0

6 Or 0 0

Преимущество: указатель 4 байта, а индекс-2 байта.

3.На основе полных указателей:

type

PTREE=^TREENode;

TREENode=record

key:Keytype ;

info:infotype;

left,right:PTREE;

end

Демонстрация представления (для лаб.раб)

Необходимы следующие понятия:

Полное дерево-дерево,у которого все точки роста находятся на последнем уровне.

Точка роста-указатель, у которой равен NIL.

Пример: , ,

не полное полное

Таким образом полное дерево-это дерево вида , в степени 2к-1

Полное дерево очень мало, вводим понятия.

Трехуровневое дерево- у которого все точки роста находятся на 2х последних уровнях.

Подровненное дерево-(сбалансированное по высоте дерево)(АВЛ-дерево)-для каждого узла высоты левого и правого поддеревьев отличаются не больше, чем на 1.

Самое плохое подровненное дерево-это Фибоначивоемое дерево.

F0 F1 F2 F2 F3

F0 F1 F2 F1

Соседние файлы в папке Главы для пособия