我遇到了问题!
我有一个简单的表格,其中包含player_1
,player_2
和played
。
+---------+----------+----------+
| player1 | player2 | played |
+---------+----------+----------+
| 1 | 2 | 1 |
| 1 | 3 | 2 |
| 1 | 4 | 1 |
| 1 | 5 | 0 |
| 1 | 6 | 0 |
| 2 | 3 | 3 |
| 2 | 4 | 2 |
| 2 | 5 | 1 |
| 2 | 6 | 3 |
| 3 | 4 | 1 |
| 3 | 5 | 2 |
| 3 | 6 | 0 |
| 4 | 5 | 3 |
| 4 | 6 | 1 |
| 5 | 6 | 3 |
+---------+----------+----------+
等等......有78条记录,因为总共有13名玩家。
我想要一个结果,告诉我哪些'匹配'最少播放。所以,例如一个人病了,不能上次玩,那个人和其他玩家之间玩的游戏较低。这个游戏更有可能出现在游戏中。
但是在每个结果中,显示我6场比赛(1名球员有一些休息时间),一个球员只能显示一次!但是,玩得最少的游戏也必须在结果中。 (好吧,最后一部分很简单,ORDER BY played ASC
,LIMIT 6
)...
我如何让每13名球员(好吧,没有球员)参加比赛?
一个不错的结果(好吧,现在我只想要3场比赛,因为在这个例子中只有6名球员)...... 每个玩家在这一轮中玩游戏,并通过对最少玩的游戏进行选择。剩下的就是填补。
+---------+----------+----------+
| player1 | player2 | played |
+---------+----------+----------+
| 1 | 5 | 0 |
| 2 | 4 | 1 |
| 3 | 6 | 0 |
+---------+----------+----------+
答案 0 :(得分:0)
您可以将此视为图形问题。 假设每个玩家都是一个节点,表格中的每个记录都代表一个弧线,一个加权弧线,重量为“已玩”,与弧线相连的两个玩家之间的比赛次数。
现在,您正在寻找的是一种算法,可以找到最少玩过的6场比赛(如果我理解正确的话,下一轮将参加6场比赛),前提是每位球员每轮只能进行一次比赛。 我建议使用贪心算法:
1. Sort arcs ascending.
2. While there are still arcs left.
2.1 Remove first arc and add to round_games.
2.2 Remove all arcs with any participating nodes in the previous arc.