Компания
67,84
рейтинг
2 апреля 2013 в 14:15

Разработка → Теоретическая информатика в Академическом Университете

Я хочу описать историю одного заносчивого и самовлюбленного студента Академического Университета, коим я, конечно, не являюсь, но хорошо представляю его мысли и переживания. Будем называть этого студента, например, Шурик. На момент поступления Шурика в Академический Университет (АУ), согласно его программистскому резюме, он уже был экспертом в области алгоритмов. Он мастерски владел алгоритмом поиска в глубину, знал несколько методов сортировки массивов, и имел представление о двоичном поиске. Естественно, курс алгоритмов его не интересовал совершенно, да и вообще, мало чему можно научить программиста с пятилетним опытом. Программа теоретической информатики АУ его заинтересовала тем, что в темах по известным ему предметам было слишком много неизвестных ему слов. Но это же Питер, там они и бордюр то странным словом называют, вероятно, и для поиска в глубину красивых слов понавыдумывали. Он тщательно изучил слайды и видеозаписи курсов. Оказалось, что существует какая-то там информатика, которой Шурик не владеет в совершенстве. Шурик собрал книги, носки и пять лет опыта, и отправился в Питер на собеседование. Там он встретил людей, которые могут научить чему-то даже программиста с таким опытом. Это все рушило Шурикову картину мира, в которой знание информатики измерялось количеством написанных классов на C#.
Во время учëбы в магистратуре Шурик занимался исследованиями в области схемной сложности и области экспоненциальных алгоритмов. Это действительно очень интересно и, что не менее важно, полезно для поступления в аспирантуру.
На данный момент Шурик является счастливым аспирантом New York University, использует слово «поребрик», и с глубокой благодарностью вспоминает Академический Университет. А кафедра математических и информационных технологий АУ и сейчас ведет набор новых магистрантов, в частности, по направлению «теоретическая информатика».
Сейчас я передаю слово Шурику, который и расскажет об одном своëм исследовании.


Алгоритмы для NP-трудных задач


NP-трудные задачи — это задачи, часто встречающиеся на практике, для которых неизвестны эффективные алгоритмы решения. Исследование таких задач представляет большой интерес, т.к. существование эффективного алгоритма для любой из таких задач влечет существование эффективных алгоритмов для всех задач из класса NP. И, наоборот, если мы сможем доказать, что хотя бы для одной из таких задач не существует эффективного алгоритма, то это будет означать, что таких алгоритмов не существует для всех NP-трудных задач. В магистратуре АУ мы исследовали точные и приближенные алгоритмы решения некоторых NP-трудных задач. Например, нам удалось получить новые алгоритмы решения задачи о максимальной выполнимости, задачи о коммивояжëре, и задачи о кратчайшей общей надстроке. Далее я хочу описать один из этих алгоритмов, а именно алгоритм приближëнного решения задачи о коммивояжëре.
image
NP-трудная задача оптимизации — это NP-трудная задача, в которой среди всех возможных решений нужно выбрать оптимальное в каком-то смысле решение. Например, найти кратчайший цикл, проходящий через каждую вершину заданного взвешенного графа ровно один раз. Возможно, существует множество способов обойти граф, проходя по каждой вершине ровно один раз, но нас интересуют только те обходы, которые минимальны по весу. Эта задача называется задачей коммивояжëра. Время работы лучших известных алгоритмов для этой задачи в худшем случае примерно равно . Мы занимались ускорением алгоритмов для задач такого рода. Например, алгоритм, который работает за время , позволит решать задачу для больших значений n. Интересно заметить, что покупка компьютера, работающего в 1000 раз быстрее, не даст такого ускорения, как новый алгоритм с меньшей экспонентой во времени выполнения. Существование полиномиального алгоритма для этой задачи повлечет равенство классов P и NP, а доказательство отсутствия такого алгоритма будет означать, что эти классы не равны.

Задача коммивояжëра


Гамильтонов цикл графа — это цикл, проходящий по каждой вершине графа ровно один раз. Задача коммивояжёра (traveling salesman problem, TSP) заключается в поиске гамильтонова цикла минимального веса в заданном взвешенном графе. Обозначим через n количество вершин исходного графа, а через M — максимальный вес ребра. Существует множество методов решения задачи о коммивояжëре на практике, но в этой статье мы будем говорить только о теоретических алгоритмах с доказуемыми оценками на время работы в худшем случае.
image

Точные алгоритмы решения задачи о коммивояжëре


