24.09.2008Деревья1 Структуры и алгоритмы обработки данных, 1 Лекция 6 ДЕРЕВЬЯ (продолжение) 1.Нерекурсивные процедуры обхода бинарных деревьев 2.Представления.

Презентация:



Advertisements
Похожие презентации
Деревья1 Структуры и алгоритмы обработки данных, 1 Лекция 5 ДЕРЕВЬЯ 1.Определения дерева, леса, бинарного дерева. Скобочное представление 2.Спецификация.
Advertisements

Стек, очередь, дек1 Структуры и алгоритмы обработки данных, 1 Лекция 4 Линейные СД Стек, очередь, дек.
Рекурсивная обработка списков1 Структуры и алгоритмы обработки данных, 1 Лекция 3 Рекурсивная обработка списков 1.Представление и реализация.
Двоичные деревья поиска. Очередь с приоритетами Федор Царев Спецкурс «Олимпиадное программирование» Лекция , Санкт-Петербург, Гимназия.
Лекция 8 Красно-черные деревья План лекции 1.Определение красно-черного дерева и его высота. 2.Вращения 3.Вставка элемента, восстановление структуры дерева.
Задание бинарных деревьев с помощью массивов Обходы деревьев.
1 Программирование на языке Паскаль Тема 2. Ветвления.
1 Программирование на языке Паскаль Ветвления. 2 Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения:
Алгоритмические структуры 1.Линейный 2.Ветвление 3.Цикл.
Рекурсия Презентация разработана учителем информатики лицея 124 г.Барнаула Воловиковой Л.Л.
Алгоритмическая структура «Ветвление» Тема урока.
Информатика ЕГЭ Уровень А5. Вариант 1 Определите значения переменных a, b, c после выполнения следующего фрагмента программы: a:=5; b:=1; a:=a+b; if a>10.
Подпрограммы -это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы. Она записывается однократно, а в соответствующих.
1 Программирование на языке Паскаль Функции Кулебякин В.В.
ЗАПИСЬ ВСПОМОГАТЕЛЬНЫХ АЛГОРИТМОВ НА ЯЗЫКЕ Паскаль НАЧАЛА ПРОГРАММИРОВАНИЯ.
Структура программы Типы переменных Стандартные арифметические функции Стандартные функции преобразования Операторы ввода/вывода Оператор условного перехода.
Оператор CASE. Pascal. Структура оператора CASE: Оператор CASE позволяет реализовать множественный выбор и в общем виде записывается так: case выражение.
PASCAL Условный оператор.. Этот оператор используется для выполнения одного из двух возможных вариантов программы. Условный оператор если логическое_условие.
Двумерные массивы. Задачи обработки двумерных массивов.
Алгоритм Евклида. Два варианта решения Программирование. Сочетание циклов и ветвлений. 9 класс Евклид Александрийский ( род. 330 г. до н. э.) - известный.
Транксрипт:

Деревья1 Структуры и алгоритмы обработки данных, 1 Лекция 6 ДЕРЕВЬЯ (продолжение) 1.Нерекурсивные процедуры обхода бинарных деревьев 2.Представления и реализации бинарных деревьев 3.Примеры функций на бинарных деревьях 4.БД с размеченными листьями 5.Деревья Хаффмана (начало)

Деревья2 procedure обходКЛП (b: BTree); {прямой} begin if not Null (b) then begin посетить (Root (b)); обходКЛП (Left (b)); обходКЛП (Right (b)); end end {обходКЛП}; 4. Обходы бинарных деревьев и леса Обходы БД

Деревья3 Нерекурсивные процедуры обхода бинарных деревьев В стеке S хранятся упорядоченные пары (p, n), где p узел бинарного дерева, а n номер операции, которую надо применить к p, когда пара (p, n) будет выбрана из стека. Операции «посетить корень», «пройти левое поддерево», «пройти правое поддерево» нумеруются числами 1, 2, 3 в зависимости от порядка их выполнения в данном варианте обхода.

Деревья4 В алгоритме: посетить корень – посетить (p); пройти левое поддерево if not Null (Left (p)) thenS (Left (p), 1); пройти правое поддерево if not Null (Right (p)) then S (Right (p), 1). Для краткости использованы следующие обозначения операций со стеком: S e вместо S := Push (e, S) e S вместо Pop2 (e, S).

