SlideShare a Scribd company logo
1 of 23
Download to read offline
Лекция 13:
Трудноразрешимые задачи
Курносов Михаил Георгиевич
к.т.н. доцент Кафедры вычислительных систем
Сибирский государственный университет
телекоммуникаций и информатики
http://www.mkurnosov.net
Полиномиальные алгоритмы
2
Полиномиальный алгоритм (polynomial algorithm)
– алгоритм, вычислительная сложность которого
принадлежит классу O(nk), где k – константа.
Алгоритмы с полиномиальной сложностью считаются
быстрыми и применимыми на практике.
Примеры
o Сортировка выбором – O(n2)
o Бинарный поиск – O(log2n)
o Алгоритм Крускала – O(|E|log|V|)
Легко разрешимые задачи
3
Легко разрешимая задача
(простая задача, tractable problem) – задача решаемая
алгоритмом с полиномиальной сложностью.
Примеры
o Задача сортировки
o Задача поиска в минимального элемента в массиве
o Поиск кратчайшего пути в взвешенном графе
o Построение остовного дерева минимальной
стоимости
Трудноразрешимые задачи
4
Трудноразрешимая задача
(intractable problem) – задача, которая не может
быть решена за полиномиальное время
(не известно полиномиального алгоритма).
Теория вычислительной сложности
5
Центральным объектом теории
являются задачи принятия решения
(decision porblem).
Задача принятия решения
(задача распознавания, decision
problem) – это задача, решение
которой ответ “да” или “нет”.
Алгоритм
Входные данные
(Input)
Да Нет
Теория вычислительной сложности
(computational complexity theory) – раздел
теоретической информатики, посвященный анализу
вычислительной сложности алгоритмов.
Задачи принятия решения
6
Примеры
o По заданному графу определить является
ли он связным.
o Определить является ли заданное число простым.
Многие задачи могут быть переформулированы
как задачи принятия решения.
Задачи принятия решения разбиты на классы
сложности.
Класс сложности P
7
Класс сложности P (polynomial) – это
множество задач принятия решения, решаемых
за полиномиальное время (для которых известны
алгоритмы, с полиномиальной трудоемкостью).
Представители класса P
o Задача сортировки
o Задача обхода графа в глубину
o Задача поиска минимального элемента в массиве
o Задача построения остовного дерева минимальной
стоимости
Классы сложности
8
Все ли задачи принятия решения являются
полиноминально разрешимыми?
Ответ: нет
Существуют задачи, которые вообще не могут быть
решены никаким алгоритмом – неразрешимые задачи.
Задача останова (halting problem, A. Turing, 1939).
Даны описание алгоритма и его начальные входные
данные, требуется определить, сможет ли выполнение
алгоритма с этими данными завершиться когда-либо.
Проблема останова не разрешима на машине Тюринга.
Трудноразрешимые задачи
9
Имеется большое количество задача, для которых
не найден полиномиальный алгоритм и не доказана
невозможность его существования.
Гэри М., Джонсон Д. Вычислительные машины
и труднорешаемые задачи. – М.: Мир, 1982. – 416 с.
Трудноразрешимые задачи
10
Гамильтонов цикл (hamiltonian cycle problem, HCP).
Определить, имеется ли в заданном графе гамильтонов цикл –
цикл включающий в себя каждую вершину ровно один раз.
Трудноразрешимые задачи
11
Задача коммивояжёра
(travelling salesman problem, TSP).
Найти кратчайший путь (цикл)
между заданными n городами.
Через каждый город путь должен
проходить один раз.
Трудноразрешимые задачи
12
Задача упаковки корзин (bin packing problem, BPP).
Даны n предметов и их размеры – рациональные числа, не
превышающие 1. Требуется их разместить в наименьшее
количество корзин размером 1.
Класс сложности NP
13
Класс сложности NP (non-deterministic polynomial) –
это множество задач принятия решения, решаемых
недетерминированным полиномиальным алгоритмом.
Структура недетерминированных полиномиальных
алгоритмов:
o Шаг 1. Недетерминированным алгоритмом
с полиномиальной сложностью формируется
возможное решение S экземпляра I задачи
(для заданных входных данных).
o Шаг 2. Полиномиальным алгоритмом проверяется
является ли S корректным решением экземпляра I.
Класс сложности NP
14
Класс сложности NP (non-deterministic polynomial) –
это множество задач принятия решения, решаемых
недетерминированным полиномиальным алгоритмом.
Представители класса NP
o Задача поиска гамильтонова цикла
o Задача коммивояжёра
o Задача о рюкзаке
o Задача упаковки корзин
Класс сложности NP
15
Так как для любой задачи из P решение строится за
полиномиальное время, то
P ⊆⊆⊆⊆ NP
Пример недетерминированного полиномиального
алгоритма для решения задачи сортировки
o Шаг 1. Формируем случайную перестановку
элементов массива.
o Шаг 2. Проверяем является ли массив упорядоченным.
Шаги выполняются пока не будет получено корректное
решение.
Класс сложности NP
16
Недетерминированный
полиномиальный алгоритм для
решения задачи коммивояжёра
o Шаг 1. Формируем случайную
последовательность из n городов
(каждый раз будет получаться новая).
o Шаг 2. Вычисляем длину пути.
Класс сложности NP
17
Открытая проблема
P = NP
Вопрос поставлен независимо Л. Левиным (СССР, 1971)
и С. Куком (США, 1971).
Проблема равенства классов P и NP является одной из семи
задач тысячелетия, за решение которой Математический
институт Клэя назначил премию в миллион долларов.
Многие математики считают, что эти классы не равны.
Согласно опросу (2002 г., 100 учёных), 61 человек – “не
равны”, 9 – “равны”, 22 затруднились ответить и 8 считают,
что гипотеза не выводима из текущей системы аксиом и,
таким образом, не может быть доказана или опровергнута.
?
Сводимость задач
18
Задача принятия решения T1 называется
полиномиально приводимой (polynomially reducible) к
задаче принятия решения T2, если имеется функция t,
которая преобразует экземпляры T1 в экземпляры T2,
так, что
t отображает все экземпляры T1 с положительными
ответами в экземпляры T2 с положительными
ответами и все экземпляры T1 с отрицательными
ответами в экземпляры T2 с отрицательными ответами;
t выполняется (вычислима) алгоритмом
с полиномиальной трудоёмкостью.
Сводимость задач
19
Следствие. Если задача T1 полиномиально
приводима к задаче T2, которая является полиномиально
разрешимой, то задача T1 также может быть решена за
полиномиальное время.
NP-полные задачи
20
Задача T принятия решения является NP-полной
(NP-complete) если
o она принадлежит классу NP;
o любая задача в NP полиномиально приводима к
задаче T.
NP-полные задачи образуют класс NPC.
Примеры NP-полных задач
o Задача поиска гамильтонова цикла
o Задача коммивояжёра
NP-полные задачи
21
Доказательство NP-полноты задачи:
1. Показываем, что задача принадлежит классу NP
(проверка произвольного решения выполняется
за полиномиальное время)
2. Показываем, что какая либо NP-полная задача
приводится к данной.
Complexity Zoo
22
Решение трудноразрешимых задач
23
Задача упаковки корзин (bin packing problem, BPP).
Даны n предметов и их размеры – рациональные числа, не
превышающие 1. Требуется их разместить в наименьшее
количество корзин размером 1.
Эвристический алгоритм FFD – First Fit Decreasing.

