- •Структуры и алгоритмы обработки данных
- •230100.62 – Информатика и вычислительная техника
- •Стандартная постановка задачи
- •Пример постановки задачи
- •Пример постановки задачи в стандартной форме
- •Алгоритмы и их сложность
- •Основы анализа программ
- •Пример анализа алгоритмов
- •Выполнение операторов программы
- •Основы доказательства корректности
- •Динамическое программирование
- •Перемножение нескольких матриц
- •Когда применимо динамическое программирование
- •Наибольшая общая подпоследовательность
- •Жадные алгоритмы
- •Задача о выборе заявок
- •Абстрактные типы данных
- •Атд «Список»
- •Атд «Стек»
- •Атд «Очередь»
- •Множества
- •Хеширование
- •Словари, основанные на хеш-таблицах
- •Поиск слова в тексте
- •Сортировка
- •Сортировка вставками
- •Корневая сортировка
- •Пирамидальная сортировка
- •Переформирование пирамиды
- •Построение пирамиды
- •Сортировка слиянием
- •Управление с помощью таблиц
- •Способы представления графа
- •Матрица смежности
- •Матрица инцидентности
- •Список рёбер
- •Алгоритмы обхода графа
- •Поиск в ширину
- •Задача о кратчайшем пути
- •Алгоритм Дейкстры
- •Алгоритм Беллмана-Форда
- •Задача перекресток
- •Максимальный поток
- •Метод Форда-Фалкерсона
- •Минимальные покрывающие деревья
- •Алгоритм Крускала
- •Алгоритм Прима
- •Минимальные покрывающие деревья
- •Поиск в глубину
- •Топологическая сортировка
- •Деревья
Задача перекресток
Задача
Необходимо создать программу для управления светофорами на сложном перекрестке дорог.
Программа в качестве входных данных использует множество всех допустимых поворотов на перекрестке (продолжение прямой дороги, проходящей через перекресток, также будем считать «поворотом») и разбивает это множество на несколько групп так, чтобы все повороты в группе могли выполняться одновременно.
Затем с каждой группой сопоставим соответствующий режим работы светофоров на перекрестке.
Желательно минимизировать число разбиений исходного множества поворотов.
Пример перекрестка
Для построения модели этой задачи можно применить математическую структуру – граф.
Вершины графа – повороты, а ребра соединяют вершины повороты, которые нельзя выполнять одновременно.
В рамках данной модели можно использовать решение, которое дает математическая задача раскраски графа: каждой вершине графа надо задать цвет, чтобы никакие две соединенные ребром вершины не имели одинаковый цвет, и при этом по возможности использовать минимальное количество цветов.
При такой раскраске несовместимым поворотам будут соответствовать вершины, окрашенные в разные цвета.
Задача раскраски произвольного графа минимальным количеством цветов принадлежит к классу NP задач, для которых решение находится полным перебором всех вариантов.
Возможные подходы к решению.
Первый подход
Перебор всех возможных вариантов раскраски (для не слишком больших графов).
Второй подход
Используем дополнительную информацию об исходной задаче, чтобы исключить полный перебор вариантов раскраски для нахождения оптимального решения.
Третий подход
Изменяем постановку задачи и ищем не оптимальное, а близкое к оптимальному решение. Алгоритмы, которые находят «подходящее», но не оптимальное решение, называются эвристическими.
Максимальный поток
Максимальный поток
Сетью называется ориентированный граф G=(V,E), каждому ребру (u,v) E которого поставлено в соответствие число c(u,v)0, называемое пропускной способностью ребра..
Если (u,v) E мы полагаем c(u,v)=0
В графе выделены две вершину: исток s и сток t .
Предполагаем, что в графе нет «бесполезных» вершин (каждая вершина лежит на каком-то пути из истока в сток)
Потоком в сети G называется функция f:VV R, обладающая следующими тремя свойствами.
Ограничение, связанное с пропускной способностью:
f (u,v) c(u,v) для всех u,v из V.
Кососимметричность:
f (u,v) = - f (v,u) для всех u,v из V.
Сохранение потока:
для всех u из V – {s,t}
Величина потока f определяется как сумма
Задача о максимальном потоке состоит в следующем: для данной сети G с истоком s и стоком t найти поток максимальной величины.
Разделим вещество, поступающее в данную вершину v и вещество, из нее выходящее.
Входящим потоком называется сумма
. Аналогично определяется выходящий поток.
Закон сохранения потока можно сформулировать так; для любой вершины, кроме истока и стока, входящий поток равен исходящему.
Пример сети
