- •1. Словарные функции.
- •Словарные функции.
- •2. Вычислимые функции. Мт.
- •3. Словарное предствление мт.
- •4. Массовые алгоритмические проблемы. Разрешимые и перечислимые множества.
- •5. Теорема Поста.
- •6. Проблема остановки. Теорема Тьюринга.
- •7. Проблема пустой ленты. Проблема зацикливания.
- •Проблема зацикливания.
- •8. Понятие массовой и индивидуальной задачи.
- •9. Понятие полиномиального алгоритма и труднорешаемой задачи
- •10. Понятие схемы кодирования.
- •11. Задачи распознавания. Переход от оптимизационной задачи к задаче распознавания
- •Задачи разновидности языка и кодирование.
- •Примеры. Массовая задача и изоморфизм подграфу.
- •12. Язык. Связь между задачами распознавания и языками. Задачи разновидности языка и кодирование.
- •Примеры. Массовая задача и изоморфизм подграфу.
- •13. Детерминированные мт и класс p.
- •14. Недетерминированное вычисление и класс np.
- •15. Взаимоотношения между класами p и np.
- •16. Полиномиальная сводимость.
- •18. Теорема Кука. 6 основных np-полных задач.
- •Доказательство результатов об np-полноте.
- •Шесть основных np-полных задач.
- •19. Методы док-ва np-полноты. Метод сужения. Некоторые методы доказательства np-полноты.
- •Сужение задачи.
- •20. Методы доказательства np-полноты. Метод локальной замены Некоторые методы доказательства np-полноты.
- •Локальная замена.
- •21. Методы доказательства np-полноты. Метод построения компонент. Некоторые методы доказательства np-полноты.
- •Метод построения компонент.
- •22. Анализ подзадач np-полной задачи. Применение теории np-полноты для анализа задач.
- •Анализ подзадач.
- •23. Сильная np-полнота.
- •24. Псевдополиномиальные алгоритмы.
- •25. Именная форма. Высказывания. Операции над высказываниями.
- •26. Основные логические законы. Логические тождества.
- •27. Правила обращения с кванторами.
- •28. Техника доказательств.
- •29. Операции над множествами и одноместными предикатами.
- •30. Булевы функции.
21. Методы доказательства np-полноты. Метод построения компонент. Некоторые методы доказательства np-полноты.
Имеется несколько общих приёмов из большого количества подходов доказательства NP-полноты, которые широко используются. Эти приёмы:
а) Сужение задачи.
б) Локальная замена.
в) Построение компонент.
Метод построения компонент.
Данный метод является наиболее сложным методом доказательства NP-полноты. Основная идея пробных доказательств заключается в том, чтобы с помощью составной части рассматриваемой задачи сконструировать некоторые компоненты, соединяя которые можно реализовать индивидуальные задачи некоторой известной NP-полной задачи. В исследуемой индивидуальной задаче эти компоненты связаны так, что выбранные значения передаются компонентам, проверяющим некоторые условия. Проверка определяет, удовлетворяют ли сделанные выборы значений необходимым условиям. Взаимодействие компонент осуществляется с помощью прямых связей, а также с помощью глобальных ограничений.
ПРИМЕР.
Докажем полноту NP-полной задачи УПОРЯДОЧЕНИЕ С МИНИМАЛЬНЫМ ЗАПАЗДЫВАНИЕМ.
Условие: Задано множество T заданий, каждое из которых имеет длительность 1, для каждого задания задан директивный срок d(t)N+0; частичное упорядочивание (<·) на множестве T и целое неотрицательное k|T|.
Вопрос: Существует ли расписание : T{0,1,2, … , |T|-1}, такое, что
tt’(t)(t’).
(t)<(t’) если t <· t’.
|{tT : (t)+1d(t)}| k.
Докажем NP-полноту задачи.
П усть граф G=(V, E) и положительное целое число J (J|V|) образуют индивидуальную задачу из массовой задачи КЛИКА. Соответствующая индивидуальная задача из задачи УПОРЯДОЧЕНИЕ С МИНИМАЛЬНЫМ ЗАПАЗДЫВАНИЕМ имеет множество заданий T=VE, величина k=|E|-J(J-1)/2. Частичное упорядочивание заданий определяется следующим образом:
t <· t’ tV, t’E и вершина t инцидентна ребру t’;
Таким образом, компонента, соответствующая каждой вершине, состоит из единственного задания с директивным сроком |V|+|E|, а компонента, соответствующая каждому ребру, состоит из единственного задания с директивным сроком J(J+1)/2. Благодаря наличию частичного порядка на множестве T в искомом расписании задание, соответствующее ребру, будет следовать за заданиями, соответствующими его вершинам. Поэтому задания, для которых имеется опасность запаздывания, обязательно соответствуют рёбрам. Искомое расписание удобно представить себе схематически следующим рисунком:
Первые две части из четырёх частей расписания можно рассматривать как компоненту выбора клики. До этого срока может быть выполнено не более J(J+1)/2 заданий. Для того чтобы число запоздавших заданий не превосходило заданной вершины k, в начале должны стоять, по крайней мере, J(J-1)/2 заданий, соответствующих рёбрам. Однако если задание, соответствующее ребру, выполняется ранее своего директивного срока, то и задания, соответствующие его концевым вершинам должны быть закончены раньше этого срока. Минимально возможное количество вершин, которые могут быть инцидентны J(J-1)/2 различным рёбрам, равно J (причём такая ситуация возможна только тогда, когда эти рёбра образуют полный граф на указанных J вершинах). Отсюда следует, что среди заданий, выполняющихся ранее директивного срока, должно иметься, по крайней мере, J заданий, соответствующих вершинам. Однако до директивного срока заданий, соответствующих рёбрам, может быть выполнено не более J(J+1)/2 - J(J-1)/2 = J заданий, отвечающих вершинам. Следовательно, в любом таком расписании до директивного срока заданий, соответствующих рёбрам, должно закончится ровно J заданий, соответствующих вершинам, и ровно J(J-1)/2 – рёбрам, что соответствует клике исходного графа G. Обратно, если клика существует, то расписание можно построить способом, указанном на рисунке.