Деревья5 procedure обход (b: BTree); var S: Stack of (BTree, operation); p: BTree; op: operation {=1..3}; begin S := Create; S (b, 1); while not Null (S) do begin (p, op) S; if op = 1 then begin S (p, 2); операция 1 end else if op = 2 then begin S (p, 3); операция 2 end else {op = 3} операция 3 end{while} end{обход} Общий алгоритм

Деревья6 Выполнение procedure обход (b: BTree) Операции со стеком: (b, 1); (b, 1); (b, 2); {начало Опер1}… …{конец Опер1} (b, 2); (b, 3); {начало Опер2}… …{конец Опер2} (b, 3); {начало Опер3}… …{конец Опер3}

Деревья7 КЛП Операция 1 –посетить (p); Операция 2 if not Null (Left (p)) thenS (Left (p), 1); Операция 3 if not Null (Right (p)) then S (Right (p), 1). (b, 1); (b, 1); (b, 2); посетить (p); (b, 2); (b, 3); if not Null (Left (p)) then (Left (p), 1); (Left (p), 1); …; (b, 3); if not Null (Right (p)) then (Right (p), 1); (Right (p), 1);…;

Деревья8 procedure обход_КЛП (b: BTree); {прямой} var S: Stack of BTree; p: BTree; begin S:= Create; S b; while not Null (S) do begin p S; посетить (p); if not Null (Right (p)) then S Right (p); if not Null (Left (p)) then S Left (p) end{while} end{обход_КЛП}

Деревья9 лкп Операция 1 if not Null (Left (p)) thenS (Left (p), 1); Операция 2 – посетить (p); Операция 3 if not Null (Right (p)) then S (Right (p), 1). Самостоятельно разобрать работу со стеком и обосновать корректность следующей процедуры.

Деревья10 procedure обход_ЛКП (b: BTree); {обратный} var S: Stack of (BTree, operation); p: BTree; op: operation {=1..2}; begin S:= Create; S (b, 1); while not Null (S) do begin (p, op) S; if op = 1 then begin S (p, 2); if not Null (Left (p)) then S (Left (p), 1) end else {op=2} begin посетить (p); if not Null (Right (p)) then S (Right (p), 1) end end{while} end{обход_ЛКП}

Деревья11 ЛПК См. пособие – фактически без упрощений

Деревья12 Обход БД в горизонтальном порядке (в ширину) procedure обход_горизонтальный (b: BTree); var Q: queue of BTree; p: BTree; begin Q := Create; Q b; while not Null (Q) do begin p Q; посетить (p); if not Null (Left (p)) then Q Left (p); if not Null (Right (p)) then Q Right (p) end{while} end{обход_горизонтальный}

Деревья13 КЛП a b c d e f g h i j k l m n a d b e g c j f c h i k l m n (a (d) (e (j) (k)) (f (l))) (b (g) (h)) (c (i (m) (n))) КЛП: a d b e g c j f h i k l m n (a (d (e (j (k)) (f (l)) (b (g (h)) (c (i (m (n))))))

Деревья14 Представления и реализации бинарных См. учебное пособие «ДСД», п. 3.5

Деревья15 Примеры функций на бинарных деревьях T: TLTL TRTR Число узлов БД: 0, при T = Nv(T) = Nv(T L ) + Nv(T R ) +1, при T Число листьев БД: 0, при T = NLeaf(T) = 1,при (T L = ) & (T R = ) NLeaf (TL) + NLeaf (TR), иначе

Деревья16 Высота БД: 0, при T = H(T) = max (H(T L ), H(T R )) +1, при T T: TLTL TRTR Function H (t: BinT): Nat0; begin if Null(t) then H := 0 else H := max (H(LeftBT(t)), H(RightBT(t))) +1 end

Деревья17 Проверить свойство дерева: для каждого узла БД H(T L ) – H(T R ) = 1 Function HF (t: BinT): Boolean; begin if Null(t) then HB := True else begin HL := H(LeftBT(t)); HR := H(RightBT(t)); HF := HF(LeftBT(t)) & HF(RightBT(t)) & ( (HL – HR) = 1) end ! Пояснить неэффективность такой реализации функции HF ! Самостоятельно написать хороший вариант

Деревья18 Бинарные деревья с размеченными листьями БД РЛ ::= атом пара пара ::= БД РЛ БД РЛ F ED C B А БД РЛ S-expr

Деревья19 БД БД РЛ T: TLTL TRTR r S: S(T L ) S(T R ) А B C D E F G А B D C E F G r

Деревья20 Деревья Хаффмана См. разделы пособия «ДКиП» (файлы MS Word)

Деревья21 КОНЕЦ ЛЕКЦИИ