Я смотрю на несколько проблем схожего формата, но разной сложности.Мы будем благодарны за полиномиальные (желательно относительно быстрые, но не обязательно) и даже за грубые решения любого из них.
Идея всех проблем состоит в том, что у вас есть взвешенный неориентированный граф,и что агент контролирует некоторые узлы графа в начале.Агент может получить контроль над узлом, если он уже контролирует два соседних узла.Агент пытается минимизировать время, затрачиваемое на управление определенным количеством узлов.Проблемы различаются по некоторым деталям.
(1) Вы получаете контроль над узлами по порядку (т.е. вы не можете захватить несколько узлов одновременно).Время, необходимое для управления узлом, определяется как минимум ребер из двух узлов, используемых для его управления.Цель состоит в том, чтобы взять под контроль каждый узел в графе.
(2) Опять же, вы получаете узлы по порядку, и цель состоит в том, чтобы взять под контроль каждый узел в графе.Время, необходимое для получения контроля над узлом, определяется как максимум двух узлов, используемых для его контроля.
(3) Либо (1), либо (2), но с целью получения контроляопределенного количества узлов, не обязательно всех из них.
(4) (3), но вы можете управлять несколькими узлами одновременно.В основном, скажем, узлы 2 и 4 используются для захвата узла 3 во времени 5. В течение этого времени 5, узлы 2 и 4 не могут использоваться для захвата узла, который не является узлом 3. Однако узлы 5 и 6например, может одновременно захватывать узел 1.
(5) (4), но с невзвешенным графиком.
Я начал с задачи (4).Я постепенно облегчил задачу от (4) до (3) - (2) - (1), надеясь, что из этого получу решение для (4).Наконец, я решил (1), но не знаю, как решить любой другой.Мое решение (1) состоит в следующем: из всех узлов-кандидатов, которые имеют два соседних узла, которые мы контролируем, просто выберите тот, который занимает наименьшее количество времени.Это похоже на алгоритм кратчайшего пути Дейкстры.Однако такого рода решение не должно решать ни одно из других.Я полагаю, что, возможно, решение для динамического программирования может работать, но я не знаю, как его сформулировать.Я также не нашел решения грубой силы ни для одной из 4 проблем.Также возможно, что некоторые проблемы не являются полиномиально разрешимыми, и мне было бы любопытно узнать, почему, если это так.
Идея для вопросов принадлежит мне, и я решаю для себяразвлекательная программа.Но я не удивлюсь, если это можно найти в другом месте.