More Related Content

Similar to Лекция 11: Методы разработки алгоритмов. Метод декомпозиции

Лекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиЛекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиMikhail Kurnosov
 
Lecture 06. Рекуррентные соотношения и числа Фибоначчи.
Lecture 06. Рекуррентные соотношения и числа Фибоначчи.Lecture 06. Рекуррентные соотношения и числа Фибоначчи.
Lecture 06. Рекуррентные соотношения и числа Фибоначчи.Vladimir Tcherniak
 
20091101 algorithmsfornphardproblems kulikov_lecture06
20091101 algorithmsfornphardproblems kulikov_lecture0620091101 algorithmsfornphardproblems kulikov_lecture06
20091101 algorithmsfornphardproblems kulikov_lecture06Computer Science Club
 
Lecture 1 Конечное и бесконечное в дискретной математике
Lecture 1 Конечное и бесконечное в дискретной математикеLecture 1 Конечное и бесконечное в дискретной математике
Lecture 1 Конечное и бесконечное в дискретной математикеVladimir Tcherniak
 
Алгебра и начала анализа (решение задач)
Алгебра и начала анализа (решение задач)Алгебра и начала анализа (решение задач)
Алгебра и начала анализа (решение задач)Eza2008
 
Автоматы и теория вычислений 1-2: 3 миникурса
Автоматы и теория вычислений 1-2: 3 миникурсаАвтоматы и теория вычислений 1-2: 3 миникурса
Автоматы и теория вычислений 1-2: 3 миникурсаIgor Kleiner
 
Лекция 4. Комбинаторика
Лекция 4. КомбинаторикаЛекция 4. Комбинаторика
Лекция 4. КомбинаторикаVladimir Tcherniak
 

