使用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 array_push 数组函数
Dec 26 PHP
php中禁止单个IP与ip段访问的代码小结
Jul 04 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
Linux下php5.4启动脚本
Aug 03 PHP
php中执行系统命令的方法
Mar 21 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 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
改变Apache端口等配置修改方法
2008/06/05 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
文字幻灯片
2006/06/26 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
3个用于数据科学的顶级Python库
2018/09/29 Python
python图形用户接口实例详解
2019/12/16 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
广告学专业推荐信范文
2013/11/23 职场文书
企业文化标语大全
2014/06/10 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
违纪检讨书
2015/01/27 职场文书
个人自荐书怎么写
2015/03/26 职场文书
停电通知范文
2015/04/16 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
cf战队宣传语
2015/07/13 职场文书
中秋节感想
2015/08/10 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL