2011-04-13 45 views
5

尋找算法或代碼,如果有人感到慷慨的做下列事情。我需要爲一些球員提供投入。球員人數總是4的因素。我想把每個球員分成4個組,並且重複次數最少。最初的安置是微不足道的:分組算法 - 比賽

1 2 3 4 Table 1 
5 6 7 8 Table 2 
9 10 11 12 Table 3 
13 14 15 16 Table 4 
17 18 19 20 Table 5 
21 22 23 24 Table 6 

因此,玩家1-4彼此「看到」過一次。每個人都玩他們的遊戲,然後玩家被洗牌。在接下來的傳球(以及其後的傳球)中,我想重新排列球員,使他們的重疊最少。基本上,我想阻止玩家儘可能長時間看到反覆的表情,一旦不再可能,我想盡可能地減少它。

我覺得這應該是一個相對簡單的算法,但是我最終採取的每一種方法都覺得它的權重本身有利於首先被處理的人......而我的直覺/頭腦告訴我,正確答案。

爲了清楚起見,沒有人被淘汰,他們只是每次洗牌。

+1

對於您來說,至少發佈您嘗試過的內容是非常典型的,所以我們不會建議已經排除的內容。你也沒有說明你在用什麼語言,所以我不能提出一個想法。 – 2011-04-13 15:07:56

+0

我正在使用C++,但並不特別關心它所處的語言。我對思考過程/僞代碼更感興趣。我最初採取的一般方法是循環訪問每個「玩家」,並讓他們坐在與之前坐在一起的人數最少的人羣中。但是我認爲這對那些較低級的玩家來說很重要。我可以使用任何Java/C/C++/.NET/PHP建議。 – JamesB41 2011-04-13 15:13:11

+0

你需要多少回合? – Svante 2011-04-13 15:47:38

回答

3

這基本上是社會高爾夫球員問題。組合優化文獻中有許多算法。

+0

謝謝。這足以繼續。 – JamesB41 2011-04-13 21:23:51