
- •1. Общая классификация структур.
- •4. Стек. Доступ к элементу стека, адресация элемента. Алгоритмы исключения и включения элемента стека. Варианты конкретной реализации стека.
- •5. Очереди. Алгоритмы включения, исключения элемента и очистки очереди. Конкретная реализация очереди.
- •10. Разреженные матрицы, примеры их использования. Методы обработки разреженных матриц.
- •11. Деревья. Виды деревьев и способы их представления.
- •12. Двоичные деревья. Обход двоичных деревьев. Двоичные деревья поиска (ддп). Алгоритмы поиска в ддп.
- •15. Матричное и списковое представление графов.
- •16. Поиск путей в графах. Алгоритм поиска в глубину. Алгоритм поиска в ширину.
- •17. Алгоритм построения каркасов в графе.
- •18. Пути в графах. Алгоритм поиска Эйлерова и Гамильтонова пути в графе.
10. Разреженные матрицы, примеры их использования. Методы обработки разреженных матриц.
Число ненулевых элементов в матрице порядка n может выражаться как n^(1+g), g<=1. При g<=0,2..0,5 матрица считается разреженность. Алгоритмы обработки разреженных матриц предусматривают действия только с ненулевыми элементами.
Разреженные матрицы можно хранить в виде линейного связного списка, кольцевым списком, двунаправленным стеком или очередью; если матрица симметрична, то можно хранить её часть.
Одна из схем: хранить в массиве AN в произвольном порядке ненулевые элементы, индексы их строк и столбцов в массивах I и J; номер (из массива AN) следующего ненулевого элемента, расположенного в матрице по строке (NR) и по столбцу (NC), а также указатели для входа в строку JR и указатели для входа в столбец JC. Данная схема хранения избыточна, но позволяет легко осуществлять любые операции с элементами.
Наиболее часто используется схема разреженного строчного формата. Значения ненулевых элементов хранятся в массиве AN, их столбцовые индексы в массиве JA. Используется массив указателей IA, отмечающих позиции AN и JA, с которых начинается описание очередной строки. Дополнительная компонента в IA содержит указатель первой свободной позиции в JA и AN.
11. Деревья. Виды деревьев и способы их представления.
Дерево – нелинейная структура данных, используемая при представлении иерархических связей между элементами, имеющих отношения «один ко многим». Совокупность элементов (узлов) и отношений между ними, образующих иерархическую структуру узлов.
Представлять деревья можно в виде вложенных множеств; скобочным образом; отступами; графом; таблицей. В памяти деревья представляются в виде курсоров на родителей; связного списка сыновей; структуры данных.
Упорядоченное дерево – все ветви, исходящие из одной вершины, упорядочены. Позиционное дерево – дети любой вершины помечены номерами от 1 до к. Полное к-ичное дерево – все листья имеют одинаковую глубину, а все внутренние вершины – степень к. Если каждая вершина имеет не более двух потомков, то дерево называют двоичным.
В идеально сбалансированном дереве количество вершин в левом и правом поддеревьях отличается не более чем на 1.
12. Двоичные деревья. Обход двоичных деревьев. Двоичные деревья поиска (ддп). Алгоритмы поиска в ддп.
Двоичное дерево – конечный набор элементов, являющихся узлами дерева, такой что Т – пустое или нулевое дерево, либо Т состоит из корня с двумя отдельными двоичными деревьями.
Обход двоичного дерева: префиксный (сверху вниз), инфиксный (слева направо), постфиксный (снизу вверх).
В двоичном дереве поиска каждая вершина имеет значение, которое больше значения любой из вершин его левого поддерева и меньше значения любой из вершин правого. Алгоритм поиска в ДДП может быть реализован как с помощью рекурсии, так и с помощью итерации.
Дано: дерево Т и ключ K, Задача: проверить, есть ли узел с ключом K в дереве Т, и если да, то вернуть ссылку на этот узел.
Алгоритм:
• Если дерево пусто, сообщить, что узел не найден, и остановиться.
• Сравнить K со значением ключа корневого узла X.
• Если K=X, выдать ссылку на этот узел и остановиться.
• Если K>X, рекурсивно искать ключ K в правом поддереве Т.
• Если K<X, рекурсивно искать ключ K в левом поддереве Т.
13. Сбалансированные деревья.
АВЛ-дерево – сбалансированное, двоичное дерево, для каждого узла которого высота двух поддеревьев отличается не более чем на 1. В идеально сбалансированном дереве число вершин в левом и правом поддереве отличается не более чем на единицу.
14. Операции включения и исключения в сбалансированных деревьях.
При включении и исключении элементов из сбалансированного дерева возможны три случая: левое и правое поддеревья становятся неравной высоты, но критерий сбалансированности не нарушается; поддеревья приобретают равную высоту; критерий нарушается и дерево надо перестраивать.
Алгоритм включения и балансировки существенно зависит от способа хранения информации о сбалансированности. Включение состоит из трёх частей: проход по пути поиска (пока не убедится что элемента с таким ключом нет); включение новой вершины и определение показателя её сбалансированности; «отступление» по пути поиска, проверка показателей сбалансированности каждой вершины, балансировка при необходимости.
Удаление элемента из сбалансированного дерева основано на классическом удалении элемента с заменой удаляемой вершины на самого левого потомка из правого поддерева \ самого правого из левого, с дополнением в виде балансировки.
Балансировка состоит только из последовательных переприсваиваний ссылок – ссылки циклически меняются, что приводит к повороту участвующих в балансировке вершин. В результате дерево как бы «поворачивается», в результате чего может измениться вся его структура.