选择列表元素的随机组合,使得列表元素不会出现在多个选择中 (SQL)

发布于 2024-12-11 13:28:23 字数 606 浏览 0 评论 0原文

我对如何实现一个小项目已经有点没有想法了。

我拥有的:
- 用户列表,包括他们的 ID 和姓名

我想要实现的目标:
- 我想将此列表中的每个用户与另一个用户合并,这样就不会将任何用户分配给多个用户,也不会将任何用户分配给她自己。 - 组合必须是随机的,并且必须考虑过去的组合

到目前为止我的想法:
- 我有以下信息:

用户(A、B、C、D)(实际用户数范围在 50 到 400 之间)
可能的组合:(AB、AC、AD、BC、BD、CD)
随机抽奖(1): (AB, CD)
随机抽奖(2): (AD, BC)
随机抽取(3):(AC,BD)

  • 我能够使用用户表与其自身的联接来获得所有可能的组合。
  • 我想我可以通过将抽奖存储在单独的表中来考虑以前的抽奖,并将可能的组合限制为不在此特殊表中的组合。

我不能做什么:
- 我不知道如何从可能的组合列表中随机抽奖,以便每个用户每次抽奖都只属于一个组合(例如不允许在同一抽奖中AB、AD)
- 我尝试使用 sql 或一点 php(也许是 javascript)

感谢您的帮助。

I'm running a bit out of ideas how to realize a small project.

What I have:
- a list of users including their ID and name

What I want to achieve:
- I want to combine each user on this list with another user such that no user is assigned to more than one user and no user is assigned to herself.
- The combination has to be random and has to take past combinations into account

My idea so far:
- I have this information:

User (A,B,C,D) (the actual number of users ranges between 50 and 400)
Possible combinations: (A-B,A-C,A-D,B-C,B-D,C-D)
Random draw(1): (A-B, C-D)
Random draw(2): (A-D, B-C)
Random draw(3): (A-C, B-D)

  • I was able to get all possible combinations using a join of the user table with itself.
  • I guess I can take previous draws into account by storing the draws in a separate table and limit the possible combinations to those that are not in this special table.

What I can't do:
- I don't know how to randomly draw from the list of possible combinations such that every user is part of only one combination per draw (e.g. A-B,A-D in the same draw is not allowed)
- I try to use sql or a bit php for this (maybe javascript)

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

若言繁花未落 2024-12-18 13:28:23

一个简单的解决方案:

创建一个临时表,其中每个配对都有一行。循环遍历用户列表,跳过从 1 到空行数的随机数量的空行 -- 插入用户。

简单的解决方案 2:

给定 N 个用户。为每个用户分配一个从 1 到 N 的唯一随机数(从 1 到 N 的所有数字的集合中随机删除)。将每个用户从 1-N/2 与从 N/2+1 到 N 的用户配对。

An easy solution:

Create a temporary table with a row for each pairing. Loop over the list of users skipping a random number of empty rows from 1 to the number of empty rows -- insert user.

Easy solution number 2:

Given N users. Assign each user a unique random number from 1 to N (remove randomly from the set of all numbers from 1 to N). Pair each user with from 1-N/2 with user from N/2+1 to N.

灯下孤影 2024-12-18 13:28:23

解决办法就是问题“Bergr(s)表”,参见维基百科:http://en.wikipedia .org/wiki/Round-robin_tournament

最新(最好)的解决方案来自Frončeka教授(Dalibor Froncek,美国明尼苏达大学教授)。

对于自定义解决方案,请查看解决方案 n ^ 2 表。

The solution is the problem "Bergr (s) table", see Wikipedia: http://en.wikipedia.org/wiki/Round-robin_tournament.

The latest (best) solution is from Professor Frončeka (Dalibor Froncek, a professor at the University of Minnesota in the US).

For custom solutions, look in the table of solutions n ^ 2.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文