请教一个二维数组元素组合的算法
程序员文章站
2022-06-13 14:06:33
...
$arr = array( array('a','b','c'), array('c','f'), array('g','z'), array('x','y'));//$arr子集元素长度可能会多一些//将$arr的子集元素与$arr其他子集元素两两组合或者三三四四组合//子集array('a','b','c')中的元素不需要组合//两两组合$newarr = array( array('a','c'), array('a','f'), array('b','c'), array('b','f'), array('c','c'), array('c','f'), ……)//三三组合$newarr = array( array('a','c','g'), array('a','f','g'), array('b','c','g'), array('b','f','g'), array('c','c','g'), array('c','f','g'), ……)//四四组合$newarr = array( array('a','c','g','x'), array('a','f','g','x'), array('b','c','g','x'), array('b','f','g','x'), array('c','c','g','x'), array('c','f','g','x'), ……)
用一个函数可以实现吗?
//$arr:原始数组,$cNum:组合长度function getCombination($arr,$cNum){ ……}
回复讨论(解决方案)
你把一个 Combination(n 取 m 的组合)和一个 Descartes(笛卡尔积)函数揉和在一起就可以了
其实并不需要只写成一个函数,写成一个反而失去了普遍性
我一开始也是想到,先取符合长度的数组,再求笛卡尔积
先用递归,再求积,最后合并数组?
如果是这样,那么
function getCombination($arr, $cNum) { $res = array(); foreach( Combination($arr, $cNum) as $item) { $res = array_merge($res, Descartes($item)); } return $res;}就可以了
两个函数的可能写法是
function Combination( $arr, $num=0) { $arr = array_values($arr); $len = count($arr); if($num $len) $num = $len; $res = array(); for($i=1,$n=pow(2, $len); $i常用的算法都应写成函数,形成代码库。在需要时调用,不必每次都写
常用的算法都应写成函数,形成代码库。在需要时调用,不必每次都写
谢谢版主,睡觉的,马上就看您写的,学习学习再学习
推荐阅读
-
JS实现二维数组元素的排列组合运算简单示例
-
PHP将二维数组某一个字段相同的数组合并起来的方法
-
数据算法使给定的一个二维数组(3×3)转置
-
JS实现二维数组元素的排列组合运算简单示例
-
算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不
-
Java获得一个数组的指定长度排列组合算法示例
-
php 统计二维数组中某个相等值的总个数,而且组合成一个新的数组
-
请教一个二维数组元素组合的算法
-
请教一个二维数组元素组合的算法
-
PHP将二维数组某一个字段相同的数组合并起来的方法_PHP