使用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 应用程序的安全 -- 不能违反的四条安全规则
Nov 26 PHP
常见的PHP五种设计模式小结
Mar 23 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
PHP数组操作简单案例分析
Oct 15 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
YII框架关联查询操作示例
Apr 29 PHP
PHP进阶学习之垃圾回收机制详解
Jun 18 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 PHP
PHP 对象接口简单实现方法示例
Apr 13 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
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
14个有用的Jquery技巧分享
2015/01/08 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
Vue中保存用户登录状态实例代码
2017/06/07 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
详解Django的CSRF认证实现
2018/10/09 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
python中必要的名词解释
2019/11/20 Python
Python itertools.product方法代码实例
2020/03/27 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
Java面向对象面试题
2016/12/26 面试题
小学生新年寄语
2014/04/03 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
综合素质自我评价评语
2015/03/06 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript
浅谈Python numpy创建空数组的问题
2021/05/25 Python
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
Python测试框架pytest高阶用法全面详解
2022/06/01 Python
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android