- •Содержание
- •Введение.
- •1. Основы анализа алгоритмов
- •1.1. Сравнительные оценки алгоритмов
- •1.2. Элементарные операции в формальной системе
- •1.3. Классы входных данных
- •1.4. Классификация алгоритмов по виду функции трудоемкости
- •1.5. Классификация скоростей роста. Асимптотический анализ функций
- •1. Оценка (тета)
- •2. Оценка о (о большое)
- •3. Оценка (Омега)
- •1.6. Эффективность рекурсивных алгоритмов
- •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. Метод ветвей и границ
- •Вопросы к зачету
- •Классификация алгоритмов по виду функции трудоемкости.
- •Приближения в задаче об упаковке рюкзака.
- •Динамическое программирование
- •Метод ветвей и границ. Литература
6.4. Вопросы для самоконтроля
Определите число операций сравнения при поиске в строке «ТАРАКАН К РЫБАКУ» подстроки «РЫБАК» для простого алгоритма; для алгоритма Бойера-Мура.
7. Вычислительная геометрия
7.1. Основные понятия
Любая точка Р на плоскости описывается парой вещественных чисел (координат) Р(х,у) (рис. 7.1).
В то же время любую точку плоскости можно считать вектором, начало которого находится в точке (0,0), а конец – в точке Р (рис.7.2).
Для любых двух векторов определены следующие операции:
сумма:
=
+
qx=vx+wx;
qy=vy+wy;
разность: = - qx=vx-wx; qy=vy-wy;
скалярное произведение: * =vx*wx+vy*wy .
Скалярное произведение обращается в 0, в том и только в том случае, когда, по крайней мере, один из векторов является нулевым или когда векторы и – ортогональны.
Для скалярного произведения справедливы соотношения:
v*w=vx*wx+vy*wy=vcos()*wcos()+vsin()*wsin()=|v|*|w|*cos(-)
При общей начальной точке у двух векторов скалярное произведение больше 0, если угол между векторами – острый, и меньше 0, если тупой.
7.2. Векторное произведение векторов
Векторным произведением векторов v и w называется вектор q, такой, что длина равна |v|*|w|sin , а его направление перпендикулярно плоскости векторов и . Вектор = направлен так, что из конца этого вектора кратчайший поворот от к виден происходящим против часовой стрелки.
Д
лина
этого вектора равна площади параллелограмма,
построенного на перемножаемых векторах
(рис.7.3).
Учитывая,
что векторы
и
лежат в координатной плоскости (х,у),
то есть координата z
=0, получаем:
=(vxwy-vywx)
.
Обратим внимание, что данное выражение
является определителем матрицы
.
7.2.1. Ориентированная площадь треугольника
Н
айдем
площадь треугольника ОАВ
(рис.7.4 а).
Очевидно, что его площадь равна половине площади параллелограмма ОАСВ, а площадь последнего равна модулю векторного произведения векторов ОА и ОВ. То есть SOACB=AxBy-AyBx. Отсюда SOAB=(AxBy-AyBx). Площадь же треугольника ОВА SOBA=(BxAy-ByAx) – имеет другой знак! То есть в зависимости от порядка обхода точек (по часовой или против часовой стрелки) получается положительная или отрицательная величина, так называемая ориентированная площадь треугольника.
Пусть даны 3 точки р1(х1,у1), р2(х2,у2) и р3(х3,у3), определяющие вершины треугольника (рис. 7.4 б). Определим площадь этого треугольника, используя векторное произведение.
Совместим начало координат с первой точкой. Векторное произведение в этом случае равно определителю следующей матрицы:
=
(х2-х1)(у3-у1)
– (у2-у1)(х3-х1)=х1(у2-у3)+у1(х3-х2)+х2у3-х3у2.
Последнее выражение равносильно раскрытию определителя по первой строке матрицы:
= х1(у2-у3)+у1(х3-х2)+х2у3-х3у2
.
Если поменять порядок обхода точек (не р1р2р3, а р1р3р2), то мы получаем матрицы, определители которых противоположны по значению! При обходе против часовой стрелки получается положительная величина, а при обходе по часовой стрелке – отрицательная. Это свойство ориентированной площади треугольника очень часто используется при решении различных геометрических задач.
Пример 7.1 Дан многоугольник, состоящий из N вершин. Определить, является ли он выпуклым.
Одним из возможных решений данной задачи является следующее. Все треугольники выпуклого многоугольника, образованные тройками соседних вершин в порядке их обхода, имеют одну и ту же ориентацию (рис. 7.5 а). Как только ориентация меняется, меняется и знак ориентированной площади треугольника (рис. 7.5 б). (Следует учесть тот факт, что нахождение тройки вершин на одной прямой не нарушает факта выпуклости).
