【发布时间】:2021-06-14 02:27:29
【问题描述】:
我正在尝试找出一个函数的逻辑,该函数将找到两个源数组之间元素的所有可能组合,而不重复任一数组中的任何元素。
换句话说,每个源数组中的元素都被视为有限资源。由此,构建对的组合,直到任一源数组的元素用完,然后是下一个对的组合,然后是下一个,直到所有排列都被考虑在内。
例如,
get_combinations( [1, 2, 3], ["a", "b", "c"] );
应该返回
[ [1, "a"], [2, "b"], [3, "c"] ],
[ [1, "a"], [2, "c"], [3, "b"] ],
[ [1, "b"], [2, "a"], [3, "c"] ],
[ [1, "b"], [2, "c"], [3, "a"] ],
[ [1, "c"], [2, "a"], [3, "b"] ],
[ [1, "c"], [2, "b"], [3, "a"] ]
]
(为清晰起见格式化)
我将把它用于一个基于 PHP 的项目,但我主要是在寻找一种算法,而不是一种特定于语言的实现。
以大小不等的数组为例,
get_combinations( [1, 2, 3, 4] and ["a", "b"] );
会回来
[ [1, "a"], [2, "b"] ], [ [1, "a"], [3, "b"] ], [ [1, "a"], [4, "b"] ],
[ [2, "a"], [1, "b"] ], [ [2, "a"], [3, "b"] ], [ [2, "a"], [4, "b"] ],
[ [3, "a"], [1, "b"] ], [ [3, "a"], [2, "b"] ], [ [3, "a"], [4, "b"] ],
[ [4, "a"], [1, "b"] ], [ [4, "a"], [2, "b"] ], [ [4, "a"], [3, "b"] ]
]
【问题讨论】:
-
所以结果只是第二个数组的所有排列,结合第一个数组的初始序列。很容易找到数组排列的 PHP 实现(对于相当小的数组是递归的,对于迭代方式的 next_permutation 方法)。还是你的问题真的更难?
-
如果两个数组的大小相同,就会这样。否则,它不会成立。
-
@Malkalypse,不需要相同的大小,也可以使用可变长度的数组。查看我给出的代码。
-
@Malkalypse 值得为不同大小的数组显示所需的结果。
-
我添加了一个不等大小数组的示例。