Similar to Лекция 11: Методы разработки алгоритмов. Метод декомпозиции (8)

Лекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиЛекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачи
 
Lecture 06. Рекуррентные соотношения и числа Фибоначчи.
Lecture 06. Рекуррентные соотношения и числа Фибоначчи.Lecture 06. Рекуррентные соотношения и числа Фибоначчи.
Lecture 06. Рекуррентные соотношения и числа Фибоначчи.
 
20091101 algorithmsfornphardproblems kulikov_lecture06
20091101 algorithmsfornphardproblems kulikov_lecture0620091101 algorithmsfornphardproblems kulikov_lecture06
20091101 algorithmsfornphardproblems kulikov_lecture06
 
9 класс алгебра
9 класс алгебра9 класс алгебра
9 класс алгебра
 
Lecture 1 Конечное и бесконечное в дискретной математике
Lecture 1 Конечное и бесконечное в дискретной математикеLecture 1 Конечное и бесконечное в дискретной математике
Lecture 1 Конечное и бесконечное в дискретной математике
 
Алгебра и начала анализа (решение задач)
Алгебра и начала анализа (решение задач)Алгебра и начала анализа (решение задач)
Алгебра и начала анализа (решение задач)
 
Автоматы и теория вычислений 1-2: 3 миникурса
Автоматы и теория вычислений 1-2: 3 миникурсаАвтоматы и теория вычислений 1-2: 3 миникурса
Автоматы и теория вычислений 1-2: 3 миникурса
 
Лекция 4. Комбинаторика
Лекция 4. КомбинаторикаЛекция 4. Комбинаторика
Лекция 4. Комбинаторика
 

More from Mikhail Kurnosov

Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Mikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Mikhail Kurnosov
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Mikhail Kurnosov
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Mikhail Kurnosov
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Mikhail Kurnosov
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Mikhail Kurnosov
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Mikhail Kurnosov
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Mikhail Kurnosov
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Mikhail Kurnosov
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Mikhail Kurnosov
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Mikhail Kurnosov
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиMikhail Kurnosov
 

More from Mikhail Kurnosov (20)

Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимости
 

