假设有 20 个人,编号 1-20
现在我要给每个人分配 5 个整数,其值域是“ 1-20 中除了自身编号以外的数”。比如,我给 7 号分配的 5 个数字,要从 1-6 、 8-20 里选 5 个
并且,对于这 20 个人得到的全部 100 个数字, 1-20 中的每个数字恰好出现 5 次
现在,我需要一种随机分配数字的方案,在这个方案中,每一种符合上面描述的、合法的分配方式,都会有等同的概率出现
最 naive 的方式就是,按顺序分配随机数,如果发现生成的数字不符合规则,那就重新生成。但是这个方案有一个问题,就是可能会出现合法的数字都被用完了的情况,比如下面这个例子:
假设有 5 个人,每个人分配 3 个数字
1 | 2 3 4
2 | 1 3 4
3 | 1 2 4
4 | 1 2 3
5 | ?????(无法分配了,找不到合法的数字)
所以这个方法不对。有没有保证能生成合法方案的方法?
现在我要给每个人分配 5 个整数,其值域是“ 1-20 中除了自身编号以外的数”。比如,我给 7 号分配的 5 个数字,要从 1-6 、 8-20 里选 5 个
并且,对于这 20 个人得到的全部 100 个数字, 1-20 中的每个数字恰好出现 5 次
现在,我需要一种随机分配数字的方案,在这个方案中,每一种符合上面描述的、合法的分配方式,都会有等同的概率出现
最 naive 的方式就是,按顺序分配随机数,如果发现生成的数字不符合规则,那就重新生成。但是这个方案有一个问题,就是可能会出现合法的数字都被用完了的情况,比如下面这个例子:
假设有 5 个人,每个人分配 3 个数字
1 | 2 3 4
2 | 1 3 4
3 | 1 2 4
4 | 1 2 3
5 | ?????(无法分配了,找不到合法的数字)
所以这个方法不对。有没有保证能生成合法方案的方法?

