使用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中文件上传的安全问题
Oct 09 PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
PHP链接MySQL的常用扩展函数
Oct 23 PHP
php将access数据库转换到mysql数据库的方法
Dec 24 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
php在linux环境中如何使用redis详解
Dec 15 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中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
php cli配置文件问题分析
2015/10/15 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
Add a Table to a Word Document
2007/06/15 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
司机的工作范围及职责
2013/11/13 职场文书
高分子材料与工程专业推荐信
2013/12/01 职场文书
关于迟到的检讨书
2014/01/26 职场文书
《云雀的心愿》教学反思
2014/02/25 职场文书
投资协议书范本
2014/04/21 职场文书
我的小天地教学反思
2014/04/30 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
服务器SVN搭建图文安装过程
2022/06/21 Servers