Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
algorithms.doc
Скачиваний:
29
Добавлен:
06.12.2018
Размер:
9.73 Mб
Скачать

Конспект лекций

по курсу

Алгоритмы и алгоритмические языки

Доцент каф. Вычислительной математики

Механико-Математического ф-та

МГУ им. М.В.Ломоносова

Староверов В.М.

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=2kh 2(n-1)nk-2=1+2(n-1)k=0kh-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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]