2016-01-21 6 views
2

Это очень похоже на Assignment Problem, за исключением полного неориентированного графика, а не двудольного графа.Учитывая группу людей, где каждая пара имеет значение, как я могу найти конфигурацию пар с наименьшим общим значением?

неглупых, самая грубая сила-IEST решение что-то вроде этого:

  1. Получить все возможные конфигурации пар ...

    groups = people.combination(2).to_a.combination(people.size/2).to_a

  2. ... отвергая все конфигурации, которые содержат одно и то же лицо более одного раза.

    groups.reject! { |group| group.flatten.uniq.size < people.size }

  3. Затем найти конфигурацию с минимальным значением.

    groups.min_by { |group| group.inject(0) { |pair| value_for(pair) }

Есть модификация ветвей и границ решения для Assignment Problem, который принимает во внимание, что здесь, то Работа и Person являются как люди?

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

Как я могу получить наилучшее решение без жарки моего процессора?

Спасибо!

+0

Извините, что вы педантичны, но если каждая пара * людей имеет значение, то поиск пары с наименьшим значением тривиален - по-видимому, вам просто нужно выбрать структуру, которая сохраняет это значение? Я предполагаю, что вы имеете в виду что-то еще. –

+0

@ AndyJones Приношу свои извинения за то, что вы расплывчаты. Я не ищу пару с самым низким значением, я ищу, чтобы найти с надмножеством пар, имеет самое низкое общее значение. Скажем, у вас было десять человек, я хочу найти, какая из возможных конфигураций из 5 пар дает самое низкое общее количество. –

+1

Спасибо за это - я, наверное, единственный человек, читающий это, что не сразу понял! –

ответ