Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему АТД дерево - общее представление

Содержание

АТД «Дерево» - терминология (1)Дерево (tree) T — это набор узлов (node), хранящих элементы, состоящие в отношениях «отцы и дети», со следующими свойствами:T имеет особый узел r, называемый корнем данного древа (root of T);каждый узел v
АТД «Дерево» - общее представлениеДерево — это абстрактный тип данных (АТД) для АТД «Дерево» - терминология (1)Дерево (tree) T — это набор узлов (node), АТД «Дерево» - терминология (2)Дерево является упорядоченным (ordered), если дочерние элементы каждого Пример бинарного дерева – дерево решений Пример бинарного дерева, представляющего арифметическое выражение((((3 + 1) × 3) / (9 АТД «Дерево»В АТД «дерево» «узлы» будут представлены позициямиДля «Дерева» определены следующие группы АТД «Дерево» - методы доступаRoot(): возвращает корень дерева. Input: нет; Output: позиция.Parent(v): АТД «Дерево» - методы доступаIsInternal(v): проверяет, является ли v составным. Input: позиция; АТД «Дерево» - общие методыSize(): возвращает количество узлов в дереве. Input: нет; АТД «Дерево» - методы обновленияSwapElements(v,w): меняет местами элементы, хранимые в узлах v Структура интерфейсов для АТД «Дерево» Основные алгоритмы над деревьямиПредварительные допущения:Методы доступа Root() и Parent() выполняются за O(1) Основные алгоритмы над деревьями – глубина узлаГлубина узла v - количество предков Основные алгоритмы над деревьями - высотаВысота узла v дерева Т:если v является Основные алгоритмы над деревьями – высота 1public static int height1(InspectableTree T){ Основные алгоритмы над деревьями – высота 2public static int height2(InspectableTree T, Position Проход дереваПроход (traversal) – систематическая процедура, в ходе которой каждый узел дерева Прямой проход (preorder)Алгоритм preorder(T,v):   выполнить Обратный обход (postorder)Алгоритм postorder(r,v):	for для каждого узла w, дочернего к v do		выполнить Прямой и обратный проходыПрямой: 2 4 7 1 5 3 8 6 Бинарное деревоПравильное бинарное дерево - упорядоченное дерево, в котором каждый составной узел Структура интерфейсов для АТД «Бинарное дерево» Свойства бинарного дереваУровень d дерева Т - все узлы дерева Т, расположенные Свойства бинарного дереваУтверждение 6.3. Допустим, T является бинарным (правильным) деревом с количеством Свойства бинарного дереваОперация RemoveAboveExternal(w), удаляющая простой узел и его родителя и иллюстрирующая Прямой проход бинарного дереваАлгоритм binaryPreorder(T, v):  выполнить обращение к узлу v Поисковые бинарные деревьяБинарное поисковое дерево - дерево, в котором каждый составной узел Обратный проход бинарного дереваАлгоритм binaryPostorder(T, v):  if v составной узел then Симметричный проход бинарного дереваАлгоритм Inorder(T, v):  if v составной узел then Вычисление схемы бинарного дереваx(v) равно количеству узлов, пройденных до обращения к v Унифицированная среда прохода дереваАлгоритмы прохода дерева унифицируются в виде единого обобщенного подхода Унифицированная среда прохода дереваАлгоритм eulerTour(T, v):  выполнить обращение к узлу v
Слайды презентации

Слайд 2 АТД «Дерево» - терминология (1)
Дерево (tree) T —

АТД «Дерево» - терминология (1)Дерево (tree) T — это набор узлов

это набор узлов (node), хранящих элементы, состоящие в отношениях

«отцы и дети», со следующими свойствами:
T имеет особый узел r, называемый корнем данного древа (root of T);
каждый узел v этого Т, отличный от r, имеет родительский узел u.
В соответствии с приведенным определением дерево не может быть пустым,
Если узел и является родителем (parent) узла v, то v является дочерним (child) узлом и.
Узлы, дочерние для одного родителя, называются сестрами/братьями (siblings).
Узлы, имеющие один и более дочерних элементов, называются составными (internal), а не имеющие их — простыми (external) или листьями (leaves).
Предок (ancestor) узла - родительский узел, либо предок родителя этого узла.
v является потомком узла u, если u является предком v.
Ответвление (subtree) от дерева, корнем которого является узел v, это дерево, состоящее из потомков (descendent) v, включая сам узел v.


Слайд 3 АТД «Дерево» - терминология (2)
Дерево является упорядоченным (ordered),

АТД «Дерево» - терминология (2)Дерево является упорядоченным (ordered), если дочерние элементы

если дочерние элементы каждого из узлов упорядочены, то есть

каждый из элементов можно определить как первый, второй, третий и т.д. Обычно изображаются слева направо.
Бинарным деревом (binary tree) называется упорядоченное дерево, в котором каждый из узлов имеет максимум два дочерних элемента. Бинарное дерево считается правильным (proper), если каждый узел не содержит ни одного или содержит два дочерних элемента. Дочерние элементы в таких узлах называют «правый» и «левый» (left child и right child). Ответвление, берущее начало из левого или правого элемента составного узла v, будет называться соответственно левым или правым ответвлением (left subtree и right subtree) узла v.

Слайд 4 Пример бинарного дерева – дерево решений

Пример бинарного дерева – дерево решений

Слайд 5 Пример бинарного дерева, представляющего арифметическое выражение
((((3 + 1)

Пример бинарного дерева, представляющего арифметическое выражение((((3 + 1) × 3) /

× 3) / (9 - 5) + 2)) -

((3 × (7 - 4)) + 6)

Слайд 6 АТД «Дерево»
В АТД «дерево» «узлы» будут представлены позициями
Для

АТД «Дерево»В АТД «дерево» «узлы» будут представлены позициямиДля «Дерева» определены следующие

«Дерева» определены следующие группы методов:
методы доступа (accessor method)
методы запроса

(query methods)
общие методы (generic method)
методы обновления (update methods)

Слайд 7 АТД «Дерево» - методы доступа
Root(): возвращает корень дерева. Input:

АТД «Дерево» - методы доступаRoot(): возвращает корень дерева. Input: нет; Output:

нет; Output: позиция.
Parent(v): возвращает родителя узла v; ошибка, если

v является корнем. Input: позиция; Output: позиция.
Children(v): возвращает итератор дочерних элементов узла v. Input: позиция; Output: итератор объектов позиций.
Если дерево T упорядочено, то итератор Children(v) обеспечивает доступ к дочерним
элементам узла v в определенном порядке. Для простого узла v Children(v) – пустой
итератор.



Слайд 8 АТД «Дерево» - методы доступа
IsInternal(v): проверяет, является ли

АТД «Дерево» - методы доступаIsInternal(v): проверяет, является ли v составным. Input:

v составным. Input: позиция; Output: логическое значение.
IsExternal(v): проверяет, является ли

v простым. Input: позиция; Output: логическое значение.
IsRoot(v): проверяет, является ли v корнем. Input: позиция; Output: логическое значение.


Слайд 9 АТД «Дерево» - общие методы
Size(): возвращает количество узлов

АТД «Дерево» - общие методыSize(): возвращает количество узлов в дереве. Input:

в дереве. Input: нет; Output: целое число.
Elements(): возвращает итератор всех

элементов, хранимых в узлах дерева. Input: нет; Output: итератор объектов.
Positions(): возвращает итератор всех узлов дерева. Input: нет; Output: итератор позиций.

Слайд 10 АТД «Дерево» - методы обновления
SwapElements(v,w): меняет местами элементы,

АТД «Дерево» - методы обновленияSwapElements(v,w): меняет местами элементы, хранимые в узлах

хранимые в узлах v и w. Input: две позиции; Output:

отсутствует.
ReplaceElement(v,e): замещает на е и возвращает элемент, хранившийся в узле v. Input: позиция и ее объект; Output: объект

Слайд 11 Структура интерфейсов для АТД «Дерево»

Структура интерфейсов для АТД «Дерево»

Слайд 12 Основные алгоритмы над деревьями
Предварительные допущения:
Методы доступа Root() и

Основные алгоритмы над деревьямиПредварительные допущения:Методы доступа Root() и Parent() выполняются за

Parent() выполняются за O(1) времени.
Метод доступа Children(v) требует O(cv)

времени, где cv — количество дочерних элементов v.
Методы запросов IsInternal(v), IsExternal(v) и IsRoot(v) также выполняются за O(1) времени.
Общие методы SwapElements(v) и ReplaceElement(v,e) требуют O(1) времени.
Общие методы Elements() и Positions(), возвращающие итераторы, выполняются за O(n) времени, где n — количество узлов в дереве.
Для итераторов, возвращаемых методами Elements(), Positions() и Children(v), методы HasNext(), NextObject() или NextPosition() выполняются за O(1) времени каждый.

Слайд 13 Основные алгоритмы над деревьями – глубина узла
Глубина узла v

Основные алгоритмы над деревьями – глубина узлаГлубина узла v - количество

- количество предков v, исключая сам v.
Рекурсивное определение:
если v

— корень, то его глубина равна 0;
иначе глубина v равна 1+глубина родителя v .
public static int depth(InspectableTree T,
Position v)
{ if (T.IsRoot(v)) return 0;
else return 1 + depth(T, T.Parent(v));
}
Время выполнения depth(T,v) равно O(1 + dv), где dv - глубина узла v дерева Т. В худшем случае - O(n).


Слайд 14 Основные алгоритмы над деревьями - высота
Высота узла v

Основные алгоритмы над деревьями - высотаВысота узла v дерева Т:если v

дерева Т:
если v является простым узлом, то высота v

равна 0;
Иначе высота v равна 1 + максимальная высота дочернего элемента узла v.
Высота дерева T равна высоте корня Т.
Утверждение. Высота дерева Т равна максимальной глубине простого узла дерева Т.

Слайд 15 Основные алгоритмы над деревьями – высота 1
public static

Основные алгоритмы над деревьями – высота 1public static int height1(InspectableTree T){

int height1(InspectableTree T)
{ int h = 0;

PositionIterator positer = T.Positions();
while (positer.HasNext())
{ Position v = positer.NextPosition();
if (T.isExternal(v)) h = Math.Max(h, depth(T, v));
}
return h;
}

Слайд 16 Основные алгоритмы над деревьями – высота 2
public static

Основные алгоритмы над деревьями – высота 2public static int height2(InspectableTree T,

int height2(InspectableTree T, Position v)
{ if (T.IsExternal(v)) return

0;
else
{ int h = 0;
PositionIterator children = T.Children(v);
while (children.HasNext())
h = Math.Max(h, height2(T, children.NextPosition()));
return 1 + h;
}
}
Время выполнения height2 для корня дерева T равно O(n), где n — количество узлов Т.


Слайд 17 Проход дерева
Проход (traversal) – систематическая процедура, в ходе

Проход дереваПроход (traversal) – систематическая процедура, в ходе которой каждый узел

которой каждый узел дерева обрабатывается ровно 1 раз.
В первую

очередь рассмотрим:
прямой проход;
обратный проход.

Слайд 18 Прямой проход (preorder)
Алгоритм preorder(T,v):
выполнить "обращение"

Прямой проход (preorder)Алгоритм preorder(T,v):  выполнить

к узлу v
for для каждого узла w, дочернего к

v do
выполнить preorder(T,w)

public static String preorderPrint(InspectableTree T, Position v)
{ String s=v.GetElement().ToString();
PositionIterator children = T.Children(v);
while (children.HasNext())
s += "" + preorderPrint(T, children.NextPosition());
return s;
}
Вычислительная сложность – O(n)

Слайд 19 Обратный обход (postorder)
Алгоритм postorder(r,v):
for для каждого узла w,

Обратный обход (postorder)Алгоритм postorder(r,v):	for для каждого узла w, дочернего к v

дочернего к v do
выполнить postorder(T,w)
выполнить «обращение» к узлу v

public

static String postorderPrint(InspectableTree T, Position v)
{ String s = "";
PositionIterator children = T.Children(v);
while (children.HasNext())
s += postorderPrint(T, children.NextPosition()) + ""; s += v.Element();
return s;
}
Вычислительная сложность – O(n)

Слайд 20 Прямой и обратный проходы
Прямой: 2 4 7 1

Прямой и обратный проходыПрямой: 2 4 7 1 5 3 8

5 3 8 6 9
Обратный: 7 1 4 8

6 3 9 5 2

Когда требуется прямой или обратный проход?


Слайд 21 Бинарное дерево
Правильное бинарное дерево - упорядоченное дерево, в

Бинарное деревоПравильное бинарное дерево - упорядоченное дерево, в котором каждый составной

котором каждый составной узел имеет два дочерних элемента.
Три дополнительных

метода доступа:
LeftChild(v): возвращает левый дочерний элемент узла v; ошибка возникает, если v — простой узел. Input: позиция, Output: позиция.
RightChild(v): возвращает правый дочерний элемент узла v; ошибка возникает, если v — простой узел. Input: позиция, Output: позиция.
Sibling(v): возвращает соседний узел (брата) узла v; ошибка возникает, если v - корень. Input: позиция, Output: позиция.


Слайд 22 Структура интерфейсов для АТД «Бинарное дерево»

Структура интерфейсов для АТД «Бинарное дерево»

Слайд 23 Свойства бинарного дерева
Уровень d дерева Т - все

Свойства бинарного дереваУровень d дерева Т - все узлы дерева Т,

узлы дерева Т, расположенные на одной глубине d.
Уровень

d бинарного дерева содержит максимум 2d узлов

Слайд 24 Свойства бинарного дерева
Утверждение 6.3. Допустим, T является бинарным

Свойства бинарного дереваУтверждение 6.3. Допустим, T является бинарным (правильным) деревом с

(правильным) деревом с количеством узлов n и высотой h.

Тогда T имеет следующие свойства:
1) количество простых узлов дерева T - [h+1, 2h]
2) количество составных узлов дерева T - [h, 2h-1]
3) общее количество n узлов дерева Т - [2h - 1, 2h+1 – 1]
4) высота дерева T - [log(n+1)-1, (n-1)/2]

Слайд 25 Свойства бинарного дерева
Операция RemoveAboveExternal(w), удаляющая простой узел и

Свойства бинарного дереваОперация RemoveAboveExternal(w), удаляющая простой узел и его родителя и

его родителя и иллюстрирующая обоснование утверждения 6.4
Утверждение 6.4. В

бинарном (правильном) дереве T количество простых узлов на единицу больше количества составных узлов.

Слайд 26 Прямой проход бинарного дерева
Алгоритм binaryPreorder(T, v):
выполнить

Прямой проход бинарного дереваАлгоритм binaryPreorder(T, v): выполнить обращение к узлу v

обращение к узлу v
if v составной узел

then
{рекурсивное прохождение левой ветви}
binaryPreorder(T, T.LeftChild(v))
{рекурсивное прохождение правой ветви}
binaryPreorder(T, T.RightChild(v))


Слайд 27 Поисковые бинарные деревья
Бинарное поисковое дерево - дерево, в

Поисковые бинарные деревьяБинарное поисковое дерево - дерево, в котором каждый составной

котором каждый составной узел v содержит элемент е, так

что элементы, хранимые в левой ветви v, меньше или равны е, а элементы, хранимые в правой ветви v, больше или равны е. Простые узлы не содержат элементов (null- ссылка).

Время поиска в бинарном поисковом дереве [O(log n), О(n)]


Слайд 28 Обратный проход бинарного дерева
Алгоритм binaryPostorder(T, v):
if

Обратный проход бинарного дереваАлгоритм binaryPostorder(T, v): if v составной узел then

v составной узел then
{рекурсивное прохождение

левой ветви}
binaryPostorder(T, T.LeftChild(v))
{рекурсивное прохождение правой ветви}
binaryPostorder(T, T.RightChild(v))
выполнить обращение к узлу v

Алгоритм evaluateExpression(T, v):
if v составной узел, хранящий оператор о, then
х ← evaluateExpression(T, T.LeftChild(v))
у ← evaluateExpression(T, T.RightChild(v))
return x о у
else
return значение, хранимое в v

Слайд 29 Симметричный проход бинарного дерева
Алгоритм Inorder(T, v):
if

Симметричный проход бинарного дереваАлгоритм Inorder(T, v): if v составной узел then

v составной узел then
{рекурсивное прохождение

левой ветви}
inorder(T, T.LeftChild(v))
выполнить обращение к узлу v
if v составной узел then
{рекурсивное прохождение правой ветви}
inorder(T, T.RightChild(v))

Слайд 30 Вычисление схемы бинарного дерева
x(v) равно количеству узлов, пройденных

Вычисление схемы бинарного дереваx(v) равно количеству узлов, пройденных до обращения к

до обращения к v при симметричном проходе дерева Т;
y(v)

равно глубине узла v в дереве Т.

Слайд 31 Унифицированная среда прохода дерева
Алгоритмы прохода дерева унифицируются в

Унифицированная среда прохода дереваАлгоритмы прохода дерева унифицируются в виде единого обобщенного

виде единого обобщенного подхода при отсутствии требования об одноразовом

обращении к узлу. Полученный в результате метод прохода будет называться «проходом по Эйлеру» (Euler tour traversal)
Каждый узел v дерева Т при эйлеровом проходе будет встречаться трижды:
«слева» (до прохода вдоль левой ветви v);
«снизу» (когда окажемся между двумя ветвями v);
«справа» (при проходе вдоль правой ветви v).
Если узел v простой (пустой), то эти обращения выполняются одновременно.


  • Имя файла: atd-derevo-obshchee-predstavlenie.pptx
  • Количество просмотров: 114
  • Количество скачиваний: 0