
- •Предмет изучения дисциплины "Структуры и алгоритмы обработки данных на эвм". Абстрактные типы данных. Классификация структур данных.
- •Хеширование. Хеш-функции. Коллизии и методы их устранения. Сферы применения хеширования, достоинства метода.
- •Деревья: поисковое дерево, идеально - сбалансированное дерево, сбалансированное поисковое дерево, в-дерево. Рекурсивные методы прохождения деревьев. Алгоритмы построения деревьев.
- •Сферы применения графов. Способы машинного представления графов, их достоинства и недостатки.
- •Алгоритмы поиска в графе: поиск в ширину, поиск в глубину.
- •Эйлеров путь, эйлеров цикл, эйлеров граф. Алгоритм нахождения эйлерова цикла.
- •Нахождение кратчайших расстояний. Алгоритм Дейкстры.
- •Алгоритмы с возвратом.
- •Алгоритм нахождения гамильтоновых циклов в графе.
- •Метод ветвей и границ.
- •Остовные деревья графа. Алгоритмы нахождения дерева минимального веса: алгоритм Прима, алгоритм Крускала.
- •Эффективность алгоритмов и её составляющие. Алгоритмы и их сложность. Доминирование. О-функции и их особенности.
- •Правила для определения сложности. Функции, часто используемые для оценки сложности алгоритмов (список функционального доминирования). Сравнение алгоритмов с различными порядками сложности.
- •Анализ алгоритмов и определение их сложности по управляющим структурам. Контрольные замеры. Критический взгляд на о-анализ. (ограниченность о-анализа).
- •Полиномиальные алгоритмы и труднорешаемые задачи. Два аспекта труднорешаемости задач. Недетерминированное вычисление и класс np.
- •Теория np-полных задач. Структура класса np.
- •Методы решения np-полных задач. Применение теории np-полноты для анализа задач.
Деревья: поисковое дерево, идеально - сбалансированное дерево, сбалансированное поисковое дерево, в-дерево. Рекурсивные методы прохождения деревьев. Алгоритмы построения деревьев.
Деревья – нелинейная структура, которая состоит из узлов и ветвей и имеет направлением от единственного начального узла, называемого корнем к внешним узлам, называемым листьями. Каждый узел дерева является корнем поддерева, который определяется данным узлом и всеми потомками этого узла. Прохождение от родительского узла к его дочернему дереву и его потомкам осуществляется вдоль путей. Путь от корня к узлу дает меру, называемую уровнем узла. Уровень узла – длина пути от корня к этому узлу. Глубина дерева – максимальный уровень любого его узла.
Выделим виды рассматриваемых деревьев: 1. Бинарные (идеально сбалансированные, поисковые, сбалансировано-поисковые) 2. Сильноветвящиеся (Б-дерево).
Бинарные деревья – упорядоченные деревья второй степени. Это такое множество узлов B, что это множество – дерево, если множество узлов пусто. B разбивается на три пересекающихся подмножества. D – коневой узел {l1, l2,…,} – левое поддерево, {r1,r2…} – правое поддерево. Бинарное дерево является рекурсивной структурой, т.к. каждый узел – это корень своего собственного поддерева, у которого в свою очередь есть потомки. Процедуры обработки деревьев тоже рекурсивны. На любом уровне n бинарное дерево может содержать от 1 до 2^n узлов. Число узлов, приходящееся на уровень, является показателем плотности дерева. Крайними мерами плотности дерева являются с одной стороны – вырожденное дерево (у которого есть 1 лист и, каждый листовой узел имеет только одного сына), с другой стороны – это законченное и полное дерево. Законченные бинарное дерево на каждом уровне о..n-1 имеет полный набор вершин, а все листья уровня n расположены слева. Законченное бинарное дерево, содержащее 2^n узлов на уровне n является полным. ∑ узлов = 2^(n+1)-1. Двоичные деревья часто используются для представления множества данных, среди которых идет поиск по уникальному ключу. Структура дерева построена из узлов, соответственно узел дерева содержит поле с данными и два указателя: на левый и на правый. Left|data|right------Null|data|Null.
Корневой узел определяет входную точку дерева, а поле указателя – узел следующего уровня. Листовой узел содержит нулевое значение в поле правого и левого указателя.
Рекурсивные методы прохождения деревьев.
Рекурсивные определения бинарного дерева определяет эту структуру как корень с двумя поддеревьями, сила рекурсии проявляется вместе с методами прохождения. Каждый алгоритм прохождения дерева выполняет в узле 3 действия:
заходит (посещает) узел;
рекурсивно спускается по левому поддереву;
рекурсивно спускается по правому поддереву;
Спустившись по дереву, алгоритм определяет, что он находится в узле и может выполнить те же 3 действия. Спуск прекращается по достижению пустого дерева.
Различные алгоритмы рекурсивного прохождения отличаются порядком, в котором они выполняют свои действия в узле.
Рассмотрим прямой, симметричный и обратный методы прохождения.
Прямой метод прохождения определяется посещением узла в первую очередь и последующим прохождением сначала левого, а потом правого поддерева.
(посещение узла) N
(прохождение левого поддерева) L
(прохождение правого поддерева) R
Симметричный метод прохождения начинает свои действия в узле спуском по его левому поддереву, затем обработка данных в узле, и рекурсивное прохождение правого поддерева.
L
N
R
При обратном прохождении посещение узла откладывается до тез пор, пока не будут рекурсивно пройдены оба его поддерева, порядок операций следующий:
L (рекурсивное прохождение левого поддерева)
R (рекурсивное прохождение правого поддерева)
N (посещение узла)
В каждом случае сначала осуществлялось прохождение по левому поддереву, а потом по правому. Фактически, существуют еще 3 алгоритма, которые выбирают сначала правое поддерево, а потом левое.
Бинарные деревья. Идеально сбалансированное дерево.
Пусть дано n элементов, из которых можно построить дерево минимальной глубины. Минимальная высота при заданном числе вершин достигается, если на всех уровнях кроме последнего помещается максимально возможное число вершин. Этого легко добиться размещая приходящие вершины поровну слева и справа от каждой вершины.
Дерево называется идеально сбалансированным, если число вершин его левых и правых поддеревьев отличается не более чем на единицу.
Алгоритм построения:
Взять одну вершину в качестве корня;
Тем же способом построить левое поддерево с количеством вершин nl = n div 2;
Тем же способом построить правое поддерево nr = n – nl – 1;
Заполнение идеально сбалансированного дерева осуществляется согласно прямого метода прохождения, т.е. элементы заносятся в следующем порядке:
первый элемент становится корнем
заполняется левое поддерево
заполняется правое поддерево
Бинарное дерево поиска (Бинарное дерево)
Рассмотрим структуру бинарного дерева, которая позволяет обеспечить эффективный доступ к элементам. Эта структура, называемая бинарным деревом поиска, упорядочивает элементы посредством оператора отношения. Чтобы сравнить узлы дерева , мы подразумеваем, что часть или все поле данных определено в качестве ключа, и оператор сравнивает ключи, когда размещают элемент на дереве.
Бинарное дерево стоится по правилу: для каждого узла значение данных в левом поддереве меньше, чем в этом узле, а в правом поддереве – больше или равно.
Сильно ветвящиеся В-деревья.
Для некоторый приложений нужны деревья имеющие вершины со многими ветвями. Практической областью применения сильно ветвящихся деревьев является формирование и поддержание крупномасштабных деревьев поиска, но для которых не хватает оперативной памяти. В этом случае вершины дерева хранятся во вторичной памяти и ссылки представляют с собой адреса на внешнем ЗУ а не в оперативной памяти. Поскольку в этом случае каждый шаг включает обращение к внешнему ЗУ, то желательно организация памяти, требующего меньшего числа обращения. Для этого предполагается, что дерево разбито на поддеревья, и каждый шаг предполагает обращение к целой группе элементов, которому одновременно доступны. Такие поддеревья называются страницами.
n- порядок дерева
m- число элементов на странице
В-дерево порядка n называется структурой, обладающее следующими свойствами:
каждая страница содержит число элементов не больше 2n (m<2n);
каждая страница, за исключением корневой, содержит не менее n элементов (m>n);(диапазон, в котором может находится количество элементов n<=m<=2n )
каждая страница либо является листом (не имеет потомков), либо имеет m+1 потомок;
все страницы листьев находятся на одном уровне.