Skip to content

Latest commit

 

History

History
53 lines (38 loc) · 4.04 KB

README.md

File metadata and controls

53 lines (38 loc) · 4.04 KB

вернуться к оглавлению

Глава 8. Жадные алгоритмы

Жадные алгоритмы на каждом шаге выбирают локально-оптимальное решение,
в расчете на то, что в итоге получится глобально-оптимальное решение.

NP-ПОЛНЫЕ ЗАДАЧИ

ЗАДАЧА О КОММИВОЯЖЕРЕ

Условие: коммивояжер хочет объехать 5 городов - и сделать это за минимально
возможное время.

Решение: перебрать все возможные комбинации порядка объезда городов.
(для 5 элементов - 120 перестановок - n!).

Если городов много, то решение будет занимать слишком много времени,
как и в задаче покрытия множества.

У задачи о коммивояжере и задаче покрытия множества есть кое-что общее:
вы вычисляете каждое возможное решение и выбираете кратчайшее/мини мальное.
Обе эти задачи являются NР-полными (non-deterministic polynomial).
NP-полные задачи не имеют известных быстрых решений.

Жадное решение для задачи о коммивояжере: выбирать каждый раз самый
ближний город из еще непосещенных.

КАК ОПРЕДЕЛИТЬ, ЧТО ЗАДАЧА ЯВЛЯЕТСЯ NР-ПОЛНОЙ̆?

Обычно различия между легко решаемыми и NP-полными задачами не очень значительны.

Например, задача поиска кратчайшего пути между точками легко решается
поиском в ширину (или алгоритмом Дейкстры для взвешенных графов). Но если нужно
найти кратчайший путь между несколькими точками - это уже NP-полная
задача о коммивояжере.

Несколько характерных признаков:

  • ваш алгоритм быстро работает при малом количестве элементов,
    но сильно замедляется при увеличении их числа;
  • формулировка все комбинации х часто указывает на NР-полноту задачи;
  • вам приходится вычислять все возможные варианты Х, потому что задачу невозможно
    разбить на меньшие подзадачи? Такая задача может оказаться NР-полной;
  • если в задаче встречается некоторая последовательность (например,
    последовательность городов, как в задаче о коммивояжере) и задача не имеет
    простого решения, она может оказаться NР-полной;
  • если в задаче встречается некоторое множество (например, множество радиостанций)
    и задача не имеет простого решения, она может оказаться NР-полной;
  • можно ли переформулировать задачу в условиях задачи покрытия множества
    или задачи о коммивояжере? В таком случае ваша задача определенно является NР-полной.

Задача на покрытие в этой папке