Upgrade to Pro — share decks privately, control downloads, hide ads and more …

САКОД – 2 курс весна 2021 – 5.2 занятие

САКОД – 2 курс весна 2021 – 5.2 занятие

ТиМПИ

March 23, 2021
Tweet

More Decks by ТиМПИ

Other Decks in Programming

Transcript

  1. 23 марта 2021 [email protected], [email protected] Федор Витальевич Бушмелев, Максим Викторович

    Абрамов Деревья с произвольным числом сыновей у каждого узла
  2. 3/16 3/16 Определение дерева Рис. 1 Пример дерева 1 Рис.

    2 Пример дерева 2 Рис. 3 Пример дерева 3 Рис. 4 Пример НЕ дерева Дерево — это связный ациклический (ориентированный) граф.
  3. 4/16 4/16 Корневое дерево Корневое дерево – дерево с отмеченной

    вершиной. Обычно, предполагается, что дерево имеет корень. Дерево без выделенного корня называется свободным. Рис. 5 Пример корневого ориентированного дерева Рис. 6 Пример корневого дерева, полученного из дерева на Рис.3
  4. 6/16 6/16 Применимость и свойства деревьев Применимость деревьев: • файловая

    система; • социальная иерархия в обществе / структурах / компаниях / армии и т.д.; • математические формулы; • структура / разметка HTML страниц сайтов (HTML DOM); • деревья решений, например в играх; • разметка текстов; • и т.д. Свойства деревьев: • степень вершины — количество инцидентных ей ребер; • концевой узел (лист, терминальная вершина) — узел со степенью 1; • узел ветвления — неконцевой узел; • центроид — вершина, при удалении которой размеры получившихся компонент связности не превышают половины размера исходного дерева; • Уровень узла n - это число ветвей в пути от корня до n (по определению, уровень корня – нулевой). • дерево не имеет кратных рёбер и петель; • любое дерево с n вершинами содержит n-1 ребро; • граф является деревом тогда и только тогда, когда любые две различные его вершины можно соединить единственной простой цепью; • любое дерево является двудольным графом; • для любых трёх вершин дерева, пути между парами этих вершин имеют ровно одну общую вершину.
  5. 7/16 7/16 Разметка деревьев и представление Рис. 8 Дерево с

    помеченными вершинами Список ребер: [(0, 1), (1, 3), (1, 4), (3, 2), (3, 6), (3, 7), (4, 5), (4, 8), (6, 9)] Список смежности: 0 -> [1] 1 -> [0, 3, 4] 2 -> [3] 3 -> [1, 2, 6, 7] 4 -> [1, 5, 8] 5 -> [4] 6 -> [3, 9] 7 -> [3] 8 -> [4] 9 -> [6] Матрица смежности:
  6. 8/16 8/16 Разметка деревьев и представление Рис. 9 Ориентированное дерево

    с помеченными вершинами Рис. 10 Организация структуры дерева при помощи описания класса и указателей Рис. 11 Реализация узла такого дерева через шаблонный класс
  7. 9/16 9/16 Включение для деревьев Рис. 12 Включение нового узла

    в ориентированное дерево с помеченными вершинами Рис. 13 Пример реализации включения вершины в дерево
  8. 10/16 10/16 Исключение из деревьев Рис. 14 Исключение узла в

    ориентированном дереве с помеченными вершинами Рис. 15 Пример реализации исключения вершины из дерева
  9. 11/16 11/16 Поиск по дереву в глубину (DFS) Рис. 17

    Дерево с помеченными вершинами Рис. 16 Варианты реализации поиска в глубину: красный – прямой поиск; зеленый – центрированный; синий – обратный. Для дерева на Рис.17 • Прямой поиск: 0-1-3-2-6-9-7-4-8-5 • Центрированный поиск: 2-9-6-3-7-1-8-4-5-0 • Обратный поиск: 2-9-6-7-3-8-5-4-1-0
  10. 12/16 12/16 Поиск по дереву в ширину (BFS) Рис. 19

    Дерево с помеченными вершинами Рис. 18 Алгоритм поиска в ширину на примере. Итеративно посещаем всех братьев i-го уровня. Для дерева на Рис.19 поиск в ширину: 0-1-3-4-2-6-7-8-5-9
  11. 13/16 13/16 Центр дерева Диаметр дерева (d)— максимальная длина (в

    рёбрах) кратчайшего пути в дереве между любыми двумя вершинами. ൯ 𝑑 = max 𝑢,𝑣∈𝑉 𝑑𝑖𝑠𝑡(𝑢, 𝑣 Эксцентриситет вершины e(v) Радиус (r(T))— наименьший из эксцентриситетов вершин дерева. Центральная вершина — вершина дерева, такая что e(v)=r(T). Центр дерева — множество всех центральных вершин дерева. ቁ = max 𝑢∈𝑉 𝑑𝑖𝑠𝑡(𝑢, 𝑣
  12. 14/16 14/16 Центр дерева Алгоритм №1 1. Пройдёмся по дереву

    обходом в глубину и пометим степень каждого узла. 2. Обрежем (пометим (0)) вершины помеченные (1). 3. Переход к пункту 1) и будем повторять, пока на текущей глубине не окажется не более двух листьев, и при этом в дереве будет тоже не более двух листьев. Оставшиеся листья являются центром дерева. Алгоритм №2 1. Находим диаметральный путь дерева. 2. Множество узлов лежащих в центре этого пути – центр дерева.
  13. 15/16 15/16 Куча • Куча — это специализированная структура данных

    типа дерево, которая удовлетворяет свойству кучи: если B является узлом-потомком узла A, то ключ(A) ≥ ключ(B). • Наибольший элемент – корень кучи (max- кучи, существуют min-кучи). • Обычно реализуются в виде массивов. Основные операции над кучей: • найти максимум (минимум) соответственно; • удалить корень, т.е. максимум или удалить минимум соответственно; • обновить ключ элемента кучи; • добавление нового ключа в кучу; • слияние двух куч с целью создания новой кучи. Применение: • Пирамидальная сортировка. • Алгоритмы поиска: при использовании кучи поиск минимума, максимума, медианы или k-го наибольшего элемента может быть сделан за линейное время. • Алгоритмы на графах: применение кучи в качестве структуры данных для внутреннего обхода даёт сокращение времени выполнения на полиномиальный порядок.
  14. 23 марта 2021 [email protected], [email protected] Федор Витальевич Бушмелев, Максим Викторович

    Абрамов Деревья с произвольным числом сыновей у каждого узла