
- •Понятие сложности алгоритма, оценки времени исполнения.
- •Общая классификация вычислительных алгоритмов.
- •Точность представления чисел.
- •Вычисление «машинного нуля».
- •Понятие стека. Операции над стеком.
- •Программная реализация стека на основе статического массива.
- •Использование стека при организации связи функций в языке Си и в ос.
- •Понятие очереди. Операции над очередями.
- •Кольцевая очередь. Деки.
- •Программная реализация очереди на основе статического массива.
- •Структура данных «список».
- •Ссылки.
- •Линейные списки – основные операции.
- •Реализ списков на основе динам стру.
- •Двусвязный список и его программная реализация.
- •Кольцевые списки.
- •Многосвязные (слоеные) списки.
- •Бинарный поиск.
- •Алгоритм прямого поиска.
- •Алгоритм Кнута-Мориса-Пратта.
- •Алгоритм Боуера-Мура.
- •Сортировки – общая классификация.
- •Сортировка с помощью включения.
- •Сортировка с помощью выделения
- •Сортировка с помощью обменов
- •Шейкерная сортировка
- •Сортировка Шелла
- •Сравнение рассмотренных сортировок
- •Пирамидальная сортировка
- •Быстрая сортировка.
- •Сортировка слиянием
- •Графы – основные понятия.
- •Формы представления графов. Матрица смежности
- •Матрица инцидентности
- •Списки смежности
- •Массив дуг
- •Достижимость и обходы графа
- •Алгоритм Дейкстры
- •[30, 1] Постоянная
- •[40, 3] Постоянная
- •Вычисление выражений по их символьному представлению.
- •Построение обратной польской записи выражения.
Сравнение рассмотренных сортировок
Качественная оценка:
- сортировка пузырьком
- шейкер-сортировка
- сортировка выбором
- сортировка вставками
- сортировка вставками с барьером
- сортировка Шелла
Пирамидальная сортировка
Пирамида (heap) – бинарное дерево высота k, в кот. :
Все узлы имеют глубину k или k-1
При этом уровень k-1 полностью заполнен, а уровень k заполнен слева направо
Выполняется «свойство пирамиды» каждый эл-т меньше, либо равен родителю
Соответствие между геометр.структурой пирамиды как бинарн.дерева и массивов устанавливается по схеме:
В а[0] хранится корень дерева
Левый и правый сыновья а[i] хранятся соответственно в а[2i+1] и a[2i+2]
Таким образом для массива, хранящего в себе пирамиду, выполняется характеристическое свойство:
a[i] >= a[2i+1] и a[i] >= a[2i+2].
Быстрая сортировка.
1970г. Является одной из более широко применяемых и эффективных сортировок.
Схема алгоритма:
Из массива выбирается опорный эл-т a[i]
Запускается процедура разделения массива, кот перемещает все эл-ты меньшие либо равные a[i] в левую часть, а элементы >= в правую часть
Теперь массив состоит из двух подмножеств
Для обоих подмассивов, если в подмассиве больше двух эл-тов, рекурсивно выполняется та же процедура разделения массива
Разделение массива:
На входе массив a[0] … a[n], опорный эл-т p.
Введем два индекса i и j. В начале они указывают соответственно на левый и правый эл-т последовательности
Будем двигать указатель I, i++ в право до тех пор, пока a[i]>=p, затем аналогичным способом двигаем j, j--. Ищем a[j]<=p
Если i<=j, меняем a[i] и а[j] местами и продолжаем двигать a[i] и a[j] по тем же правилам
Повторяется шаг 3, пока i<=j
Сортировка слиянием
Принцип примерно такой же как и быстрой сортировке, вместо разделения по опорному эл-ту, массив просто делится пополам
a - сортируемый массив, его левая граница lb, правая граница ub
void mergeSort(int a[], long lb, long ub) {
long split;
if (lb < ub) {
split = (lb + ub)/2;
mergeSort(a, lb, ub);
mergeSort(a, split+1, last);
merge(a, lb, split, ub); } }
Графы – основные понятия.
ГрафG(V,E) - совокупность двух множеств – непустого множества V (множества вершин) и множества E(множества ребер) неупорядоченных пар различных элементов множества V
G(V,E) = {V,E}, V , EVV, E=E-1.
Число вершин графа G- p, а число ребер– q:
p = p(G) = |V|, q = q(G) = |E|.
Пусть v1, v2 – вершины, e=(v1,v2) – соединяющее их ребро. Тогда вершина v1 и ребро e инцидентны, вершина v2 и ребро e также инцидентны. Два ребра, инцидентные одной вершине, называются смежными; две вершины, инцидентные одному ребру, также назыв. смежными
Множество вершин, смежных с вершиной v, называется множеством смежности вершины v и обозначается
Г (v): Г (v) = {uV | (u,v)E}
Если элементами множества E являются упорядоченные пары, то граф называется ориентированным (или орграфом). В этом случае элементы множества V называются узлами, а элементы множества E – дугами
Если элементом множества E может быть пара одинаковых элементов V, то такой элемент E называется петлей, а граф называется графом с петлями (или псевдографом).
Если E является не множеством, а набором, содержащим несколько одинаковых элементов, то эти элементы называются кратными ребрами, а граф называется мультиграфом.
Если задана функция F:VM и/или F:EM, то множество M называется множеством пометок, а граф называется помеченным.
Маршрутом в графе называется чередующаяся последовательность вершин и ребер v0,e1,v1,e2,v2,…,ek,vk, в которой любые два соседних элемента инцидентны.
Для обычных графов достаточно просто перечислить либо последовательность вершин либо ребер. Если v0=vk, то маршрут замкнут, в противном случае – открыт.Если все входящие в маршрут ребра различны, то маршрут называется цепью.
Длиной маршрута называется количество ребер в нем (с повторениями). Расстоянием между вершинами u и v (обозначается d(u,v)) называется длина кратчайшей цепи {u,v}
Две вершины в графе связаны, если существует соединяющая их цепь. Граф, в котором все вершины связаны, называется связным.