我有一个包含N个元素的数组。我想选择它们的M K组合,使得元素尽可能均匀分布(也就是说,所有N个元素都有相同的次数,并且彼此配对(或三倍,或等)尽可能。
例如,这是微不足道的 - 或者至少很容易,如果耗费时间 - 手工执行以下值:
N = 8
M = 14
K = 4
有14 * 4个可能的斑点,8个元素中的每一个将出现14 * 4/8 = 7次。此外,每个元素将具有7 *(4-1)= 21'伙伴',这意味着其他7个元素中的每一个将以21/7 = 3次出现。类似地,由于每对出现三次,因此在这些组中留下3 *(4-2)= 6个点,其与其他6个元素完全填充。因此,每个元素出现7次,每对三次,并且每个三元组是唯一的,并且存在所有三元组。有一些关于从哪里开始构建这个集合的任意决定,这花了我大概十分钟来填补。
我想知道的是,对于一般情况,是否存在这样做的方法(最好是在Python中),或者至少是一种稍微不完美的组合的情况,例如I'我现在正在努力:
N = 12
M = 22
K = 6
之前的一些相同逻辑仍然有效。每个元素出现22 * 6/12 = 11次,每个元素有11 *(6-1)= 55个伙伴,所以其他11个元素中的每一个都与它配对5次。在这五个配对中,剩余5 *(6-2)= 20个点,其他10个元素各填充两次。因此每个元素出现11次,每对出现5次,每次出现两次。不幸的是,升级到下一步并不起作用,因为三元组有2 *(6-3)= 6个空白空间要填充9个剩余元素,所以虽然四元组应该是唯一的,但它们不是所有人都在场。
正如你所看到的那样,我已经尝试以数学的方式解决这个问题,但我希望有一种方法可以让Python为我做繁重的工作(和随机化)。有什么想法吗?