- •Методы перебора для комбинаторных задач.
- •Способы сокращения перебора при решении комбинаторных задач
- •Метод ветвей и границ: общие принципы
- •Метод ветвей и границ: решение задачи о коммивояжере
- •Приближенные и эвристические алгоритмы
- •Теория сложности вычислений: основные понятия
- •Полиномиальная сводимость задач
- •Недетерминированная машина Тьюринга
- •Псевдополиномиальные задачи
- •Основные понятия теории графов
- •Способы представления графов
- •Поиск по графу в глубину и его применения
- •Ациклический граф. Топологическая сортировка
- •Поиск по графу в ширину
- •Задача о минимальном остовном дереве: алгоритм Прима
- •Задача о минимальном остовном дереве: алгоритм Крускала
- •Задача о кратчайшем пути в графе: алгоритм Флойда
- •Задача о кратчайшем пути в графе: алгоритм Дейкстры
- •Задача о максимальном потоке в сети: варианты постановки задачи
- •Неориентированные рёбра
- •Ограничение пропускной способности вершин
- •Основные понятия теории информации
- •Префиксные коды, коды Хаффмена
- •Статическое и адаптивное кодирование
- •Арифметическое кодирование
- •Алгоритмы Лемпела-Зива
Псевдополиномиальные задачи
Псевдополиномиальный алгоритм - полиномиальный алгоритм, проявляющий экспоненциальный характер только при очень больших значениях числовых параметров.
Псевдополиномиальные алгоритмы, формально относящиеся к экспоненциальным, на практике работают как полиномиальные во всех случаях, кроме очень больших значений числового параметра.
Основные понятия теории графов
Граф представляется как множество вершин(узлов), соединённых рёбрами.
Подграфом называется часть графа, образованная подмножеством вершин вместе со всеми ребрами (дугами), соединяющими вершины из этого множества.
Путем называется последовательность дуг (в ориентированном графе), такая, что конец одной дуги является началом другой дуги.
Цепью называется множество ребер, которые можно расположить так, что конец одного ребра является началом другого.
Ориентированный, неориентированный граф.
Дерево - это связный ациклический граф.
Если выбрана некоторая вершина a0, то она называется корнем дерева, а само дерево - деревом с корнем.
Способы представления графов
Аналитический способ (перечисление рёбер и вершин)
Матричный способ
Графический способ
Поиск по графу в глубину и его применения
Алгоритм поиска описывается следующим образом: для каждой непройденной вершины необходимо найти все не пройденные смежные вершины и повторить поиск для них.
Пусть задан граф G = (V,E), где V — множество вершин графа, E — множество ребер графа. Предположим, что в начальный момент времени все вершины графа окрашены в белый цвет. Выполним следующие действия:
Из множества всех белых вершин выберем любую вершину, обозначим её v1.
Выполняем для неё процедуру DFS(v1).
Перекрашиваем её в чёрный цвет.
Повторяем шаги 1-3 до тех пор, пока множество белых вершин не пусто.
Процедура DFS (параметр — вершина )
Перекрашиваем вершину u в серый цвет.
Для всякой вершины w, смежной с вершиной u, выполняем следующие два шага:
Если вершина w окрашена в белый цвет, выполняем процедуру DFS(w).
Окрашиваем w в чёрный цвет.
Используется в качестве подпрограммы в топологической сортировке.
Ациклический граф. Топологическая сортировка
Ациклический граф — граф, в котором отсутствуют циклы, то есть пути, начинающиеся и кончающиеся в одной и той же вершине.
Топологическая сортировка — упорядочивание вершин графа согласно частичному порядку (указано какие элементы следуют за каким), заданному ребрами орграфа на множестве его вершин.
Поиск по графу в ширину
Поиск в ширину выполняется в следующем порядке: началу обхода s приписывается метка 0, смежным с ней вершинам — метка 1.
Затем поочередно рассматривается окружение всех вершин с метками 1, и каждой из входящих в эти окружения вершин приписываем метку 2 и т. д.
Задача о минимальном остовном дереве: алгоритм Прима
Искомый минимальный остов строится постепенно, добавлением в него рёбер по одному.
Изначально остов полагается состоящим из единственной вершины (её можно выбрать произвольно).
Затем выбирается ребро минимального веса, исходящее из этой вершины, и добавляется в минимальный остов.
После этого остов содержит уже две вершины, и теперь ищется и добавляется ребро минимального веса, имеющее один конец в одной из двух выбранных вершин, а другой — наоборот, во всех остальных, кроме этих двух.
И так далее, т.е. всякий раз ищется минимальное по весу ребро, один конец которого — уже взятая в остов вершина, а другой конец — ещё не взятая, и это ребро добавляется в остов.
Этот процесс повторяется до тех пор, пока остов не станет содержать все вершины.
В итоге будет построен остов, являющийся минимальным. Если граф был изначально не связен, то остов найден не будет.