- •Понятие о структуре данного. Уровни представления структур данных.
- •Классификация сд в программах пользователя и в памяти эвм
- •Сд в оперативной памяти
- •Сд типа массив.
- •Сд типа запись (прямое декартово произведение).
- •Сд типа таблица.
- •Операции над таблицей:
- •Временная сложность алгоритмов.
- •Сд типа хеш-таблица.
- •Операция включения элемента в таблицу.
- •Операция исключения элемента из таблицы:
- •Сортировки. Улучшенные методы сортировок.
- •Классификация задач по временной сложности.
- •Сд типа стек.
- •Алгоритм сортировки Хоара (стек используется для хранения границ сортируемой области в таблице):
- •Сд типа очередь.
- •Связное распределение памяти.
- •Сд типа линейный односвязный список.
- •Сд типа указатель.
- •Статические и динамические переменные.
- •Сд типа циклический линейный список.
- •Сд типа двусвязный линейный список.
- •Сд типа дек.
- •Многосвязные списки.
- •Средства объектно-ориентированного программирования.
- •Объекты и свойства инкапсуляции.
- •Наследование и переопределение.
- •Полиморфизм. Виртуальные методы.
- •Динамические объекты. Деструкторы.
- •Обработка ошибок при работе с динамическими объектами.
- •Модули, экспортирующие объекты.
- •Нелинейные структуры данных.
- •Сд типа дерево.
- •Представление деревьев в связной памяти эвм.
- •Алгоритмы прохождения деревьев в глубину и в ширину.
- •Представление деревьев в виде бинарных.
- •Представление бинарных деревьев в связной памяти. Прошитые деревья
- •Формирование бинарного дерева.
- •Применение бинарных деревьев в алгоритмах поиска.
- •Операция включения в сд типа бинарное дерево.
- •Операция исключения из бинарного дерева.
- •Представление бинарного дерева в прямоугольной памяти.
- •Применение бинарных деревьев.
- •Сд типа граф.
- •Представление графа в памяти эвм.
- •Алгоритмы прохождения графа.
- •Топологическая сортировка.
- •Организация данных во внешней памяти. Типы и характеристики устройств внешней памяти.
- •Сд типа последовательный файл.
- •Сд типа файл прямого доступа.
- •Сд типа индексно-последовательный файл.
- •Сд типа хеш-файл.
- •Внешняя сортировка.
- •Алгоритм прямого слияния.
- •Многофазная сортировка.
- •Сущность базы данных. Системы управления базами данных.
- •Общая структура субд.
- •Реляционная модель субд.
- •Язык реляционной алгебры.
Представление графа в памяти эвм.
Графический способ представления (если граф небольшой).
Использование матриц. Матрица легко описывается и при анализе характеристик графа можно использовать алгоритмы линейной алгебры. Также используется представление графа в связной памяти, в том случае, если большее количество элементов в матрице равно нулю (матрица не заполнена).
Числовыми характеристиками графа являются: количество узлов, количество дуг, ранг графа. Ранг графа: R(G) = |X| - K, где К – количество компонентов связности графа в случае, если но не связан.
Рассмотрим матрицу смежности. Пусть задан граф G = (X, U), |X| = n. Имеем матрицу А размерности n n, которая называется матрицей смежности, если элементы ее определяются следующим образом:
Рассмотрим применение матричной алгебры для определения характеристик графа. Выражение a i k a k j означает, что между узлами i и j есть две дуги, проходящие через узел k, если значение выражения равно True.
Выражение означает, что всегда имеется путь между этими узлами длиною 2 (два), если выражение истинно.
А А = А(2) – логические операции заменяются арифметическими. Тогда каждый элемент a i j будет давать информацию о том, есть ли путь из i в j (i, j = 1, 2,…,n).
Выражение А(n) = А(n – 1) А означает, есть ли путь длиной n между различными узлами i. По диагонали будет характеристика, есть ли циклы (контура) в матрице.
Р = А V А(2) V …V А(n) = - матрица связности. Определяется, существует ли какой-либо путь между узлами i и j. Алгоритм вычисления данного выражения:
Р = А;
повторить 3, 4 (k=1, 2,…, n);
повторить 4 для i=1, 2, …,n;
повторить Рi j = Рi j V (Рi k Рk j), j=1, 2,…, n.
В связной памяти наиболее часто представление графа осуществляется с помощью структур смежности. Для каждой вершины множества X задается множество М(X i) соответственно вех его последователей (если это орграф) или соседей (для неорграфа). Таким образом, структура смежности графа G будет представлять собой список таких множеств: < М(X 1), М(X 2),…, М(X n)> для всех его вершин.
Р
3
2
Для неорграфа: 1:
2, 3; 2: 1, 3; 3: 1, 2; 4: 5; 5: 4. Для
орграфа: 1: 2; 2: 3; 3: 1; 4: 5; 5: - .
5
G:
1
4
С
1 2 3 4 5
2
3
1
5
Представление графа может оказать влияние на эффективность алгоритма. Часто запись алгоритмов на графах задается в терминах вершин и дуг, независимо от представления графа. Например, алгоритм определения количества последователей вершин: C (X) Xi, S – количество дуг.
S = 0;
x X выполнить:
начало
С(x)=0;
t M(x) выполнить: C(x) = C(x) + 1;
S = S + C(x);
конец;
Алгоритмы прохождения графа.
Алгоритм прохождения может быть использован как алгоритм поиска, если узлами графа являются элементы таблицы.
Имеем граф G = (X, U), X = {x1, x2,…, xn}. Каждое прохождение можно рассматривать как определенную последовательность. Максимальное число прохождений (перестановок) – n!.
Алгоритм прохождения графа в глубину:
9 4
6
3
8
7 5
10 5
4
3
1
1
2
Цифры на ребрах
графа обозначают шаги посещения. Будем
различать посещаемые (
) и не посещаемые (
) вершины. Каждая вершина обходится два
раза. Если все смежные вершины пройдены,
то происходит откат в предыдущую
вершину. В том случае, если из текущей
вершины все соседние вершины пройдены,
то осуществляем возврат к той вершине,
откуда был осуществлен переход к
текущей.
Определим списки смежности для каждой вершины графа G:
1 : 2, 3, 5 2: 1, 3, 4 3: 1, 2, 4, 5 4: 2, 3 5: 1,3
t : 1, 2, 3, 4, 5
Если граф G связный, то описанный процесс определяет прохождение (обход) графа G. Если же граф G не связный, то проходим только одну из компонент графа G, которая содержит начальную вершину. Если граф G является несвязным, то для получения полного обхода необходимо получать этот процесс в каждой связной компоненте. С помощью этого метода можно определить количество компонент.
Для каждого выбора начальной вершины в связном графе может быть получено единственное прохождение. Если граф представляет собой объединение компонент: и | x i | = n i , то количество прохождений такого несвязного графа: n 1 n 2 … n р ( i = 1, 2,…, p).
Пусть граф G = (X, U) задан структурой смежности < М(x 1), М(x 2),…, М(x n)>. Определим Num(x) как массив для регистрации посещений вершин (Num(x)=1, если вершина не посещалась; Num(x)=0, если вершина посещалась). Тогда алгоритм прохождения графа в глубину будет выглядеть так:
x X выполнить Num(x)=1;
x X выполнить: если Num(x)=1, то D(x);
Процедура D(x);
начало
R(V);
Num(V)=0;
t M(V) выполнить: если Num(t)=1, то D(t);
конец;
Алгоритм прохождения графа в ширину:
Определим списки смежности для каждой вершины графа G:
1: 2, 3, 5 2: 1, 3, 4 3: 1, 2, 4, 5 4: 2, 3 5: 1,3
t: 1, 2, 3, 4, 5 (для выбранной вершины переписываем весь список смежности).
Выберем начальную вершину x н. Первые элементы искомой перестановки t являются элементами смежного списка вершины x н, т.е. M(x н). Обозначим список смежности следующим образом: M(x н) = {(w1, xн), (w2, xн),…,(wk, xн)}. Следующими элементами перестановки будут те элементы их M(w1), которые отсутствуют в формируемой перестановке t. Затем, берем все элементы из M(w2), и т.д. обход прекращается, когда все вершины, достижимые из x н, будут содержаться в t (wi X, i=1, 2,…, k).