自己写的从m个数中任取n个数的组合算法
来源:互联网 发布:神探夏洛克第五季 知乎 编辑:程序博客网 时间:2024/06/08 12:27
遇到了一个求m个数中任选n个的全部组合算法,在网上查了好久,决定自己写一个.顺便写了元素交换函数和替代print_r的数组元素显示函数,毕竟我们更习惯于{*,*,*,*}的数组显示风格,但是这个函数只支持一维数组哟.
说明一下,这个函数只是生成了组合元素的二进制版本,你还需要将其转换为自己需要的数组.比如我这里生成的一个组合为:{1,1,0,0,1},表示去5个数中第1,2,5个元素.其他类推.还有什么问题给我联系.
function swap(&$a,&$b){ //交换函数
$temp = $a;
$a = $b;
$b = $temp;
}
function printarray($a){ //用我们习惯的方式显示数组元素
echo "{";
foreach($a as $k => $v){
if($k == 0) echo $v;
else echo ",".$v;
}
echo "}";
}
function zuhe($m,$n){ //求m个数中任意n个数的组合
for($i=0;$i<$n;$i++) $p[$i] = 1; //前n个数置1,后面的都为0
for($i=$n;$i<$m;$i++) $p[$i] = 0;
printarray($p);
$pp = $n-1; //下一步要交换的1的位置
$temp = $a;
$a = $b;
$b = $temp;
}
function printarray($a){ //用我们习惯的方式显示数组元素
echo "{";
foreach($a as $k => $v){
if($k == 0) echo $v;
else echo ",".$v;
}
echo "}";
}
function zuhe($m,$n){ //求m个数中任意n个数的组合
for($i=0;$i<$n;$i++) $p[$i] = 1; //前n个数置1,后面的都为0
for($i=$n;$i<$m;$i++) $p[$i] = 0;
printarray($p);
$pp = $n-1; //下一步要交换的1的位置
$pt = $m; //尾部指针,记录当前要交换0的截至位置
while($pp>=0){
$p1 = $pp; //当前要交换的值为1的位置(也就是指针)
$p0 = $pp+1; //要交换的值为0的位置
while($p0<$pt){ //要交换的0还未到截至位置
swap($p[$p1],$p[$p0]); //0和1交换
printarray($p);
$p1++; //指针后移
$p0++;
}
$pp--; //下一步要交换的1的位置前移
while($pp>=0){
$p1 = $pp; //当前要交换的值为1的位置(也就是指针)
$p0 = $pp+1; //要交换的值为0的位置
while($p0<$pt){ //要交换的0还未到截至位置
swap($p[$p1],$p[$p0]); //0和1交换
printarray($p);
$p1++; //指针后移
$p0++;
}
$pp--; //下一步要交换的1的位置前移
$pt--; //要交换0的截至位置前移
}
}
zuhe(8,5); //测试从8个数中选5个的组合
}
}
zuhe(8,5); //测试从8个数中选5个的组合
- 自己写的从m个数中任取n个数的组合算法
- OC中的组合算法 从N个数里面取M个数的组合
- 从m个数中任意去n个数的组合
- 从1-n中选择m个数的组合个数
- 输出从n个数中选m个数的所有组合
- OC----从N个数中选取M个数的组合
- 从n个数中选取m个数的所有组合
- 合算法:从m个数中选n个数的所有组合
- 组合问题:输出从m个数中的任意抽取n个数的组合全部可能序列
- 从M个数中选出N个的所有组合情况算法
- 打印从n个数中选取m个数的组合数
- 从M个数中随机选出N个数的所有组合,无序,(一)
- 从M个数中随机选出N个数的所有组合,有序,(二)
- 打印从n个数中选取m个数的组合数
- 递归实现 从n个数中选取m个数的所有组合
- 深搜 从n个数中随机选取m个数 求出所有组合的和 模版
- 数的组合问题,从n个数中选出m个数,结果按照字典序排列
- c++ 组合算法 - 从n中选m个数
- mingle安装笔记
- EL表达式
- 获得指定的UML的源文件
- 使用RHTTPTransaction后产生CONE 36 Panic的解决办法
- 使用cvsnt与wincvs实现cvs的架设
- 自己写的从m个数中任取n个数的组合算法
- 狙击驱动木马
- 在C#中使用代理的方式触发事件
- Apache Tomcat 和 Jakarta Tomcat。
- 乐逍遥
- 在Java Web应用中实现任务有效调度
- [abap] convert integer to binary code
- 什么是 MIME
- 分析器错误信息: 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。导致该错误的原因可能是在 IIS 中没有将虚拟目录作为应用程序进行配置。