Абстрактные типы данных деревья

Содержание
  1. АТД «дерево» — общее представление
  2. 2. АТД «Дерево» — терминология (1)
  3. 3. АТД «Дерево» — терминология (2)
  4. 4. Пример бинарного дерева – дерево решений
  5. 5. Пример бинарного дерева, представляющего арифметическое выражение
  6. 6. АТД «Дерево»
  7. 7. АТД «Дерево» — методы доступа
  8. 8. АТД «Дерево» — методы доступа
  9. 9. АТД «Дерево» — общие методы
  10. 10. АТД «Дерево» — методы обновления
  11. 11. Структура интерфейсов для АТД «Дерево»
  12. 12. Основные алгоритмы над деревьями
  13. 13. Основные алгоритмы над деревьями – глубина узла
  14. 14. Основные алгоритмы над деревьями — высота
  15. 15. Основные алгоритмы над деревьями – высота 1
  16. 16. Основные алгоритмы над деревьями – высота 2
  17. 17. Проход дерева
  18. 18. Прямой проход (preorder)
  19. 19. Обратный обход (postorder)
  20. 20. Прямой и обратный проходы
  21. 21. Бинарное дерево
  22. 22. Структура интерфейсов для АТД «Бинарное дерево»
  23. 23. Свойства бинарного дерева
  24. 24. Свойства бинарного дерева
  25. 25. Свойства бинарного дерева
  26. 26. Прямой проход бинарного дерева
  27. 27. Поисковые бинарные деревья
  28. 28. Обратный проход бинарного дерева
  29. 29. Симметричный проход бинарного дерева
  30. 30. Вычисление схемы бинарного дерева
  31. 31. Унифицированная среда прохода дерева
  32. 32. Унифицированная среда прохода дерева
  33. Презентация, доклад АТД «дерево» — общее представление

АТД «дерево» — общее представление

Динамическая память, динамические переменные

Дерево — это абстрактный тип данных (АТД) для
иерархического хранения элементов. За исключением
элемента во главе дерева (root), каждый элемент структуры
имеет родителя (parent) и ноль или более дочерних элементов
(children).
Дерево, ассоциируемое с книгой

2. АТД «Дерево» — терминология (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), если дочерние элементы
каждого из узлов упорядочены, то есть каждый из элементов можно
определить как первый, второй, третий и т.д. Обычно изображаются слева
направо.
Бинарным деревом (binary tree) называется упорядоченное дерево, в
котором каждый из узлов имеет максимум два дочерних элемента.
Бинарное дерево считается правильным (proper), если каждый узел не
содержит ни одного или содержит два дочерних элемента. Дочерние
элементы в таких узлах называют «правый» и «левый» (left child и right
child). Ответвление, берущее начало из левого или правого элемента
составного узла v, будет называться соответственно левым или правым
ответвлением (left subtree и right subtree) узла v.

Читайте также:  Деревья ходят читательский дневник

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

5. Пример бинарного дерева, представляющего арифметическое выражение

6. АТД «Дерево»

В АТД «дерево» «узлы» будут представлены позициями
Для «Дерева» определены следующие группы методов:
• методы доступа (accessor method)
• методы запроса (query methods)
• общие методы (generic method)
• методы обновления (update methods)

7. АТД «Дерево» — методы доступа

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

8. АТД «Дерево» — методы доступа

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

9. АТД «Дерево» — общие методы

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

10. АТД «Дерево» — методы обновления

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

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

12. Основные алгоритмы над деревьями

Предварительные допущения:
• Методы доступа Root() и 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 — корень, то его глубина равна 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 равна 0;
• Иначе высота v равна 1 + максимальная высота
дочернего элемента узла v.
Высота дерева T равна высоте корня Т.
Утверждение. Высота дерева Т равна максимальной
глубине простого узла дерева Т.

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

public static 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 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) – систематическая процедура, в ходе
которой каждый узел дерева обрабатывается ровно 1
раз.
В первую очередь рассмотрим:
— прямой проход;
— обратный проход.

