Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Ответы по курсу типы и структуры данных.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
104.45 Кб
Скачать

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. Операции включения и исключения в сбалансированных деревьях.

При включении и исключении элементов из сбалансированного дерева возможны три случая: левое и правое поддеревья становятся неравной высоты, но критерий сбалансированности не нарушается; поддеревья приобретают равную высоту; критерий нарушается и дерево надо перестраивать.

Алгоритм включения и балансировки существенно зависит от способа хранения информации о сбалансированности. Включение состоит из трёх частей: проход по пути поиска (пока не убедится что элемента с таким ключом нет); включение новой вершины и определение показателя её сбалансированности; «отступление» по пути поиска, проверка показателей сбалансированности каждой вершины, балансировка при необходимости.

Удаление элемента из сбалансированного дерева основано на классическом удалении элемента с заменой удаляемой вершины на самого левого потомка из правого поддерева \ самого правого из левого, с дополнением в виде балансировки.

Балансировка состоит только из последовательных переприсваиваний ссылок – ссылки циклически меняются, что приводит к повороту участвующих в балансировке вершин. В результате дерево как бы «поворачивается», в результате чего может измениться вся его структура.