php实现全组合算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php实现全组合算法相关的知识,希望对你有一定的参考价值。

假如有数组$arr = array(1,2,3).组合实现1-2-3,12-3,13-2,1-23,123.的全组合方式.急 求救

<?php
/**
* 在数组$a中任意m个元素组合
*
* @param array $a 候选的集合
* @param int $n 候选的集合大小
* @param int $m 组合元素大小
* @param array $b 储存当前组合中的元素,这里储存的是元素键值
* @param int $M 相当一个常量,一直保持不变
* @return */
function combine($a,$n,$m,$b,$M)
for($i=$n;$i>=$m;$i--)
$b[$m-1]=$i-1;
if($m > 1)
$combine[]=combine($a,$i-1,$m-1,$b,$M);
else
$onecombine='';
for($j=$M-1;$j>=0;$j--)
$onecombine.=$a[$b[$j]];

$combine[]=$onecombine;
$onecombine='';


return $combine;

/**
* 递归输出数组
*
* @param array $arr 待输出的数组
* @return int 返回数组元素个数*/
function recursionarray($arr)
$i=0;
foreach($arr as $value)
if(is_array($value))
$i+=recursionarray($value);
else
echo $value."<br/>";
$i++;


return $i;

$a=array('A','B','C','D','E','F','G','H','I','J');
$b=array();
$combine=combine($a,10,5,$b,5);
$count=recursionarray($combine);
echo "总共有".$count."组合";
?>追问

这是针对10个当中选5个的情况.我想要的是 10个当中选任意个的情况.比如abc三个字母组合.组合出来的情况有(abc),(a,bc),(ac,b)(bc,a)(a,b,c)

参考技术A 这个情况太多了,真心不好统计追问

但是需求就是这样.求助啊.

参考技术B 好难额这个本回答被提问者采纳

全组合的递归实现(ruby)

着急用所以直接扒了一个C++算法翻译成了ruby…暂记

 1 nodes = ["node1", "node2", "node3", "node4", "node5", "node6"]
 2 
 3 def combine_array(arr, start, index, count, num ,len, output)         
 4     for i in (start..len-1)
 5       index[count-1] = i
 6       if count-1 == 0 then
 7         out = []
 8         for j in (0..num-1)       
 9         out << arr[index[j]]                     
10         end
11         #puts "#{out}"
12         #puts "------------"
13         output << out
14       else
15         combine_array(arr, i+1, index, count-1, num, len, output)
16       end
17    end
18 end
19 
20 for i in (1..6)
21   outs = []
22   combine_array(nodes, 0, index, i, i, len, outs)
23   p outs
24   puts "------------"
25 end

 

以上是关于php实现全组合算法的主要内容,如果未能解决你的问题,请参考以下文章

全排列算法实现

字符串数组全排列——逐个追加组合算法

获取所有组合算法获取全排列算法(java)

全组合的递归实现(ruby)

(转)C#全排列组合算法

js 数组全排列组合算法