我在想法如何实现一个小项目时运行了一些。
我拥有的东西:
- 用户列表,包括其ID和名称
我想要实现的目标:
- 我想将此列表中的每个用户与另一个用户组合在一起,这样就不会将用户分配给多个用户,也不会为自己分配任何用户。
- 组合必须是随机的,并且必须考虑过去的组合
到目前为止我的想法:
- 我有这个信息:
用户(A,B,C,D)(实际用户数在50到400之间)
可能的组合:(A-B,A-C,A-D,B-C,B-D,C-D)
随机抽取(1):( A-B,C-D)
随机抽取(2):( A-D,B-C)
随机抽取(3):( A-C,B-D)
我不能做的事:
- 我不知道如何从可能的组合列表中随机抽取,使得每个用户每次抽奖只有一个组合的一部分(例如,不允许A-B,同一抽签中的A-D)
- 我尝试使用sql或一点点php(也许是javascript)
感谢您的帮助。
答案 0 :(得分:0)
一个简单的解决方案:
为每个配对创建一个临时表,其中包含一行。循环遍历用户列表,从1跳到空行数的空行 - 插入用户。
简易解决方案2:
给予N个用户。为每个用户分配一个从1到N的唯一随机数(从1到N的所有数字的集合中随机删除)。将每个用户与1-N / 2配对,用户从N / 2 + 1到N.
答案 1 :(得分:0)
解决方案是问题“Bergr(s)表”,请参阅维基百科:http://en.wikipedia.org/wiki/Round-robin_tournament。
最新(最佳)解决方案来自Frončeka教授(Dalibor Froncek,美国明尼苏达大学教授)。
对于自定义解决方案,请查看解决方案表n ^ 2.