4.2. Описание нелинейных коллекций
Н

Дерево является идеальной структурой для описания файловой системы с каталогами и подкаталогами. Модель для дерева – это организационная схема в бизнесе, определяющая цепочку управления, начиная с босса (СЕО, президента), и далее – к вице-президентам, супервайзерам и так далее.
Особая форма дерева – в котором каждый узел имеет самое большее два потомка. Такая структура, бинарное дерево (binary tree), имеет важное применение в оценке арифметических выражений и в теории компиляции. С дополнительным упорядочением дерево становится деревом бинарного поиска (binary search tree), которое эффективно сохраняет большие объемы данных. Деревья бинарного поиска обеспечивают быстрый доступ к элементам, располагая узлы так, что данные можно находить, перемещаясь вниз по короткому пути из корневого узла. На рис. 4.4 показано дерево с 16 узлами. Самый длинный путь от корня к узлу включает четыре ветви. Предположим, что дерево относительно заполнено узлами, отношение узлов к длине пути значительно улучшается по мере того, как мы увеличиваем размер дерева. Пример: если дерево бинарного поиска имеет 220 – 1 = 1 048 575 узлов, которые расположены на минимальном количестве уровней, то элемент данных можно найти, посещая не более, чем 20 узлов. Особое дерево бинарного поиска – это AVL-дерево, гарантирующее равномерное распределение узлов и обеспечивающее очень короткое время поиска.

Коллекция Tree
Данные
Иерархическая коллекция узлов, происходящих из корня. Каждый узел указывает на узлы-сыновья, которые сами являются корнями поддеревьев.
Операции
Структура дерева позволяет добавлять и удалять узлы. Несмотря на то, что дерево – это нелинейная структура, алгоритмы прохождения деревьев позволяют посещать отдельные узлы и осуществлять поиск ключа.
Heap-дерево – это особая версия дерева, в котором самый маленький элемент всегда занимает корневой узел. Операция delete удаляет корневой узел, и обе операции insert и delete вызывают такую реорганизацию дерева, что самый маленький элемент вновь занимает корень такого дерева. Heap-дерево использует очень эффективные алгоритмы реорганизации, просматривая только короткие пути от корня вниз к концу дерева. Heap-дерево может использоваться для упорядочения списка элементов. Вместо использования медленных алгоритмов сортировки мы упорядочиваем их, повторно удаляя корневой узел из heap-дерева. Это позволяет получить быструю сортировку (heap-сортировку). Кроме того, при использовании heap-дерева наиболее часто реализуется очередь приоритетов.
Коллекции групп
Г

Далее вводится класс Set с перегрузкой операторов для реализации операций над множествами.
Коллекция Set
Данные
Неупорядоченная коллекция объектов без дубликатов.
Операции
Бинарные операции членства, объединения, пересечения и дифференциации, которые возвращают новое множество. Ряд. операторов, тестирующих отношения подмножеств.
Множество (set) – это коллекция, находящая применение, когда данные являются неупорядоченными и каждый элемент данных является единственным в своем роде, уникальным. Например, группа регистрации избирателей составляет банк телефонных номеров для того, чтобы звонить лицам, находящимся в списке. Каждый раз, когда группа контактирует с человеком из банка номеров, его имя помещается в список номеров, по которым позвонили, и удаляется из банка. Конечно, группа людей, которым еще не позвонили, тоже является множеством. Группа регистрации избирателей продолжает звонить, пока множество номеров, по которым не позвонили, не будет пустым, или не будет сделано разумное количество попыток позвонить.
Г

Коллекция Graph
Данные
Набор вершин и набор соединительных связей.
Операции
Как коллекция вершин и связей граф имеет операции для добавления и удаления этих элементов. Алгоритмы просмотра начинаются в заданной вершине и находят все другие вершины, которые достижимы из начальных вершин. Другие алгоритмы просмотра выполняют оба просмотра графа – в глубину и в ширину.
С

