- •Алгоритмы на графах
- •Представление графов
- •Матрица смежности
- •Матрица инцидентности
- •Алгоритм Уоршелла. Построение матрицы транзитивного замыкания.
- •Алгоритм Флойда
- •Центр орграфа
- •Обходы графов
- •Дерево выражений. Примеры использования синтаксических структур
- •Топологическая сортировка
- •Алгоритм сильной связности
- •Неориентированные графы.
- •Остовное дерево минимальной стоимости
- •Алгоритм Прима. Алгоритм Крускала.
- •Алгоритм Прима
- •Алгоритм Крускала
- •Паросочетания и покрытия графов.
- •Раскраска графов
- •Алгоритмы раскраски графов
- •Задачи сводимые к задачи раскраски
- •Задача составления расписания
- •Задача распределения ресурсов
- •Задача экономии памяти
- •Потоки в сетях
- •Алгоритм нахождения максимального потока
- •Дерево двоичного поиска
- •Классификация задач
- •Формальные языки
- •Сложностной класс np
- •Сводимость
- •Сводимости используемые при доказательстве np-полноты
Классификация задач
P-класс – полиномиальный. Трудоёмкость по определению
NP-класс – non deterministic polynomial – недетерминированный полиномиальный. Нету алгоритмов быстрого решения – асимптотика .
Неполиномиальный -
Алгоритмически неразрешимые задачи (пример – «проблема останова»).
P-класс
Смотри книгу
NP-класс
Абстрактная задача – это произвольное бинарное отношение Q между множеством входных данных I (instanced) и выходных соотношений S (solution).
В теории NP-полноты рассматриваются только задачи разрешения. Это задачи, в которых требуется дать ответ либо «да», либо «нет» на некоторый вопрос. Например для коммивояжёра – является ли последовательность вершин обходом графа оптимальной.
Исходные данные могут быть представлены в различной кодировке в смысле системы счисления. Если существует полиномиальный алгоритм перевода из одной кодировки (представления) в другую, то эти представления эквивалентны.
Фиксировав представление абстрактной задачи говорят о её строковом представлении в виде битовой строки. Алгоритм решает строковую задачу за время если на входном данном битовой строки длины алгоритм работает за время .
Тогда сложностным классом P называется множество всех строковых задач разрешения, которые могут быть решены за полиномиальное время.
В математике функция вычислима тогда, когда за некую последовательность шагов можно определить её значение. Мы будем говорить, что функция , областью определения которой является множество всех многообразий двоичного кода и такой же областью допустимых значений, вычислима за полиномиальное время, если существует полиномиальный алгоритм , который для любого выдаёт результат .
Формальные языки
См книжку
Алгоритм A допускает слово , если на входе алгоритм выдаёт результат 1, т.е.
но не обязан отвергать всякое слово , не принадлежащее (язык, или наша решаемая задача).
Если алгоритм допускает все слова из , а все остальные слова отвергает, то говорят что алгоритм А распознаёт язык L.
Сложностной класс np
Язык L принадлежит классу NP, Если существует такой полиномиальный алгоритм A с двумя аргументами, и такой многочлен p(x) с целыми коэффициентами, что
Т.е. алгоритм A проверяет язык L, если для любой строки x∈L (например, графа), найдётся сертификат Y (т.е. последовательность вершин обхода), с помощью которого алгоритм A может проверить принадлежность x (т.е. конкретного графа) множеству L – множеству графов, имеющих гамильтонов цикл, а для x не принадлежащего L (т.е. если граф не имеет вообще гамильтонова цикла), такого сертификата нет.
Проблема .
Самостоятельно.
Сводимость
Неформально: задача Q сводится к задаче Q’, если задачу Q можно решить для любого входа, считая известным решение задачи Q’ для какого-то любого другого входа, например: задача решения линейного уравнения сводится к задачи решения квадратного уравнения (если добавить фиктивный старший член).
Язык сводится за полиномиальное время к языку
Если существует такая функция , вычислимая за полиномиальное время
Что
( - тогда и только тогда)
Здесь функция f называется сводящая.
Заметим что если - полиномиальный язык, то полиноминален также.
NP-полнота
Запись можно интерпретировать так: сложность языка не более чем полиномиально превосходит сложность языка .
Определение. Язык называется NP-полным (NP Complete, NPC), если
Если язык обладает свойством 2, но не доказана его принадлежность к классу NP (т.е. не разработан проверяющий алгоритм сертификат), то такая задача принадлежит к классу NP-трудных задач (NP-Hard, NPH).
Основным свойством класса NPC является:
Если некоторая NP-полная задача имеет полиномиальный алгоритм решения, то для любой задачи NPC существует полиномиальный алгоритм решения и P=NP.
Если в классе NP существует задача, не разрешимая за полиномиальное время, то все NP-полные задачи таковы.
Первая задача, для которой была доказана принадлежность её к классу NP была задача о выполнимости логической схемы.
Программисту необходимо знать о существовании класса NP для того, чтобы уметь её (задачу) распознать, доказать что она такова (принадлежит к классу NPC), а следовательно не имеет эффективного в смысле полиномиального алгоритма решения и сосредоточиться на поиске приближённого эвристического алгоритма.
Схема доказательства NP-полноты языка (задачи) L
Доказываем, что L принадлежит NP.
Выбираем какой-либо известный NP-полный язык L’.
Строим алгоритм, вычисляющий функцию , которая отображает входы задачи L’ во входы задачи L.
Доказываем, что функция f сводит L’ к L.
Доказываем, что функция f полиномиальна.