使用php计算排列组合的方法


Posted in PHP onNovember 13, 2013

前些天因为业务需要写了一段计算排列组合的代码,今天整理了一下,以备后用

<?php
/**
 * 要解决的数学问题    :算出C(a,1) * C(b, 1) * ... * C(n, 1)的组合情况,其中C(n, 1)代表从n个元素里任意取一个元素
 *
 * 要解决的实际问题样例:某年级有m个班级,每个班的人数不同,现在要从每个班里抽选一个人组成一个小组,
 *                       由该小组来代表该年级参加学校的某次活动,请给出所有可能的组合
 */
/* ################################### 开始计算 ################################### */
/**
 * 需要进行排列组合的数组
 *
 * 数组说明:该数组是一个二维数组,第一维索引代表班级编号,第二维索引代表学生编号
 */
$CombinList = array(1 => array("Student10", "Student11"),
                    2 => array("Student20", "Student21", "Student22"),
                    3 => array("Student30"),
                    4 => array("Student40", "Student41", "Student42", "Student43"));
/* 计算C(a,1) * C(b, 1) * ... * C(n, 1)的值 */
$CombineCount = 1;
foreach($CombinList as $Key => $Value)
{
    $CombineCount *= count($Value);
}
$RepeatTime = $CombineCount;
foreach($CombinList as $ClassNo => $StudentList)
{
    // $StudentList中的元素在拆分成组合后纵向出现的最大重复次数
    $RepeatTime = $RepeatTime / count($StudentList);
    $StartPosition = 1;
    // 开始对每个班级的学生进行循环
    foreach($StudentList as $Student)
    {
        $TempStartPosition = $StartPosition;
        $SpaceCount = $CombineCount / count($StudentList) / $RepeatTime;
        for($J = 1; $J <= $SpaceCount; $J ++)
        {
            for($I = 0; $I < $RepeatTime; $I ++)
            {
               $Result[$TempStartPosition + $I][$ClassNo] = $Student;
            }
            $TempStartPosition += $RepeatTime * count($StudentList);
        }
        $StartPosition += $RepeatTime;
    }
}
/* 打印结果 */
echo "<pre>";
print_r($Result);
?>
PHP 相关文章推荐
PHP 事件机制(2)
Mar 23 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
php若干单维数组遍历方法的比较
Sep 20 PHP
php防止SQL注入详解及防范
Nov 12 PHP
探寻PHP脚本不报错的原因
Jun 12 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
PHP版本常用的排序算法汇总
Dec 20 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
测试php函数的方法
Nov 13 #PHP
PHP中判断变量为空的几种方法小结
Nov 12 #PHP
php不允许用户提交空表单(php空值判断)
Nov 12 #PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 #PHP
session在php5.3中的变化 session_is_registered() is deprecated in
Nov 12 #PHP
PHP使用正则表达式清除超链接文本
Nov 12 #PHP
PHP统计二维数组元素个数的方法
Nov 12 #PHP
You might like
那些年一起学习的PHP(三)
2012/03/22 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
js函数的延迟加载实现代码
2012/10/11 Javascript
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
python 字典访问的三种方法小结
2019/12/05 Python
Python虚拟环境venv用法详解
2020/05/25 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
python3实现飞机大战
2020/11/29 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
会计与审计毕业生自荐信范文
2013/12/30 职场文书
优秀员工获奖感言
2014/03/01 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
九年级数学教学反思
2016/02/17 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
浅谈redis整数集为什么不能降级
2021/07/25 Redis
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers