我怎样才能获得多组 4 个数组,其中包含来自其他 2 个数组的元素,而没有元素在同一个数组中两次


How can I get multiple set of 4 arrays with the elements from 2 other arrays with no elements that be in the same array twice

//2 initial arrays
var $m = ["m1","m2","m3","m4","m5","m6","m7","m8"];
var $f = ["f1","f2","f3","f4","f5","f6","f7","f8"];
4 个数组

集中的每个数组必须包含数组$m中的 2 个元素和数组$f中的 2 个元素

//first set of 4 arrays
var $group1a = ["m1", "m2", "f1", "f2"];
var $group2a = ["m3", "m4", "f3", "f4"];
var $group3a = ["m5", "m6", "f5", "f6"];
var $group4a = ["m7", "m8", "f7", "f8"];

我需要再创建几组 4 个数组,其中没有元素在同一数组中两次。例如

var $group1b = ["m1", "m3", "f6", "f7"]; // this is correct.
var $group1b = ["m1", "m3", "f1", "f4"]; // this is incorrect because m1 and f1 be in the same array again.
$group1b = ["m1", "m2", "f3", "f6"];// is incorrect because m1 and m2 already be together in $gorup1a. 
$group1b = ["m1", "m3", "f5", "f6"];// is incorrect because f5 and f6 already be together in $group3a
$group2b = ["m2", "m4", "f1", "f2"]; // is incorrect because f1 and f2 already be together in $group1a

我正在考虑为 2 个初始数组中的每个元素创建变量,以跟踪它们与哪些元素分组。

此问题类似于从一组唯一值中选取唯一的随机子集,不同之处在于此问题中的值集是对 ([m1, f1], [m2, f2], ...(,并且集合必须是唯一的。因此,您需要首先选择一个具有唯一值的唯一集,然后验证您是否尚未使用该集。

这个问题与一些非常困难的数学密切相关。这是基于 4 阶有限仿射平面且坐标在 (Z/2([x]/(1 + x + x2( 中的 8 和 8 的最佳显式构造,使用 $m = ["A", "B", "C", "D", "E", "F", "G", "H"]$f = ["a", "b", "c", "d", "e", "f", "g", "h"]

  • ABCD, EFGH, abcd, efgh
  • AEae, BFbf, CGcg, DHdh
  • AFch, BEdg, CHaf, DGbe
  • AGdf, BHce, CEbh, DFag
  • AHbg, BGah, CFde, DEcf

很抱歉,根本不清楚如何概括这个解决方案。块设计也经常出现这种情况。

这是仿射平面,供参考。

      0   1   x  1+x
     ---------------
 0  | A   B   C   D
 1  | E   F   G   H
 x  | a   b   c   d
1+x | e   f   g   h

由于没有简单的算法,因此我必须使用蛮力方法在创建新数组时通过遍历所有以前的子数组来检查重复项。到目前为止,它有效。