Есть ли алгоритм, чтобы найти лучший набор пар вершин в взвешенном графике без повторения?

StackOverflow https://stackoverflow.com/questions/4063282

Вопрос

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

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

Все веса положительны

Di не может думать о том, что лучше, чем грубая сила, но я не узнаю его как NP.

Это было полезно?

Решение

Один из способов решить эту проблему в многочленом времени заключается в следующем:

  1. Сортировка весов края в O (E log E) время
  2. Для каждого края назначьте ему псевдоэспин E '= 2 ^ {положение в порядке} в ~ O (E) времени
  3. Найдите минимальный вес, идеальное сопоставление среди псевдоэсмарс в чем-то вроде 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/

Другие советы

Попробуйте это (я просто подумал это, поэтому у меня нет ни доказательства того, что оно даст оптимальный ответ или будет ли он создаст решение в каждом случаях):

  1. Поиск самых тяжелых вершин V (A, B)
  2. Удалить вершину v от графика
  3. Если A подключен только к одной другой версии T (A, C), затем удалите все другие края, подключенные к C, повторите шаг 3 с этими краями
  4. Если B подключен только к одной другой версии S (B, D), затем удалите все другие края, подключенные к D, повторите шаг 4 с этими краями, а также
  5. повторить с шага № 1
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top