- •Основные понятия структур
- •Концепция типа данных, простейшие типы данных, стандартные типы данных, органические типы (диапазоны)
- •Статические и полустатические структуры данных
- •2. 1. Массив.
- •2. 2. Запись, записи с вариантами.
- •2. 3. Стек.
- •5. Очередь
- •2. 7. Отображение
- •Динамические структуры данных
- •3.1. Односвязные списки, кольцевой список
- •3. 2. Двусвязный список, кольцевой двусвязный список
- •4. Рекурсивные алгоритмы
- •4. 1. Деревья, бинарные деревья, представление деревьев
- •4. 2. Основные операторы, используемые для работы с деревьями
- •4. 3. Алгоритм создания дерева бинарного поиска
- •4. 4. Прохождение бинарных деревьев
- •1. Прохождение в прямом порядке
- •3. Прохождение в обратном порядке
- •4. 5. Когда рекурсию использовать не нужно
- •4. 6. Рекурсивные программы, примеры
- •5. Поиск
- •5. 1. Линейный поиск
- •5. 2. Двоичный поиск
- •5. 3. Индексно-последовательный поиск
- •5. 3. Поиск в таблице
- •5. 4. Поиск прямой строки
- •Поиск по бинарному дереву
- •Алгоритм кнута, Морриса и Пратта
- •5. 6. Алгоритм Боуера и Мура
- •Сортировка. Необходимые определения и классификация сортировок. Сортировки прямого включения и выбора. Их эффективность Необходимые определения и классификация сортировок.
- •Сортировка методом прямого включения
- •Эффективность алгоритма сортировки прямого включения
- •Сортировка методом прямого выбора
- •Эффективность алгоритма сортировки прямого выбора
- •Сортировка прямого обмена. Её эффективность
- •Эффективность алгоритма сортировки прямого обмена
- •Улучшенные методы сортировки. Быстрая сортировка. Её эффективность.
- •Быстрая сортировка
- •Принцип работы быстрой сортировки
- •Пример работы быстрой сортировки
- •Блок-схема быстрой сортировки
- •Улучшенные методы сортировки. Сортировка шелла. Её эффективность. Сортировка шелла
- •Принцип работы сортировки шелла и необходимые расчёты для её реализации
- •Пример расчёта последовательности расстояний для малых массивов
- •Пример работы сортировки шелла
- •Принцип работы пирамидальной сортировки
- •Пример работы пирамидальной сортировки
- •Представление графов
- •Нахождение кратчайших путей между парами вершин
4. 2. Основные операторы, используемые для работы с деревьями
Ниже приведённые операторы, как правило, используются при реализации деревьев посредством массивов, с использованием списков сыновей, через левых сыновей и правых братьев.
PARENT – это оператор, который возвращает родителя для заданного узла из «дерева». Если заданный узел является корнем, то оператор возвращает условный знак, обозначающий «нулевой узел», что соответствует выходу за пределы «дерева».
LEFTMOST_CHILD – этот оператор используется для определения самого левого сына заданного узла в «дереве». Если заданный узел является листом, то возвращается знак, обозначающий «нулевой узел», так как он не имеет сына.
RIGHT_SIBLING – этот оператор возвращает правого брата заданного узла из «дерева» или знак, обозначающий «нулевой узел», если такого не существует. Для этого находится родитель для заданного узла, а потом и все сыновья найденного родителя, затем среди этих сыновей находится узел, расположенный справа от заданного узла.
LABEL – осуществляет возврат метки заданного узла из «дерева». Для этого необходимо, чтобы на узлах «дерева» были определены метки.
CREATEi – семейство операторов, создающих новый корень с определённой меткой, а далее для этого корня создаёт i сыновей, которые становятся корнями следующих поддеревьев. Эти операторы создают «дерево» с определённым корнем. Если i=0, то будет создан лишь один узел, который является одновременно и корнем, и листом.
ROOT – этот оператор создаёт корень «дерева». Если в «дереве» ещё нет элементов, то возвращается знак, который говорит о том, что «дерево» пустое.
MAKENULL – этот оператор делает заданное «дерево» пустым.
4. 3. Алгоритм создания дерева бинарного поиска
СТР. 70 В. И. ЛОЙКО
4. 4. Прохождение бинарных деревьев
Обсудив возможности рекурсии, вернемся к бинарным деревьям. Алгоритмы, используемые для добавления, исключения и поиска элементов в дереве, зависят не от количества узлов в дереве, а от его глубины, обеспечивая эффективность вычислений.
Рассмотрим задачу: как обойти дерево, отметив каждый узел один раз? Естественный порядок перенумерования элементов линейных списков от начала до конца не может быть применен для бинарных деревьев. Рассмотрим три метода прохождения, которые определяются рекурсивно:
рис. 24 - Прохождение бинарного дерева
1. Прохождение в прямом порядке
- попасть в корень;
- пройти в прямом порядке левое поддерево;
- пройти в прямом порядке правое поддерево.
Для дерева,получим: ABDGJKEHILMCF
2. Прохождение в симметричном порядке http://www.k-press.ru/cs/2000/3/trees/trees.asp
- пройти в симметричном порядке левое поддерево;
- попасть в корень;
- пройти в симметричном порядке правое поддерево.
Обход дерева даст следующую последовательность узлов: JGKDBHELIMACF
3. Прохождение в обратном порядке
- пройти в обратном порядке левое поддерево;
- пройти в обратном порядке правое поддерево;
- попасть в корень.
Обойдя наше дерево, получим: JKGDHLMIEBFCA
Кроме выше указанных процедур приведены следующие процедуры и функции:
процедура включения в стек при нисходящем обходе (Push_st);
функция извлечения из стека при нисходящем обходе (Pop_st);
процедура включения в стек при восходящем и смешанном обходе (S_Push);
функция извлечения из стека при восходящем и смешанном обходе (S_Pop).
Для прошитых деревьев:
функция нахождения сына данного узла ( Inson );
функция нахождения отца данного узла ( Inp );
процедура включения в дерево узла слева от данного (leftIn);