Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Классы коллекций для практики.doc
Скачиваний:
9
Добавлен:
05.11.2018
Размер:
397.31 Кб
Скачать

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

Н

а рис. 4.1 показано, что нелинейные коллекции разделяются на иерархические и групповые структуры. Иерархическая коллекция (hierarchical collection) – это масса элементов, которые разделяются по уровням. Элементы на данном уровне могут иметь несколько наследников на следующем уровне. Мы вводим особую иерархическую коллекцию, называемую деревом (tree), в которой все элементы данных происходят из одного источника, называемого корнем, (root). Элементы в дереве называются узлами (nodes), каждый из которых указывает на нисходящие узлы, называемые детьми (children). Каждый элемент, за исключением корня, имеет единственного предка. Пути вниз по дереву начинаются в корне и развиваются по направлению к нижним уровням от родителя к ребенку.

Дерево является идеальной структурой для описания файловой системы с каталогами и подкаталогами. Модель для дерева – это организационная схема в бизнесе, определяющая цепочку управления, начиная с босса (СЕО, президента), и далее – к вице-президентам, супервайзерам и так далее.

Особая форма дерева – в котором каждый узел имеет самое большее два потомка. Такая структура, бинарное дерево (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-дерева наиболее часто реализуется очередь приоритетов.

Коллекции групп

Г

руппа (group) представляет те нелинейные коллекции, которые содержат элементы без какого-либо упорядочения. Множество уникальных элементов является примером группы. Операции над коллекцией типа множество включают объединение (union) и пересечение (intersection). Другие операции над множеством тестируются на членство и отношение подмножеств.

Далее вводится класс Set с перегрузкой операторов для реализации операций над множествами.

Коллекция Set

Данные

Неупорядоченная коллекция объектов без дубликатов.

Операции

Бинарные операции членства, объединения, пересечения и дифференциации, которые возвращают новое множество. Ряд. операторов, тестирующих отношения подмножеств.

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

Г

раф (
graph) – это структура данных, задающая набор вершин и набор связей, соединяющих вершины. Графы находят применение в планировании заданий, транспортировании и так далее. Например, строитель дома должен заключать контракты на этапы строительной работы. План работы должен быть составлен так, чтобы обеспечить выполнение всей подготовительной работы к моменту, когда начнется новый этап строительства. Например, кровельщики не могут начать свою работу, пока строители не завершат работу по сооружению дома, а строительные работы не могут быть выполнены, пока не будет заложен бетонный фундамент.

Коллекция Graph

Данные

Набор вершин и набор соединительных связей.

Операции

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

С

еть (network) – это особая форма графа, которая присваивает вес каждой связи. Вес указывает стоимость использования связи при прохождении графа. Например, в следующей сети вершины представляют города, а вес, присваиваемый связям, – это расстояния между парами городов.