Есть ли алгоритм, чтобы найти лучший набор пар вершин в взвешенном графике без повторения?
-
27-09-2019 - |
Вопрос
Существует ли какой-либо эффективный алгоритм, чтобы найти набор краев с следующими свойствами, в полном взвешенном графе с четным количеством вершин.
- Набор имеет самый маленький, максимальный вес край для любого набора, который может мясо другим критериям
- Каждая вершина подключена к одному краю в наборе
Все веса положительны
Di не может думать о том, что лучше, чем грубая сила, но я не узнаю его как NP.
Решение
Один из способов решить эту проблему в многочленом времени заключается в следующем:
- Сортировка весов края в O (E log E) время
- Для каждого края назначьте ему псевдоэспин E '= 2 ^ {положение в порядке} в ~ O (E) времени
- Найдите минимальный вес, идеальное сопоставление среди псевдоэсмарс в чем-то вроде o (v ^ 3) времени (в зависимости от алгоритма, которую вы выбираете, это может быть медленнее или быстрее)
Это сводит к минимуму самое большое преимущество, что идеальное соответствие содержит, что именно то, что вы ищете в чем-то вроде o (v ^ 3).
Источники для того, как сделать часть 3 приведены ниже
[1] http://www2.isye.gatech.edu/~wcook/papers/match_ijoc.pdf.
[2] http://www.cs.cillinois.edu/class/sp10/cs598csc/slectures/lecture11.pdf.
[3] http://www.cs.ucl.ac.uk/staff/v.kolmogorov/papers/blossom5.ps.
С образцом источника C ++ доступно в http://ciju.wordpress.com/2008/08/10/min-cost-perfect-matching/
Другие советы
Попробуйте это (я просто подумал это, поэтому у меня нет ни доказательства того, что оно даст оптимальный ответ или будет ли он создаст решение в каждом случаях):
- Поиск самых тяжелых вершин V (A, B)
- Удалить вершину v от графика
- Если A подключен только к одной другой версии T (A, C), затем удалите все другие края, подключенные к C, повторите шаг 3 с этими краями
- Если B подключен только к одной другой версии S (B, D), затем удалите все другие края, подключенные к D, повторите шаг 4 с этими краями, а также
- повторить с шага № 1