Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кратч пути1 .doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
2.98 Mб
Скачать

Лекция 10. Классификация задач по степени сложности

Quia impossibile et non probatum «Ибо это невозможно и не доказано» (лат)

В предыдущей главе мы убедились, что для решения задачи об эйлеровом цикле имеется прекрасный линейный алгоритм — его сложность O(m), т.е. линейно зависит от числа ребер.

В следующей главе мы рассмотрим задачу, очень похожую на задачу Эйлера. Она состоит в поиске цикла, проходящего через каждую вершину графа ровно один раз.

Эту задачу изучал ГАМИЛЬТОН, и в честь него она получила название задачи Гамильтона.

Рис. 25

Многие математики в течение нескольких веков занимались задачей Гамильтона.

До сих пор неизвестно ни одного простого необходимого и достаточного условия существования гамильтонова цикла, и до сих пор не построен алгоритм, который проверял бы существование гамильтонова цикла в произвольном графе за ПОЛИНОМИАЛЬНОЕ число шагов (число, ограниченное многочленом фиксированной степени от числа вершин графа).

В следующей главе мы рассмотрим алгоритм (неполиномиальный) для нахождения гамильтонова цикла. Сейчас нас интересует то, что мы столкнулись с задачей другой степени сложности.

Основное различие между МАТЕМАТИКОЙ и ИНФОРМАТИКОЙ заключается в том, что в информатике недостаточно иметь доказательство существования обьекта, недостаточно найти конструктивное доказательство этого факта, т.е. АЛГОРИТМ. Мы должны учитывать противоречия пространства и времени, которые навязывает нам мир: необходимо, чтобы решение можно было вычислить, используя обьем памяти и время, приемлемое для человека или машины.

Идеальный случай, когда для решения задачи известна явная математическая формула. Тогда сложность задачи не зависит от входных данных и является постоянной.

Если же мы не располагаем ни явной формулой, ни рекурсивным выражением приемлемой сложности, нам остается только два способа:

  • построение эффективного алгоритма;

  • метод перебора всех возможностей.

Сложность ЗАДАЧИ — сложность НАИЛУЧШЕГО алгоритма, известного для ее решения.

Сложность АЛГОРИТМА — число шагов, необходимых для решения НАИХУДШЕГО из всех возможных случаев, допускающих применение алгоритма.

Это число выражается как функция от РАЗМЕРНОСТИ входных данных задачи — например, числа вершин графа.

Сразу возникает вопрос — если сложность задачи зависит от нашего знания «хороших» алгоритмов, до какого предела можно улучшать данный алгоритм?

Существуют ли методы перевода задачи из класса «сложных» в класс «простых»?

ТРИ КЛАССА ЗАДАЧ

Самыми лучшими являются линейные алгоритмы порядка O(n), где n — размерность входных данных, например алгоритм поиска эйлеровых циклов в графе.

Другие «хорошие» алгоритмы имеют сложность, представляющую собой многочлен заданной степени, не зависящей от входных данных:

О(n * m), O(n2), O(n3) и т.д.

Все до сих пор изученные нами алгоритмы относятся к КЛАССУ Р ПОЛИНОМИАЛЬНЫХ АЛГОРИТМОВ.

Есть задачи, которые по своей природе имеют экспоненциальную сложность порядка An, где A — константа или полином от n.

Это задачи, в которых требуется построить все подмножества данного множества, все клики (полные подграфы) данного графа и т.д. Число ответов в этих задачах уже само по себе экспоненциально, поэтому только их перечисление потребует экспоненциальное число шагов.

КЛАСС Е: ЭКСПОНЕНЦИАЛЬНЫЕ ЗАДАЧИ.

Остаются задачи, не попавшие ни в класс Р, ни в класс Е. В их условиях не содержатся экспоненциальные множества, для них не разработан полиномиальный алгоритм, но и не доказано, что такого алгоритма не существует.

Вот неполный список таких задач. (В приложении 1 содержатся точные математические постановки 25 различных задач.)

  • Решение систем уравнений в целых числах.

  • Определение гамильтонова цикла.

  • Составление расписаний и раскрасок.

  • Существование множества значений логических переменных, которые позволяют сделать значение произвольного заданного логического выражения истинным.

  • Оптимизация пути коммивояжера через сеть городов.

  • Отбор файлов при запросе в информационный банк данных для получения информации с наименьшей стоимостью.

  • Размещение обслуживающих центров для максимального числа клиентов при минимальном числе центров.

  • Оптимальная загрузка емкости, оптимальный раскрой.

  • Диагностика (болезни, поломки).

Этот список далеко не полон, т.к. большая часть современных задач относится к этому классу. Кроме того, названные задачи являются МОДЕЛЬНЫМИ. Каждой из них соответствует несколько реальных формулировок:

  • упорядочение операций;

  • размещение персонала;

  • оптимизация перевозок;

  • управление производством;

  • проектирование в области электроники.

Более того, для большинства этих задач (так называемых NP-полных задач) была доказана ЭКВИВАЛЕНТНОСТЬ — если для одной из них удастся найти полиномиальный алгоритм, автоматически будут решены все остальные.

Назовем его КЛАСС NP: недетерминированные полиномиальные задачи.

К сожалению, детальное обсуждение этих задач выходит за рамки данной главы, но при практическом изучении подобных задач нужно помнить следующее:

  1. Для небольших n экспоненциальный алгоритм часто более эффективен, чем полиномиальный.

  2. Для реальных задач с уточненными данными всегда можно построить полиномиальный алгоритм. Единственное, что утверждает теория — не существует единого полиномиального алгоритма для общего случая.

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