Лекция 11: Методы разработки алгоритмов. Метод декомпозиции

  • 1. Лекция 13: Трудноразрешимые задачи Курносов Михаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net
  • 2. Полиномиальные алгоритмы 2 Полиномиальный алгоритм (polynomial algorithm) – алгоритм, вычислительная сложность которого принадлежит классу O(nk), где k – константа. Алгоритмы с полиномиальной сложностью считаются быстрыми и применимыми на практике. Примеры o Сортировка выбором – O(n2) o Бинарный поиск – O(log2n) o Алгоритм Крускала – O(|E|log|V|)
  • 3. Легко разрешимые задачи 3 Легко разрешимая задача (простая задача, tractable problem) – задача решаемая алгоритмом с полиномиальной сложностью. Примеры o Задача сортировки o Задача поиска в минимального элемента в массиве o Поиск кратчайшего пути в взвешенном графе o Построение остовного дерева минимальной стоимости
  • 4. Трудноразрешимые задачи 4 Трудноразрешимая задача (intractable problem) – задача, которая не может быть решена за полиномиальное время (не известно полиномиального алгоритма).
  • 5. Теория вычислительной сложности 5 Центральным объектом теории являются задачи принятия решения (decision porblem). Задача принятия решения (задача распознавания, decision problem) – это задача, решение которой ответ “да” или “нет”. Алгоритм Входные данные (Input) Да Нет Теория вычислительной сложности (computational complexity theory) – раздел теоретической информатики, посвященный анализу вычислительной сложности алгоритмов.
  • 6. Задачи принятия решения 6 Примеры o По заданному графу определить является ли он связным. o Определить является ли заданное число простым. Многие задачи могут быть переформулированы как задачи принятия решения. Задачи принятия решения разбиты на классы сложности.
  • 7. Класс сложности P 7 Класс сложности P (polynomial) – это множество задач принятия решения, решаемых за полиномиальное время (для которых известны алгоритмы, с полиномиальной трудоемкостью). Представители класса P o Задача сортировки o Задача обхода графа в глубину o Задача поиска минимального элемента в массиве o Задача построения остовного дерева минимальной стоимости
  • 8. Классы сложности 8 Все ли задачи принятия решения являются полиноминально разрешимыми? Ответ: нет Существуют задачи, которые вообще не могут быть решены никаким алгоритмом – неразрешимые задачи. Задача останова (halting problem, A. Turing, 1939). Даны описание алгоритма и его начальные входные данные, требуется определить, сможет ли выполнение алгоритма с этими данными завершиться когда-либо. Проблема останова не разрешима на машине Тюринга.
  • 9. Трудноразрешимые задачи 9 Имеется большое количество задача, для которых не найден полиномиальный алгоритм и не доказана невозможность его существования. Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые задачи. – М.: Мир, 1982. – 416 с.
  • 10. Трудноразрешимые задачи 10 Гамильтонов цикл (hamiltonian cycle problem, HCP). Определить, имеется ли в заданном графе гамильтонов цикл – цикл включающий в себя каждую вершину ровно один раз.
  • 11. Трудноразрешимые задачи 11 Задача коммивояжёра (travelling salesman problem, TSP). Найти кратчайший путь (цикл) между заданными n городами. Через каждый город путь должен проходить один раз.
  • 12. Трудноразрешимые задачи 12 Задача упаковки корзин (bin packing problem, BPP). Даны n предметов и их размеры – рациональные числа, не превышающие 1. Требуется их разместить в наименьшее количество корзин размером 1.
  • 13. Класс сложности NP 13 Класс сложности NP (non-deterministic polynomial) – это множество задач принятия решения, решаемых недетерминированным полиномиальным алгоритмом. Структура недетерминированных полиномиальных алгоритмов: o Шаг 1. Недетерминированным алгоритмом с полиномиальной сложностью формируется возможное решение S экземпляра I задачи (для заданных входных данных). o Шаг 2. Полиномиальным алгоритмом проверяется является ли S корректным решением экземпляра I.
  • 14. Класс сложности NP 14 Класс сложности NP (non-deterministic polynomial) – это множество задач принятия решения, решаемых недетерминированным полиномиальным алгоритмом. Представители класса NP o Задача поиска гамильтонова цикла o Задача коммивояжёра o Задача о рюкзаке o Задача упаковки корзин
  • 15. Класс сложности NP 15 Так как для любой задачи из P решение строится за полиномиальное время, то P ⊆⊆⊆⊆ NP Пример недетерминированного полиномиального алгоритма для решения задачи сортировки o Шаг 1. Формируем случайную перестановку элементов массива. o Шаг 2. Проверяем является ли массив упорядоченным. Шаги выполняются пока не будет получено корректное решение.
  • 16. Класс сложности NP 16 Недетерминированный полиномиальный алгоритм для решения задачи коммивояжёра o Шаг 1. Формируем случайную последовательность из n городов (каждый раз будет получаться новая). o Шаг 2. Вычисляем длину пути.
  • 17. Класс сложности NP 17 Открытая проблема P = NP Вопрос поставлен независимо Л. Левиным (СССР, 1971) и С. Куком (США, 1971). Проблема равенства классов P и NP является одной из семи задач тысячелетия, за решение которой Математический институт Клэя назначил премию в миллион долларов. Многие математики считают, что эти классы не равны. Согласно опросу (2002 г., 100 учёных), 61 человек – “не равны”, 9 – “равны”, 22 затруднились ответить и 8 считают, что гипотеза не выводима из текущей системы аксиом и, таким образом, не может быть доказана или опровергнута. ?
  • 18. Сводимость задач 18 Задача принятия решения T1 называется полиномиально приводимой (polynomially reducible) к задаче принятия решения T2, если имеется функция t, которая преобразует экземпляры T1 в экземпляры T2, так, что t отображает все экземпляры T1 с положительными ответами в экземпляры T2 с положительными ответами и все экземпляры T1 с отрицательными ответами в экземпляры T2 с отрицательными ответами; t выполняется (вычислима) алгоритмом с полиномиальной трудоёмкостью.
  • 19. Сводимость задач 19 Следствие. Если задача T1 полиномиально приводима к задаче T2, которая является полиномиально разрешимой, то задача T1 также может быть решена за полиномиальное время.
  • 20. NP-полные задачи 20 Задача T принятия решения является NP-полной (NP-complete) если o она принадлежит классу NP; o любая задача в NP полиномиально приводима к задаче T. NP-полные задачи образуют класс NPC. Примеры NP-полных задач o Задача поиска гамильтонова цикла o Задача коммивояжёра
  • 21. NP-полные задачи 21 Доказательство NP-полноты задачи: 1. Показываем, что задача принадлежит классу NP (проверка произвольного решения выполняется за полиномиальное время) 2. Показываем, что какая либо NP-полная задача приводится к данной.
  • 23. Решение трудноразрешимых задач 23 Задача упаковки корзин (bin packing problem, BPP). Даны n предметов и их размеры – рациональные числа, не превышающие 1. Требуется их разместить в наименьшее количество корзин размером 1. Эвристический алгоритм FFD – First Fit Decreasing.