我正在寻找一个特定的算法是否已经存在。我想在应用程序中使用它,但是我也看到了一些Euler项目的问题。
我正在寻找一种特定类型的排列/输出集,其中选择的下一项 必须 是仅来自下一组的有限选项中的一项。
例如,说我有3个数组
$a1 = array("a", "b", "c"); $a2 = array("d", "e", "f"); $a3 = array("g", "h", "i");
我期待以产生含有序列中的所有的可能性 从每个阵列至多1个元件 , 以便选择 。也就是说,作为输出,我希望看到:
adg aeg afg adh aeh afh adi aei afi bdg beg bfg bdh beh bfh bdi bei bfi cdg ceg cfg cdh ceh cfh cdi cei cfi
寻找用PHP或Javascript实现该算法。本质上,它将遍历包含可变数量元素的可变数量数组,并输出可能按顺序出现的所有序列序列。
是否存在?
如果是这样,它叫什么?从技术上讲,这并不是我所了解的排列或组合。
编辑:丹尼尔·菲舍尔(Daniel Fischer)告诉我这是笛卡尔积,这是从PHP网站获取的一种实现:
function array_cartesian_product($arrays) { $result = array(); $arrays = array_values($arrays); $sizeIn = sizeof($arrays); $size = $sizeIn > 0 ? 1 : 0; foreach ($arrays as $array) $size = $size * sizeof($array); for ($i = 0; $i < $size; $i ++) { $result[$i] = array(); for ($j = 0; $j < $sizeIn; $j ++) array_push($result[$i], current($arrays[$j])); for ($j = ($sizeIn -1); $j >= 0; $j --) { if (next($arrays[$j])) break; elseif (isset ($arrays[$j])) reset($arrays[$j]); } } return $result; }
这是笛卡尔乘积,如果从每个列表/数组中仅选择一项,则更确切地说是笛卡尔乘积的元素列表。对于列表,它在Haskell的标准库中:
Prelude> sequence ["abc","def","ghi"] ["adg","adh","adi","aeg","aeh","aei","afg","afh","afi","bdg","bdh","bdi","beg","beh" ,"bei","bfg","bfh","bfi","cdg","cdh","cdi","ceg","ceh","cei","cfg","cfh","cfi"]
我认为对于PHP或Javascript,您必须自己编写代码。