2016-01-21 23 views
2

它非常像Assignment Problem,除了完整的無向圖而不是雙向圖。給定一組人,每對具有價值,我怎麼才能找到總配價最小的配對配置?

最愚蠢,最暴力,最醜陋的解決方案是這樣的:

  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的修改,該工作人?

難道還有另一個組合問題,它與我提出的更接近嗎?

如何在不炒我的CPU的情況下獲得最佳解決方案?

謝謝!

+0

不好意思,但是如果每個人都有一個價值,那麼找到最低價值的貨幣是微不足道的 - 大概你只需要選擇存儲該價值的結構呢?我猜你的意思是別的。 –

+0

@AndyJones對於模糊我很抱歉。我不是在尋找具有最低價值的貨幣對,我正在尋找超貨對的總價值最低。假設你有十個人,我想找出5對中哪一個可能的配置產生最低的總和。 –

+1

感謝您的支持 - 我可能是唯一一位閱讀過此文的人,但並未立即明白! –

回答

相關問題