使用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+mysql保存和输出文件
Oct 09 PHP
DISCUZ 论坛管理员密码忘记的解决方法
May 14 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
Jun 12 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
php通过各种函数判断0和空
Jul 04 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 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
如何选购合适的收音机
2021/03/01 无线电
简单的过滤字符串中的HTML标记
2006/12/25 PHP
PHP print类函数使用总结
2010/06/25 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
python如何定义带参数的装饰器
2018/03/20 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python常见的pandas用法demo示例
2019/03/16 Python
python中JWT用户认证的实现
2020/05/18 Python
Python 实现一个简单的web服务器
2021/01/03 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
社区交通安全实施方案
2014/03/22 职场文书
绿色环保演讲稿
2014/05/10 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
学校政风行风整改方案
2014/10/25 职场文书
工作经验交流材料
2014/12/30 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
政协常委会议主持词
2015/07/03 职场文书
门卫管理制度范本
2015/08/05 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书