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