
- •Полустатические структуры данных
- •4.1. Характерные особенности полустатических структур
- •4.2. Строки
- •4.2.1. Логическая структура строки
- •4.2.2. Операции над строками
- •4.2.3. Представление строк в памяти
- •Динамические структуры данных. Связные списки
- •5.1. Связное представление данных в памяти
- •5.2. Стеки
- •5.2.1. Логическая структура стека
- •5.2.2. Машинное представление стека и реализация операций
- •5.2.3. Стеки в вычислительных системах
- •5.3. Очереди fifo
- •5.3.1. Логическая структура очереди
- •5.3.2. Машинное представление очереди fifo и реализация операций
- •5.3.3. Очереди с приоритетами
- •5.3.4. Очереди в вычислительных системах
- •5.4. Деки
- •5.4.1. Логическая структура дека
- •5.4.2. Деки в вычислительных системах
- •5.5. Связные линейные списки
- •5.5.1. Машинное представление связных линейных списков
- •5.5.2. Реализация операций над связными линейными списками
- •5.5.3. Применение линейных списков
- •5.6 Мультисписки
- •5.7. Нелинейные разветвленные списки
- •5.7.1. Основные понятия
- •5.7.2. Представление списковых структур в памяти
- •5.7.3. Операции обработки списков
- •5.8. Управление динамически выделяемой памятью
- •6. Деревья
- •6.1. Бинарные деревья
- •6.2. “Прошитые” деревья
- •6.3. Графы
- •6.4. Алгоритмы поиска путей в графе
- •6.4.1. Путь с минимальным количеством промежуточных вершин (волновой алгоритм)
- •6.4.2. Путь минимальной суммарной длины во взвешенном графе с неотрицательными весами (алгоритм Дейкстры)
- •6.4.3. Путь минимальной суммарной длины во взвешенном графе с произвольными весами для всех пар вершин (алгоритм Флойда)
- •6.4.4. НахождениеKпутей минимальной суммарной длины во взвешенном графе с неотрицательными весами (алгоритм Йена)
- •7. Классы и объекты
- •8. Рекурсия
- •8.1. Некоторые задачи, где можно применить рекурсию
- •8.2. Использование рекурсии в графике
- •8.2.1. Кривые Гильберта
- •8.2.2. Кривые Серпинского
- •9. Алгоритмы Сжатия информации
- •9.1. Что такое архивирование и зачем оно нужно
- •9.2. Терминология
- •9.3. Методы кодирования
- •9.4. Модели входного потока
- •9.5. Моделирование и энтропия
- •9.6. Адаптированные и неадаптированные модели
- •9.7. Алгоритмы архивации данных
- •9.8. Сжатие способом кодирования серий (rle)
- •9.9. Алгоритм Хаффмана
- •9.10. Арифметическое кодирование
- •9.11. Алгоритм Лемпеля-Зива-Велча (Lempel-Ziv-Welch - lzw)
- •9.11.1. Двухступенчатое кодирование. Алгоритм Лемпеля-Зива
- •Библиографический Список
- •Оглавление
6. Деревья
Теперь обратимся к изучению деревьев, наиболее важных нелинейных структур, встречающихся в вычислительных алгоритмах. Грубо говоря, структура дерева означает "разветвление", такое отношение между "узлами", как и в обычных деревьях.
Дерево - одна из самых распространенных структур, используемых для представления данных в ЭВМ. А вообще, дерево - конечное множество, состоящее из одного или более элементов, называемых узлами.
Между узлами существует отношение типа "исходный-порождённый". Корень - узел, не имеющий исходного (отца). Все узлы, кроме корня, имеют только один исходный (исх.отца). Есть деревья, состоящие из одного корня. Каждый узел может иметь несколько порождённых (сыновей). Отношение "исходный-порождённый" действует только так: не бывает отношения "порождённый-исходный", т.к потомок узла никогда не станет его предком.
Сетевые структуры широко применяются при организации банков данных, систем управления базами данных, в системах программного имитационного моделирования сложных комплексов и т.д. Особое значение сетевые структуры приобрели в системах искусственного интеллекта, в которых они адекватно отражают логику организации данных и сложные отношения, возникающие в таких системах между различными элементами данных. В этих системах сетевые структуры применяются для построения семантических сетей, фреймов и других логических конструкций, необходимых для представления знаний, образования понятий и осуществления логических выводов.
Сетевые структуры – весьма общий и гибкий класс связных списков. Рассмотрим частные случаи многосвязных списков – древовидные структуры, или просто деревья.
Различное представление деревьев показано на рис. 6.1.
А))
В
С
Корни у деревьев могут располагаться в разных местах. Могут вверх (рис.6.1,а), могут вниз (рис. 6.1,в), могут слева или справа (рис. 6.1,с).
Определим формально дерево как конечное множество Т, состоящее из одного или более узлов, таких, что
а) имеется один специально обозначенный узел, называемый корнем данного дерева,
б)остальные узлы (исключая корень) содержатся в m0 попарно непересекающихся множествах Т1, …, Тm, каждое из которых в свою очередь является деревом. Деревья Т1, …, Тm называются поддеревьями данного корня.
Из определения следует, что каждый узел дерева является корнем некоторого поддерева, которое содержится в этом дереве. Число поддеревьев данного узла называется степенью этого узла. Узел с нулевой степенью называется концевым узлом; иногда его называют листом. Неконцевые узлы часто называют узлами разветвления. Уровень узла по отношению к дереву Т определяется следующим образом: говорят, что корень имеет уровень 1, а другие узлы имеют уровень на 1 выше их уровня относительно содержащего их поддерева Тj этого корня.
Если в пункте б) определения имеет значение относительный порядок поддеревьев Т1, …, Тm, то говорят, что дерево является упорядоченным. Если два дерева, отличающиеся друг от друга только относительным порядком поддеревьев узлов, не считать различными, то в этом случае говорят, что дерево является ориентированным, поскольку здесь имеет значение только относительная ориентация узла, а не их порядок.
Лес – это множество (обычно упорядоченное), состоящее из некоторого (быть может равного нулю) числа непересекающихся деревьев. Пункт б) определения дерева можно сформулировать иначе, сказав, что узлы дерева, за исключением корня, образуют лес.
Деревья, как правило, дают хорошее представление о структуре отношения между элементами данных.
Рис. 6.2. Представление графа в форме многосвязного списка
Обычно дерево представляется в машинной памяти в форме многосвязного списка, в котором каждый указатель соответствует дуге. Это представление называется естественным представлением дерева. Существуют несколько разновидностей такого представления. В одной из наиболее общих разновидностей каждому узлу дерева ставится в соответствие элемент многосвязного списка, причем в каждом элементе отводятся следующие поля: поле данных, поле степени исхода (т.е. числа сыновей) и поля указателей, число которых равно степени исхода. На рисунке дан пример дерева и представление этого дерева в виде многосвязного списка, начало которого, соответствующее корню дерева, адресуется указателем Р. Предполагается, что этот указатель входит в дескриптор, содержащий и другую общую информацию о списке (например, число элементов). Обозначения А, В, С, D, E, F, записанные в первом поле каждого элемента списка, представляют собой данные о соответствующих узлах дерева.
В некоторых случаях используется и последовательное представление деревьев в памяти. Такой способ может быть рекомендован, например, в случае постоянства или редкой изменчивости структуры дерева.