Скоро Codeforces Round 1133 (Div. 1, Div. 2)! Регистрация здесь. ×

Блог пользователя wackloner

Автор wackloner, 14 лет назад, По-русски

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

Теперь более официальное условие задачи: есть связный взвешенный неориентированный граф без петель и кратных ребер. Также есть список дел. Требуется из данной вершины S придти в F, при этом выполнив все дела из списка. Дело представляет из себя пару чисел si и fi — номера вершин в графе, для каждого дела нужно сначала посетить si, а затем посетить fi. Надо вывести длину минимального пути из S в F, который покрывает все дела, а также сам этот путь. Пусть будет N вершин, M ребер и K дел. Нужно найти самое оптимальное решение. UPD1: Дела необязательно делать последовательно, можно выполнять несколько дел одновременно в любом порядке, в этом и смысл задачи.

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

UPD2: в комментариях было сказано про метод отжига, статьи о нем можно почитать здесь. Я, если честно, не очень понял, если кто-то может подробно его описать на примере этой задачи, я буду очень благодарен.

  • Проголосовать: нравится
  • +7
  • Проголосовать: не нравится

»
14 лет назад, скрыть # |
← Rev. 3  
Проголосовать: нравится +2 Проголосовать: не нравится

Видимо алгоритм Дейкстры (O((n*n+m)*k) или O(m*log(n)*k)) или Флойда (O(n*n*n+k)), в зависимости от того, что выгоднее.

UPD1. Это будет точное полное решение. Наверное можно придумывать какие-то вероятностные решения, с некоторыми эвристиками и пр., но это не всегда будет 100% оптимально.

UPD2. Думаю, если задача будет отображена на жизнь и реальные карты местности (города), то граф будет разрежен и оптимальнее всего будет алгоритм Дейкстры, работающий за O(m*log(n)), то есть общая сложность алгоритма составит O(m*log(n)*k).

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Видимо в таких задачах метод отжига самое оптимальное.

»
14 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится

Точно она решается динамикой по подмножествам, аналогичной TSP, за что-то типа k222k.