Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемСтепан Янюшин
1 Деревья и их представление в STL Презентацию подготовила Чиркова Ольга, 2 подгруппа, группа 271ПИ
2 Что такое дерево? Дерево – это структура данных, позволяющая выполнять операции вставки, удаления, поиска элементов за нелинейное время
3 Только одна вершина дерева не имеет предков – корень. Все вершины, кроме корня, имеют единственного предка. Вершины, не имеющие детей – листья. Высота дерева – наибольшее число вершин от листа до корня. Из любой вершины можно добраться до корня, последовательно перебираясь от одной вершины к ее предку, единственным путем. Основные понятия:
4 Примеры деревьев: Файловая система; Иерархия в организациях (начальник - подчиненные); Генеалогическое дерево.
5 По максимальному количеству детей каждой вершины деревья делятся на: Деревья (в общем) Вершины имеют любое количество потомков М-арные деревья Вершины имеют строго ограниченное количество потомков (бинарные, тернарные деревья)
6 Двоичные деревья Двоичное дерево – это M-арное дерево, у которого M=2. Куча (heap) – дерево, содержащее элементы либо в порядке убывания, либо в порядке возрастания.
7 Кучи Max-heap Значение в любой вершине больше, чем значения ее потомков Min-heap Значение в любой вершине меньше, чем значения ее потомков
8 Деревья двоичного поиска Дерево двоичного поиска – это двоичное дерево, с каждым из узлов которого связан ключ, причем: у всех узлов правого поддерева произвольного узла n значение ключей не меньше, нежели значения ключа узла n. у всех узлов левого поддерева произвольного узла n значение ключей меньше, нежели значения ключа узла n.
9 Несбалансированные деревья бинарного поиска (unbalanced) Это такие деревья, высота правого и левого поддеревьев которых отличаются более, чем на 1. Дерево двоичного поиска становится несбалансированным, когда в него постоянно добавляются элементы большего или меньшего размера
10 Неполные деревья двоичного поиска (incomplete) Каждый узел дерева двоичного поиска должен содержать более 2 детей. Но он может иметь 1 или не иметь детей. Если в дереве есть такие хотя бы один такой узел, дерево называют неполным.
11 Использование деревьев двоичного поиска Дерево двоичного поиска может быть использовано для реализации таких абстракций, как множество, словарь (набор соответствий "ключ-значение"), очередь с приоритетами и так далее.
12 Использование деревьев двоичного поиска Далее рассмотрим контейнеры STL, основанные на деревьях и приведем примеры работы с ними. Ассоциативные контейнеры обеспечивают быстрый доступ к данным за счет того, что они, как правило, построены на основе сбалансированных деревьев поиска.
13 Использование деревьев двоичного поиска Пояснения на следующем слайде
14 Поиск значений в двоичном дереве поиска реализован рекурсивно. Процедура принимает на вход вершину. Сравнивает ее значение с искомым: в случае равенства, искомое значение найдено, иначе – рекурсивно перемещаемся в корень соответствующего поддерева: либо большего, либо меньшего. Если же нужного поддерева нет, то искомое значение не содержится в дереве. Использование деревьев двоичного поиска
15 Использование STL Множество (set) Множество (set) – это ассоциативный контейнер, содержащий только значения ключей. Значения ключей уникальны. Повторяющиеся элементы не заносятся в множество. Элементы множества хранятся отсортированными
16 Работа со множествами Объявление объектов класса set: Добавление элементов во множество с помощью функции insert
17 Работа с множествами Узнаем количество элементов множества с помощью функции size: Поиск элемента множества, с помощью функции find:
18 Алгоритмы работы с множествами Ассоциативные контейнеры могут использоваться в сочетании c алгоритмами работы со множествами.
19 Алгоритмы работы со множествами (STL) АлгоритмВыполняемая функция set_intersectionСоздает отсортированное перечисление множеств (то есть множество, содержащее только элементы, входящие и в первое, и во второе множество) set_unionСоздает отсортированное объединение множеств (то есть множество, содержащее элементы первого и второго множества без повторов) set_differenceСоздает отсортированную последовательность элементов, входящих только в первую из двух последовательностей. set_symmetric_ difference Создает отсортированную последовательность элементов, входящих только в одну из двух последовательностей. Результирующая последовательность не должна перекрываться ни с одной из исходных
20 Пример использования алгоритмов работы со множествами
21 Использование STL Словарь (map) Словарь map – это ассоциативный массив, построенный на основе пар значений: - ключ для идентификации элемента - собственно элемент Значения ключей уникальны (кроме multimap) Элементы в словаре хранятся отсортированными
22 Работа со словарем Объявление объектов класса map: Вставка элементов с помощью функции insert
23 Работа со словарем Более быстрый способ вставки элемента с помощью операции [ ] : Доступ к элементам по ключу с помощью операции [ ]: Просмотр элеметов с помощью итератеров
24 В очереди с приоритетами каждому элементу соответствует приоритет, определяющий порядок выборки из очереди. По умолчанию он определяется с помощью операции
25 Пример использования очереди с приоритетами
26 Библиотека STL позволяет в качестве функций сравнения использовать пользовательские функции либо классы.
27 Использование контейнеров + : Использование контейнеров позволяет значительно повысить надежность программ, их переносимость и универсальность, а также уменьшить сроки их разработки. - : Снижение быстродействия в некоторых случаях может быть весьма значительным. Для эффективного использования необходимо затратить достаточно времени на освоение библиотеки.
28 Стандартные классы просто так в состав С++ не добавляются. Г. Шилдт
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.