我有三个数组:
$a
有五个元素,$b
&c
有四个元素。
的每个成员必须与来自或$a
的成员随机配对三次。但是,来自和的每个元素都必须与来自其他两个数组的恰好五个元素随机配对。$b
$c
$b
$c
这些配对中的每一个都必须是唯一的,并且一个元素不能与其自身配对。
例如:
$a = array('a1', 'a2', 'a3', 'a4', 'a5');
$b = array('b1', 'b2', 'b3', 'b4');
$c = array('c1', 'c2', 'c3', 'c4');
的配对a1
可能如下所示:
'a1', 'b3'
'a1', 'b4'
'a1', 'c2'
的配对c3
可能看起来像
'c3', 'a2'
'c3', 'b3'
'c3', 'a4'
因此,我再次尝试进行随机配对:
- 一个元素必须与其他数组中的元素匹配(因此它们不能匹配自己)。它们可以是任何一个中的任意数量。
- 每个匹配项必须是唯一的
- 元素 in
$a
必须精确匹配 3 次,元素 in$b
or$c
必须精确匹配五次,除了(编辑!)其中一个元素$c
只能匹配四次。
我找到了一个解决方案,它基本上通过对数组进行洗牌并检查它们是否排列整齐,但显然这非常慢——大约需要 100-5000 次尝试才能获得一个有效的解决方案。由于这是用于将发生数千/数百万次的模拟,因此不会削减它。我希望有一种方法可以在第一次尝试时生成这些配对。