- •Алгоритмы и алгоритмические языки
- •Лекция 1
- •Представление чисел в эвм
- •Вещественные
- •Ошибки вычислений
- •Лекция 2
- •Алгоритмы. Сведение алгоритмов.
- •Нижние и верхние оценки.
- •Сортировки
- •Постановка задачи
- •Сортировка пузырьком.
- •Сортировка слиянием с рекурсией.
- •Сортировка слиянием без рекурсии.
- •Лекция 3
- •Алгоритмы. Сведение алгоритмов.
- •Сортировки и связанные с ними задачи.
- •Доказательство корректности работы алгоритма.
- •Оценки времени работы алгоритма.
- •Некоторые задачи, сводящиеся к сортировке.
- •Лекция 4
- •Алгоритмы. Сведение алгоритмов.
- •Сортировки и связанные с ними задачи.
- •HeapSort или сортировка с помощью пирамиды.
- •Алгоритмы сортировки за время o(n)
- •Сортировка подсчетом
- •Цифровая сортировка
- •Сортировка вычерпыванием
- •Лекция 5
- •Алгоритмы. Сведение алгоритмов.
- •Порядковые статистики.
- •Поиск порядковой статистики за время (n) в среднем
- •Поиск порядковой статистики за время (n) в худшем случае
- •Язык программирования c.
- •Переменные
- •Структуры данных.
- •Вектор.
- •Лекция 6
- •Стек. Реализация 1 (на основе массива).
- •Стек. Реализация 2 (на основе массива с использованием общей структуры).
- •Стек. Реализация 3 (на основе указателей).
- •Стек. Реализация 4 (на основе массива из двух указателей).
- •Стек. Реализация 5 (на основе указателя на указатель).
- •Очередь.
- •Стандартная ссылочная реализация списков
- •Ссылочная реализация списков с фиктивным элементом
- •Реализация l2-списка на основе двух стеков
- •Реализация l2-списка с обеспечением выделения/освобождения памяти
- •Лекция 7
- •Структуры данных. Графы.
- •Поиск пути в графе с наименьшим количеством промежуточных вершин
- •Представление графа в памяти эвм
- •Массив ребер
- •Матрица смежности
- •Матрица инцидентности
- •Списки смежных вершин
- •Реберный список с двойными связями (рсдс) (для плоской укладки планарных графов)
- •Лекция 8
- •Структуры данных. Графы.
- •Поиск кратчайшего пути в графе
- •Алгоритм Дейкстры
- •Конец вечного цикла
- •Алгоритм Дейкстры модифицированный
- •Конец вечного цикла
- •Лекция 9
- •Бинарные деревья поиска
- •Поиск элемента в дереве
- •Добавление элемента в дерево
- •Поиск минимального и максимального элемента в дереве
- •Удаление элемента из дерева
- •Поиск следующего/предыдущего элемента в дереве
- •Слияние двух деревьев
- •Разбиение дерева по разбивающему элементу
- •Сбалансированные и идеально сбалансированные бинарные деревья поиска
- •Операции с идеально сбалансированным деревом
- •Операции со сбалансированным деревом
- •Поиск элемента в дереве
- •Добавление элемента в дерево
- •Удаление элемента из дерева
- •Поиск минимального и максимального элемента в дереве
- •Поиск следующего/предыдущего элемента в дереве
- •Слияние двух деревьев
- •Разбиение дерева по разбивающему элементу
- •Лекция 10
- •Красно-черные деревья
- •Отступление на тему языка с. Поля структур.
- •Отступление на тему языка с. Бинарные операции.
- •Высота красно-черного дерева
- •Добавление элемента в красно-черное дерево
- •Однопроходное добавление элемента в красно-черное дерево
- •Удаление элемента из красно-черного дерева
- •Лекция 11
- •Высота b-дерева
- •Поиск вершины в b-дереве
- •Отступление на тему языка с. Быстрый поиск и сортировка в языке с
- •Добавление вершины в b-дерево
- •Удаление вершины из b-дерева
- •Лекция 12
- •Хеширование
- •Метод многих списков
- •Метод линейных проб
- •Метод цепочек
- •Лекция 14
- •Поиск строк
- •Отступление на тему языка с. Ввод-вывод строк из файла
- •Алгоритм поиска подстроки с использованием хеш-функции (Алгоритм Рабина-Карпа)
- •Конечные автоматы
- •Отступление на тему языка с. Работа со строками
- •Алгоритм поиска подстроки, основанный на конечных автоматах
- •Лекция 15
- •Алгоритм поиска подстроки Кнута-Морриса-Пратта (на основе префикс-функции)
- •Алгоритм поиска подстроки Бойера-Мура (на основе стоп-символов/безопасных суффиксов)
- •Эвристика стоп-символа
- •Эвристика безопасного суффикса
- •Форматы bmp и rle
- •Bmp без сжатия.
Конспект лекций
по курсу
Алгоритмы и алгоритмические языки
Доцент каф. Вычислительной математики
Механико-Математического ф-та
МГУ им. М.В.Ломоносова
Староверов В.М.
2010г.
Лекция 1 6
Представление чисел в ЭВМ 6
Целые 6
Вещественные 6
Ошибки вычислений 10
Лекция 2 12
Алгоритмы. Сведение алгоритмов. 12
Нижние и верхние оценки. 12
Верхней оценкой времени выполнения алгоритма m называется такая функция (N), что для любого набора входных данных In(m) размером не более N время выполнения алгоритма не будет превосходить (N). Будем говорить, что задача z имеет верхнюю оценку времени решения (N), если существует алгоритм m с верхней оценкой времени выполнения (N). 12
Нижней оценкой времени выполнения алгоритма m называется такая функция (N), что для любого N найдется такой набор входных данных алгоритма размером N, что время работы данного алгоритма на указанных данных будет не меньше (N). 13
Нижней оценкой времени решения задачи z называется такая функция (N), что для любого алгоритма, решающего данную задачу, (N) будет нижней оценкой времени работы данного алгоритма. 13
Сортировки 14
Постановка задачи 14
Сортировка пузырьком. 15
Сортировка слиянием с рекурсией. 17
Сортировка слиянием без рекурсии. 19
Лекция 3 20
Алгоритмы. Сведение алгоритмов. 20
Сортировки и связанные с ними задачи. 20
QuickSort. 20
Доказательство корректности работы алгоритма. 23
Оценки времени работы алгоритма. 24
Некоторые задачи, сводящиеся к сортировке. 27
Лекция 4 32
Алгоритмы. Сведение алгоритмов. 32
Сортировки и связанные с ними задачи. 32
HeapSort или сортировка с помощью пирамиды. 32
Алгоритмы сортировки за время O(N) 34
Сортировка подсчетом 34
Цифровая сортировка 35
Сортировка вычерпыванием 35
Лекция 5 38
Алгоритмы. Сведение алгоритмов. 38
Порядковые статистики. 38
Поиск порядковой статистики за время (N) в среднем 38
Поиск порядковой статистики за время (N) в худшем случае 40
Язык программирования C. 42
Переменные 42
Структуры данных. 44
Вектор. 44
Стек. 45
Лекция 6 49
Структуры данных ( + в языке С: массивы, структуры, оператор typedef). 49
Стек. 49
Стек. Реализация 1 (на основе массива). 49
Стек. Реализация 2 (на основе массива с использованием общей структуры). 50
Стек. Реализация 3 (на основе указателей). 50
Стек. Реализация 4 (на основе массива из двух указателей). 51
Стек. Реализация 5 (на основе указателя на указатель). 51
Очередь. 52
Дек. 53
Списки 54
Стандартная ссылочная реализация списков 55
Ссылочная реализация списков с фиктивным элементом 57
void ListInit(TList *list) 58
{list->temp.next=list->temp.prev=&list->temp; list->current=&list->temp;} 58
Реализация L2-списка на основе двух стеков 58
Реализация L2-списка с обеспечением выделения/освобождения памяти 59
Лекция 7 60
Структуры данных. Графы. 60
Графы 60
Поиск пути в графе с наименьшим количеством промежуточных вершин 60
Представление графа в памяти ЭВМ 65
Пусть имеется граф G=(V,E), имеющий N вершин и M ребер. Вершинам и ребрам можно сопоставить их номера от 1 до N и от 1 до M, соответственно. Рассмотрим различные варианты хранения данных об этом графе. Отметим, что для работы с графом требуются следующие операции 66
Массив ребер 66
Матрица смежности 66
Матрица инцидентности 66
Списки смежных вершин 67
Реберный список с двойными связями (РСДС) (для плоской укладки планарных графов) 67
68
Лекция 8 69
Структуры данных. Графы. 69
Поиск кратчайшего пути в графе 69
Алгоритм Дейкстры 70
Конец вечного цикла 70
Алгоритм Дейкстры модифицированный 71
Конец вечного цикла 71
Лекция 9 74
Бинарные деревья поиска 74
Поиск элемента в дереве 75
Добавление элемента в дерево 75
Поиск минимального и максимального элемента в дереве 76
Удаление элемента из дерева 76
Поиск следующего/предыдущего элемента в дереве 76
Слияние двух деревьев 76
Разбиение дерева по разбивающему элементу 77
Сбалансированные и идеально сбалансированные бинарные деревья поиска 78
Операции с идеально сбалансированным деревом 79
Операции со сбалансированным деревом 80
Поиск элемента в дереве 80
Добавление элемента в дерево 80
Удаление элемента из дерева 84
Поиск минимального и максимального элемента в дереве 84
Поиск следующего/предыдущего элемента в дереве 84
Слияние двух деревьев 84
Разбиение дерева по разбивающему элементу 86
Лекция 10 88
Красно-черные деревья 88
Отступление на тему языка С. Поля структур. 88
Отступление на тему языка С. Бинарные операции. 90
Высота красно-черного дерева 90
Добавление элемента в красно-черное дерево 91
Однопроходное добавление элемента в красно-черное дерево 93
Удаление элемента из красно-черного дерева 95
Лекция 11 98
B-деревья 98
Высота B-дерева 99
N 1+k=2kh 2(n-1)nk-2=1+2(n-1)k=0kh-2 nk= 100
Поиск вершины в B-дереве 100
Отступление на тему языка С. Быстрый поиск и сортировка в языке С 100
Добавление вершины в B-дерево 102
Удаление вершины из B-дерева 103
Лекция 12 107
Хеширование 107
Метод многих списков 107
Метод линейных проб 108
Метод цепочек 112
Хэш-функции 114
Хэш-функции на основе деления 114
Хэш-функции на основе умножения 114
CRC-алгоритмы обнаружения ошибок 115
Лекция 14 119
Поиск строк 119
Отступление на тему языка С. Ввод-вывод строк из файла 119
Алгоритм поиска подстроки с использованием хеш-функции (Алгоритм Рабина-Карпа) 120
Конечные автоматы 121
Отступление на тему языка С. Работа со строками 122
Алгоритм поиска подстроки, основанный на конечных автоматах 122
Лекция 15 124
Алгоритм поиска подстроки Кнута-Морриса-Пратта (на основе префикс-функции) 124
Алгоритм поиска подстроки Бойера-Мура (на основе стоп-символов/безопасных суффиксов) 126
Эвристика стоп-символа 126
Эвристика безопасного суффикса 128
Форматы BMP и RLE 131
BMP без сжатия. 132