使用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 类相关函数的使用详解
May 10 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
Linux下创建nginx脚本-start、stop、reload…
Aug 03 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
php实现插入排序
Mar 29 PHP
php文件缓存方法总结
Mar 16 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
php读取本地json文件的实例
Mar 07 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 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/12/29 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
JS 常用校验函数
2009/03/26 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
python中实现k-means聚类算法详解
2017/11/11 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
Python数据可视化图实现过程详解
2020/06/12 Python
缴纳养老保险的证明
2014/01/10 职场文书
护士思想汇报
2014/01/12 职场文书
大学军训感言200字
2014/02/26 职场文书
捐书活动总结
2014/05/04 职场文书
十佳家长事迹材料
2014/08/26 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
小学教师年度个人总结
2015/02/05 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang
了解Redis常见应用场景
2021/06/23 Redis
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript