- •Содержание
- •Введение.
- •1. Основы анализа алгоритмов
- •1.1. Сравнительные оценки алгоритмов
- •1.2. Элементарные операции в формальной системе
- •1.3. Классы входных данных
- •1.4. Классификация алгоритмов по виду функции трудоемкости
- •1.5. Классификация скоростей роста. Асимптотический анализ функций
- •2. Оценка о (о большое)
- •3. Оценка (Омега)
- •1.6. Эффективность рекурсивных алгоритмов
- •1. Оценка (тета)
- •1.7. Анализ программ
- •1.8. Вопросы для самоконтроля
- •Классификация алгоритмов по виду функции трудоемкости.
- •2. Алгоритмы поиска и выборки
- •2.1. Последовательный поиск
- •2.2. Двоичный поиск
- •2.3. Задача выборки
- •2.4. Вопросы для самоконтроля
- •3.Алгоритмы сортировки
- •3.1. Сортировка трех чисел по месту
- •3.2. Сортировка вставками
- •3.3. Пузырьковая сортировка
- •3.4. Сортировка Шелла.
- •3.5. Корневая сортировка
- •3.6. Сортировка методом индексов
- •3.7. Быстрая сортировка (алгоритм Хоара)
- •3.8. Вопросы для самоконтроля
- •Сортировка Шелла.
- •Сортировка методом индексов.
- •4. Алгоритмы на графах
- •4.1. Основные понятия теории графов
- •4.2. Структуры данных для представления графов
- •4.3. Алгоритмы обхода вершин графа
- •4.3.1. Обход в глубину
- •4.3.2. Обход в ширину
- •4.4. Поиск остовного дерева минимального веса
- •4.4.1. Алгоритм Дейкстры – Прима
- •4.4.2. Алгоритм Крускала
- •4.5. Алгоритм поиска кратчайшего пути
- •4.6. Вопросы для самоконтроля
- •Структуры данных для представления графов.
- •5. Численные методы
- •5.1. Вычисление значений многочленов
- •5.2. Умножение матриц
- •5.2.1 Стандартный алгоритм умножения матриц
- •5.2.2. Умножение матриц по Винограду
- •5.2.3. Умножение матриц по Штрассену
- •5.3. Вопросы для самоконтроля
- •Стандартный алгоритм умножения матриц.
- •6. Алгоритмы сравнения с образцами
- •6.1. Сравнение строк
- •6.2. Алгоритм Кнута – Морриса – Пратта
- •6.3. Алгоритм Бойера - Мура
- •6.4. Вопросы для самоконтроля
- •7. Вычислительная геометрия
- •7.1. Основные понятия
- •7.2. Векторное произведение векторов
- •7.2.1. Ориентированная площадь треугольника
- •7 .3. Задача о выпуклой оболочке
- •7.3.1. Алгоритм Грэхема
- •7.3.2. Алгоритм Джарвиса
- •7.3.3. Рекурсивный алгоритм
- •7.4. Вопросы для самоконтроля
- •8. Задачи класса np
- •8.1. Примеры np-полных задач
- •8.1.1. Задача о коммивояжере
- •8.1.2. Задача о раскраске графа
- •8.1.3. Раскладка по ящикам
- •8.1.4 Упаковка рюкзака
- •8.1.5. Задача о суммах элементов подмножества
- •8.1.6. Задача о планировании работ
- •8.2. Приближенные эвристические решения nр-полных задач.
- •8.2.1. Жадные приближенные алгоритмы
- •8.2.2. Приближения в задаче коммивояжера
- •8.2.3. Приближения в задаче о раскладке по ящикам
- •8.2.4. Приближения в задаче об упаковке рюкзака
- •8.3. Вопросы для самопроверки
- •Приближения в задаче об упаковке рюкзака.
- •9. Динамическое программирование
- •Часть1--------------------
- •10. Метод ветвей и границ
- •Вопросы к зачету
- •Классификация алгоритмов по виду функции трудоемкости.
- •Приближения в задаче об упаковке рюкзака.
- •Динамическое программирование
- •Метод ветвей и границ. Литература
3.8. Вопросы для самоконтроля
Алгоритмы сортировки 3-х чисел.
Сортировка вставками. Оценка наихудшего и среднего случая.
Пузырьковая сортировка. Оценка наихудшего случая.
Сортировка Шелла.
Корневая сортировка: достоинства и недостатки.
Сортировка методом индексов.
Быстрая сортировка. Анализ наихудшего случая.
4. Алгоритмы на графах
Графы формально описывают множество разнообразных практических задач. Самым привычным примером является карта автодорог, на которой изображены населенные пункты и связывающие их дороги. Населенные пункты – вершины графа, а дороги – его ребра.
Граф может быть ориентированным (подобно улице с односторонним движение); взвешенным (каждой дороге приписана стоимость путешествия по ней).
4.1. Основные понятия теории графов
С формальной точки зрения граф представляет собой пару G = (V, E) множеств, первое из которых (V) состоит из вершин (узлов), а второе (E) – из его ребер. Ребро связывает между собой две вершины, т.е. EVV.
Если e E е =(u,v); u,v V, и пара вершин u и v соединены ребром e, причем e – неупорядоченная пара, то такой граф называется неориентированным. Если пара вершин (u,v) упорядочена, то граф называется ориентированным (орграфом), и ребра такого графа называются дугами, а вершины - узлами.
О
бычно
для наглядности графы изображают на
рисунке, где круги соответствуют
вершинам, а линии, их соединяющие, –
ребрам (рис.4.1, 4.2). Внутри кружков пишут
метки вершин. Ребра ориентированного
графа (орграфа, рис.4.2) изображают в виде
стрелок.
Для орграфа ребро - упорядоченная пара вершин: первая вершина это начало ребра, а вторая - его конец.
Полный граф - это граф, в котором каждая вершина соединена со всеми остальными. Число ребер в полном графе без петель – N(N-1)/2.
В полном орграфе разрешается переход из любой вершины в любую другую, следовательно, в полном орграфе – N (N - 1) ребер.
Подграф (Vs, Es) графа или орграфа (V, E) состоит из некоторого множества вершин Vs V, и некоторого подмножества ребер Еs Е, соединяющих эти вершины.
При работе с графами часто возникает задача, как проложить путь из ребер от одной вершины графа к другой. Говорят о «движении по ребру» – это значит, что мы переходим из вершины u графа в другую вершину v, связанную с ней ребром. В этом случае говорят, что u примыкает к v, или что эти две вершины – соседние.
Путь в графе - это последовательность ребер, по которым можно поочередно проходить. С формальной точки зрения путь из вершины Vi в вершину Vj - это последовательность ребер Vi Vi+1, Vi+1V i+2, Vi+2 Vi+3, … , Vj-1 Vj. Если Vi = Vj, тогда путь будет замкнутым (цикл, петля), то есть цикл - это путь, который начинается и заканчивается в одной и той же вершине.
В ациклическом графе циклы отсутствуют.
Обычно требуется, чтобы любая вершина встречалась на пути не более чем однажды.
У всякого пути есть длина - число ребер в нем.
Во взвешенном графе или орграфе каждому ребру приписано число, называемое весом ребра. На рисунке вес пишут рядом с ребром. При формальном описании вес будет дополнительным элементом упорядоченной или неупорядоченной пары вершин (триплет). Стоимость пути по взвешенному графу равна сумме весов всех ребер пути.
Кратчайший путь во взвешенном графе - это путь с минимальной стоимостью (весом), даже если число ребер в пути и можно уменьшить. (Если, например, путь P1 состоит из 5 ребер с общим весом 24, а Р2 - из 3-х ребер с весом 32, то P1 считается более коротким).
Граф или орграф называется связным, если всякую пару узлов можно соединить, по крайней мере, одним путем.
Связный ациклический граф называется деревом.