18. Прямой проход (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, дочернего к 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. Прямой и обратный проходы

21. Бинарное дерево

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

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

23. Свойства бинарного дерева

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

24. Свойства бинарного дерева

Утверждение 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]

Читайте также:  Фотообои 3д золотое дерево

25. Свойства бинарного дерева

Утверждение 6.4. В бинарном (правильном) дереве T
количество простых узлов на единицу больше
количества составных узлов.
Операция RemoveAboveExternal(w), удаляющая простой
узел и его родителя и иллюстрирующая обоснование
утверждения 6.4

26. Прямой проход бинарного дерева

Алгоритм binaryPreorder(T, 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 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 v составной узел then

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

inorder(T, T.RightChild(v))

30. Вычисление схемы бинарного дерева

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

31. Унифицированная среда прохода дерева

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

32. Унифицированная среда прохода дерева

Алгоритм eulerTour(T, v):
выполнить обращение к узлу v слева
if v составной узел then
рекурсивно обойти левую ветвь узла v с помощью
eulerTour(T, T.LeftChild(v))
выполнять обращение к v снизу
if v составной узел then
рекурсивно обойти правую ветвь узла v с помощью
eulerTour(T, T.RightChild(v))
выполнять обращение к v справа

Источник

Презентация, доклад АТД «дерево» — общее представление

Вы можете изучить и скачать доклад-презентацию на тему АТД «дерево» — общее представление. Презентация на заданную тему содержит 32 слайдов. Для просмотра воспользуйтесь проигрывателем, если материал оказался полезным для Вас — поделитесь им с друзьями с помощью социальных кнопок и добавьте наш сайт презентаций в закладки!

АТД «Дерево» - общее представление Дерево — это абстрактный тип данныхАТД «Дерево» - терминология (1) Дерево (tree) T — это наборАТД «Дерево» - терминология (2)Пример бинарного дерева – дерево решенийПример бинарного дерева, представляющего арифметическое выражениеАТД «Дерево» В АТД «дерево» «узлы» будут представлены позициями Для «Дерева»АТД «Дерево» - методы доступаАТД «Дерево» - методы доступа IsInternal(v): проверяет, является ли v составным.АТД «Дерево» - общие методы Size(): возвращает количество узлов в дереве.АТД «Дерево» - методы обновления SwapElements(v,w): меняет местами элементы, хранимые вСтруктура интерфейсов для АТД «Дерево»Основные алгоритмы над деревьями Предварительные допущения: Методы доступа Root() и Parent()Основные алгоритмы над деревьями – глубина узла Глубина узла v -Основные алгоритмы над деревьями - высота Высота узла v дерева Т: Основные алгоритмы над деревьями – высота 1 public static int height1(InspectableTreeОсновные алгоритмы над деревьями – высота 2 public static int height2(InspectableTreeПроход дерева Проход (traversal) – систематическая процедура, в ходе которой каждыйПрямой проход (preorder) Алгоритм preorder(T,v): выполнить Обратный обход (postorder) Алгоритм postorder(r,v): for для каждого узла w, дочернегоПрямой и обратный проходыБинарное дерево Правильное бинарное дерево - упорядоченное дерево, в котором каждыйСтруктура интерфейсов для АТД «Бинарное дерево»Свойства бинарного дерева Уровень d дерева Т - все узлы дереваСвойства бинарного дерева Утверждение 6.3. Допустим, T является бинарным (правильным) деревомСвойства бинарного дерева Операция RemoveAboveExternal(w), удаляющая простой узел и его родителяПрямой проход бинарного дерева Алгоритм binaryPreorder(T, v): выполнить обращениеПоисковые бинарные деревья Бинарное поисковое дерево - дерево, в котором каждыйОбратный проход бинарного дерева Алгоритм binaryPostorder(T, v): if vСимметричный проход бинарного дерева Алгоритм Inorder(T, v): if vВычисление схемы бинарного дерева x(v) равно количеству узлов, пройденных до обращенияУнифицированная среда прохода дерева Алгоритмы прохо</p><p><span class=Источник

Оцените статью