- •Содержание
- •Введение.
- •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. Метод ветвей и границ
- •Вопросы к зачету
- •Классификация алгоритмов по виду функции трудоемкости.
- •Приближения в задаче об упаковке рюкзака.
- •Динамическое программирование
- •Метод ветвей и границ. Литература
8.1.4 Упаковка рюкзака
Имеется набор объектов объемом S1,S2…Sn и стоимостью W1,W2,…Wn. Упаковать рюкзак объемом К так, чтобы его стоимость была максимальной, или – можно ли добиться того, чтобы суммарная стоимость упаковки была по-меньшей мере W.
Эта задача возникает, например, при выборе стратегии вложения денег: объемом здесь является объем различных вложений, стоимостью – предполагаемая величина дохода, а объем рюкзака – размер планируемых капитальных вложений.
8.1.5. Задача о суммах элементов подмножества
Пусть имеется множество объектов различных размеров S1,S2…Sn и некоторая положительная верхняя граница L. Найти набор объектов, сумма размеров которых наиболее близка к L и не превышает этой границы, или – существует ли набор объектов с суммой размеров L. Это – упрощенная версия задачи об упаковке рюкзака.
8.1.6. Задача о планировании работ
Есть набор работ, и известно время, необходимое для завершения каждой из них Т1, Т2…Tn., и сроки D1,D2…Dn, к которым эти работы должны быть обязательно завершены, а также штрафы Р1, Р2, Рn, которые будут наложены при незавершении работы установленные сроки.
Найти порядок работ, минимизирующий накладываемые штрафы, или в другой постановке – есть ли порядок работ, при котором величина штрафа будет не больше P.
8.2. Приближенные эвристические решения nр-полных задач.
Поскольку полиномиальные решения этих задач неизвестны, следует рассмотреть альтернативные возможности, дающие лишь достаточно хорошие ответы – приближенные решения.
8.2.1. Жадные приближенные алгоритмы
На каждой отдельной стадии «жадный» алгоритм выбирает тот вариант, который является локально оптимальным в том или ином смысле. Не каждый «жадный» алгоритм позволяет получить оптимальный результат в целом. Как нередко бывает в жизни, «жадная стратегия» обеспечивает лишь сиюминутную выгоду, в то время как результат в целом может оказаться неблагоприятным.
Существуют задачи, для которых ни один из известных «жадных» алгоритмов не позволяет получить оптимальное решение; тем не менее, имеются «жадные» алгоритмы, которые с большой вероятностью позволяют получать «хорошие» решения. Вообще говоря, если рассматриваемая задача такова, что единственным способом получить оптимальное решение является использование метода полного перебора, тогда «жадный» алгоритм или другой эвристический метод получения хорошего (но не обязательно оптимального) решения может оказаться единственным реальным средством достижения результата.
Как уже обсуждалось, найти точное решение задачи из класса NPС трудно, потому что число требующих проверки возможных комбинаций входных значений чрезвычайно велико. Жадные алгоритмы пытаются сделать наилучший выбор на основе доступной информации.
Для каждого набора входных значений I мы можем создать множество возможных решений PSI. Оптимальное решение это такое решение Sоптимал PSI, что Value(Sоптимал)Value(S’) для всех S’PSI, если мы имеем дело с задачей минимизации, и Value(Sоптимал)Value(S’) для всех S’PSI, если мы имеем дело с задачей максимизации.
Решения, предлагаемые приближенными алгоритмами для задач класса NP, не будут оптимальными, поскольку алгоритмы просматривают только часть массива PSI, зачастую не очень большую.
Качество приближенных алгоритмов можно определить, сравнив полученные решения с оптимальным (если, конечно, известно оптимальное решение):
Q(A)= для задачи минимизации и
Q(A)= для задачи поиска максимума.
Рассмотрим приближенные алгоритмы решения рассмотренных ранее задач. Они не являются единственно возможными, скорее они призваны продемонстрировать многообразие различных подходов.