本帖最后由sibang于2013-08-0823:44:40编辑
PHP算法函数字符串组合
/**参数:$arr:原始Array$len:组合后的长度/**/FunctiongetArray($arr,$len){//请帮忙写}$arr=Array('A','B','C');print_r(getArray($arr,2));$arr=Array('A','B','C','D','E','F');print_r(getArray($arr,4));要求如下:第1种:A,B,C期望能够得到的组合是:AB,AC,BC第2种:A,B,C,D(可通过参数控制结果长度,如长度为2或3)期望能够得到的组合是:AB,AC,AD,BC,BD,CD或ABC,BCD,ACD,ABD第3种:A,B,C,D,E(可通过参数控制结果长度,如长度为2;3或4)期望能够得到的组合是:AB,AC,AD,AE,BC,BD,BE,CD,CE,DE或ABC,BCD,CDE,ABD,ABE,ACD,ACE,BDE,BCE,ADE或ABCD,BCDE,ABCE,ACDE,ABDE第四种:A,B,C,D,E,F(可通过参数控制结果长度,如长度为2;3;4或5)期望能够得到的组合是:可根据上边的组合推演出来,在此不再例举回复讨论(解决方案)排列组合中的组合貌似很有意思的样子...虽然可能做不出来...试试吧
期待算法高手的光
抱歉...实在弄不出来....想了下或许用深度优先搜索比较好但是怎么写呢还没想好....
做了一点点进展,谈不上算法,效率很低!只是希望能帮你打开思路...思路:先算排列,然后去除排列中重复的地方,来达成组合.P.S:半路出家,做了一年多PHP了,居然完全不知道数据结构、算法...手头项目完成后一定好好补补课..
你这是求“组合”方法有很多种我先给你一种“高效率的10移动法”,函数命名选用组合的英文单词combination
functioncombination($arr,$num=0){$len=count($arr);if($num==0)$num=$len;$res=array();for($i=1,$n=pow(2,$len);$i
调用:
/**参数:$arr:原始Array$len:组合后的长度/**/FunctiongetArray($arr,$len){//请帮忙写}$arr=Array('A','B','C');print_r(getArray($arr,2));$arr=Array('A','B','C','D','E','F');print_r(getArray($arr,4));要求如下:第1种:A,B,C期望能够得到的组合是:AB,AC,BC第2种:A,B,C,D(可通过参数控制结果长度,如长度为2或3)期望能够得到的组合是:AB,AC,AD,BC,BD,CD或ABC,BCD,ACD,ABD第3种:A,B,C,D,E(可通过参数控制结果长度,如长度为2;3或4)期望能够得到的组合是:AB,AC,AD,AE,BC,BD,BE,CD,CE,DE或ABC,BCD,CDE,ABD,ABE,ACD,ACE,BDE,BCE,ADE或ABCD,BCDE,ABCE,ACDE,ABDE第四种:A,B,C,D,E,F(可通过参数控制结果长度,如长度为2;3;4或5)期望能够得到的组合是:可根据上边的组合推演出来,在此不再例举是否有重复字母?还有AB,BA算不算不同的?总得要具体说明一下吧递归的写法