- •Введение
- •1. Элементы теории множеств
- •1.1.Понятие множества.
- •1.2. Способы задания множеств.
- •1.3. Свойства множеств.
- •1.4. Конечные и бесконечные множества.
- •1.5. Подмножества.
- •1.6. Множество как абстракция.
- •1.7. Операции над множествами.
- •1.8.Декартово произведение множеств
- •1.9. Контрольные задания
- •2. Отношения
- •2.1. Общие положения
- •2.2. Задание отношений.
- •2.3. Виды отношений.
- •2.3.1. Рефлективность.
- •2.3.2. Симметричность.
- •2.3.3. Транзитивность.
- •2.4. Отношение эквивалентности
- •2.5. Функция.
- •2.6. Отношение как базовое понятие в реляционных
- •2.7. Контрольные задания
- •3. Элементы алгебры логики
- •3.1. Силлогизмы Аристотеля.
- •3.2. Высказывания.
- •3.3. Исчисление высказываний и
- •3.4. Функции алгебры логики
- •3.5. Равносильности алгебры логики
- •3.6. Одна логическая задача
- •3.7. Реализация функций в элементных базисах
- •3.9. Совершенная конъюнктивная нормальная форма
- •3.10. Реализация операции суммирования в компьютере
- •3.11. Контрольные задания
- •4. Элементы теории графов
- •4.1. История возникновения
- •4.2. Основные понятия
- •4.3. Матрицы графа
- •4.4. Деревья
- •4.5. Раскраска
- •5. Элементы теории алгоритмов
- •5.1. Интуитивное понятие алгоритма
- •5.2. Свойства алгоритмов
- •5.3. Вычислительные и комбинаторные алгоритмы
- •5.5. Асимптотические оценки сложности алгоритма
- •Порядки сложности алгоритма
- •5.6. Комбинаторный взрыв
- •6. Полиномиальные алгоритмы
- •6.1. Построение минимального остовного дерева.
- •6.1.1. Жадный алгоритм
- •6.1.2. Алгоритм Прима
- •6.2. Контрольные задания
- •7. Эвристические алгоритмы
- •7.1. Алгоритм последовательной раскраски
- •7.2. Контрольные задания
- •8. Сетевое планирование
- •8.1. Основные понятия
- •8.2 Параметры сетевого планирования
- •8.3. Вычисление параметров сетевого графика
- •8.4. Контрольные задания
- •9. Элементы абстрактной теории автоматов
- •9.1. Определение абстрактного автомата
- •9.2. Методы задания автоматов
- •9.3. Связь между моделями Мили и Мура.
- •9.4.1. Преобразование автомата Мура в автомат Мили
- •9.4.2. Преобразование автомата Мили в автомат Мура
- •9.5. Контрольные задания
- •10. Уточнение понятия алгоритма
- •10.1. Машина Тьюринга
- •Для каждого алгоритма u из класса к1 существует равносильный ему алгоритм l из класса к2.
- •10.2. Нормальный алгоритм Маркова
5.3. Вычислительные и комбинаторные алгоритмы
В 50-е годы во всем мире наблюдался рост численных алгоритмов. Например, решить систему уравнений, вычислить определенный интеграл, найти сумму ряда. При этом задача имела одно решение, а усилия были направлены на то, чтобы достичь его за наименьшее число шагов.
Начиная с 60-х годов, в связи с развитием вычислительной техники начинается бурный рост числа комбинаторных алгоритмов. Для них характерно, что решение задачи связано с перебором вариантов, среди которых требуется найти оптимальный.
Для изображения комбинаторных алгоритмов удобным математическим аппаратом является теория графов.
5.4. Поиск решения комбинаторной задачи.
Процесс поиска решения комбинаторной задачи может быть представлен графом типа дерево.
x1 0й
уровень
x2 x3 x4 1й уровень
x5 x6 x7 x8 x9 x10 2й уровень
n-1й
уровень
nй уровень
Корень дерева (вершина 0го уровня) – это ситуация, в которой мы находимся перед работой алгоритма. Из нее мы можем перейти в одну из ситуаций 1го уровня и так далее. Вершины nго нижнего уровня - это решения. Такие вершины называются целевыми. Вообще говоря, целевые вершины не обязательно должны располагаться на одном уровне, но это всегда можно сделать путем введения фиктивных вершин.
Требуется среди целевых вершин выбрать вершину, соответствующую оптимальному решению.
Очевидный путь решения комбинаторной задачи – это метод полного перебора. Он заключается в нахождении всех целевых вершин и выборе среди них оптимальной. Однако этот метод применим для задач небольшой размерности. В реальных задачах дерево перебора с увеличением размерности задачи растет очень быстро, что не позволяет за приемлемое время получить оптимальное решение.
Поэтому поступают следующим образом. Находясь в ситуации, соответствующей некоторой вершине x iго уровня, приписывают смежным с x вершинам i+1го уровня количественную оценку. После этого выбирают на i+1м уровне вершину y с максимальной оценкой. Так находясь в корне дерева – вершине x1, мы оцениваем вершины x2, x3, x4. Если, например, вершина x4 получила максимальную оценку, то на следующем шаге алгоритма выбирается вершина y=x4 и оцениваются вершины x8, x9, x10.
Ситуации, связанные с вершинами x2 и x3, не рассматриваются, то есть ребра х1-х2 и х1-х3 обрываются. Таким образом, каждый раз переходя из вершины х в вершину у, мы обрываем оставшиеся ребра, исходящие из х, тем самым существенно сокращая дерево перебора.
Тем самым, на каждом шаге алгоритма мы осуществляем локально-оптимальный выбор в надежде, что итоговое решение также окажется оптимальным.
Существует сравнительно небольшой класс комбинаторных алгоритмов, для которых глобальный оптимум совпадает с последовательностью локально-оптимальных. Такие алгоритмы называют жадными. На каждом шаге жадный алгоритм “откусывает самый жирный кусок”, а потом пытается “откусить самый жирный среди оставшихся”.
Большинство же комбинаторных алгоритмов подобным свойством не обладают. Для них последовательность локально-оптимальных выборов не обязательно приводит к глобальному оптимуму. Такие алгоритмы называются эвристическими.
