使用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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
php 传值赋值与引用赋值的区别
Dec 29 PHP
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
php获取中文拼音首字母类和函数分享
Apr 24 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
php判断是否为ajax请求的方法
Nov 29 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 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实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
用PHP与XML联手进行网站编程代码实例
2008/07/10 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
Python简单实现控制电脑的方法
2018/01/22 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
python获取整个网页源码的方法
2020/08/03 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
法国时尚童装网站:Melijoe
2016/08/10 全球购物
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
小学网上祭英烈活动总结
2014/07/05 职场文书
公司委托书格式
2014/08/01 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
琅琊山导游词
2015/02/05 职场文书
党校培训学习心得体会
2016/01/06 职场文书
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