В 1962 году был разработан алгоритм динамического программирования, решающий TSP за время , но при этом используя экспоненциальную память. Лучший известный алгоритм, использующий лишь полиномиальную память, имеет время работы . Также известны промежуточные результаты, например, для любого , существует алгоритм решения задачи со временем работы , использующий память , где . Известны алгоритмы, основанные на формуле включений-исключений, решающие задачу за время , используя память . скрывает полиномиальные множители от длины входа, т.е. . Для неориентированного случая TSP существует Монте-Карло алгоритм со временем работы и экспоненциально маленькой вероятностью ошибки.

Уже более пятидесяти лет открытыми являются следующие вопросы:
  1. Существование алгоритма для TSP со временем работы и полиномиальной памятью.
  2. Существование алгоритма для TSP со временем работы для общего (ориентированного) случая задачи о коммивояжëре.


Приближëнные алгоритмы решения задачи коммивояжëра


Известно, что в предположении , общая TSP не может быть приближена с любым полиномиально вычислимым фактором. То есть, в этом предположении, нельзя найти не только 10-приближение оптимального решения, но и даже n!-приближение. Частный случай, в котором веса рëбер графа удовлетворяют неравенству треугольника, называется метрической задачей коммивояжëра. Для неориентированной метрической задачи известно 1.5-приближение. Ещë для этого частного случая известно, что в предположении , нельзя найти полиномиальный алгоритм с приближением лучше (в ориентированном случае — ). Для ориентированной метрической версии задачи фактор приближения был недавно улучшен до .

Приближение за экспоненциальное время


Мы предлагаем алгоритм, который для любого фиксированного использует шагов и полиномиальную память для вычисления -приближения ориентированной метрической задачи коммивояжёра. Как было указано выше, лучшее известное полиномиальное приближение даже для неориентированной метрической версии TSP — 1.5 (для ориентированной — ).
Если , то за полиномиальное время не может быть найдено -приближение неориентированной метрической TSP.
Если нам необходимо, например, -приближение, то мы должны использовать точные алгоритмы, которые требуют либо экспоненциальную память, либо время . Экспоненциальные алгоритмы редко используются на практике, но в любом случае, мы способны их запустить и ждать ответа. Однако, если алгоритм использует экспоненциальную память, то мы не имеем возможности даже запустить алгоритм на входах разумного размера.
Предложенный алгоритм может найти -приближение общей TSP за время , используя лишь полиномиальную память.

Разработанный алгоритм использует идею, предложенную для построения полностью полиномиальной приближённой схемы для задачи о рюкзаке в работе Ibarra, Kim. Авторы используют псевдополиномиальный алгоритм для задачи о рюкзаке, работающий за время , где n — количество предметов, а W — вместимость рюкзака.
Полностью полиномиальная схема приближения задачи о рюкзаке сначала делит веса всех предметов на , затем вызывает псевдополиномиальный алгоритм. Полученный ответ может не оказаться оптимальным, т.к. некоторые веса не просто поделены на , но и округлены. Однако простой анализ показывает, что округление не сильно сказывается на результате.

Мы используем похожую идею. Через OPT обозначим оптимальное рещение TSP. Для того, чтобы получить полиномиальный по памяти приближённый алгоритм, мы сначала разделим веса всех рёбер на достаточно большое число , затем запустим точный алгоритм, основанный на формуле включений-исключений. Время работы полученного алгоритма будет равно и длина полученного цикла будет не больше . Теперь мы хотим выбрать так, что и . Метрическая версия TSP может быть приближена за полиномиальное время, например, с фактором . То есть, мы можем найти , что и взять . Тогда полученный алгоритм будет иметь время работы и использовать память . Нам также удалось обобщить этот результат для случая общей (неметрической ориентированной) задачи коммивояжëра.
Автор: @AlexGl
СПБАУ
рейтинг 67,84

Комментарии (7)

  • +2
    Ух ты как интересно, ощущаю себя таким вот Шуриком, но до поступления.
  • 0
    А есть ли ссылка на наукообразный двухколоночный pdf Вашей работы на Springerlink или еще где-нибудь? Охота почитать поподробнее, а то в свое время в универе был курс по динамическому программированию, но задачу коммивояжера, кроме как методом ветвей и границ, не упрощали.
    • +2
      Да, конечно. Если Вам хочется почитать именно алгоритм динамиеского программирования, то его можно найти здесь: Bellman (1962) и здесь Held, Karp (1971). Алгоритм из статьи можно почитать здесь.
      • 0
        Спасибо.
  • +1
  • 0
    А что такое О большое со звездочкой?
    • 0
      скрывает полиномиальные множители от длины входа, т.е. . Этим мы просто хотим сказать, что нам не очень интересно оценивать какой именно полином стоит перед .

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

Самое читаемое Разработка