使用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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
PHP中,文件上传
Dec 06 PHP
PHP session有效期session.gc_maxlifetime
Apr 20 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
php中mysql模块部分功能的简单封装
Sep 30 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
php代码审计比较有意思的例子
May 07 PHP
CI框架开发新浪微博登录接口源码完整版
May 28 PHP
CodeIgniter模板引擎使用实例
Jul 15 PHP
PHP5.4起内置web服务器使用方法
Aug 09 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 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
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
javascript的数组和常用函数详解
2014/05/09 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
Python中取整的几种方法小结
2017/01/06 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
NumPy排序的实现
2020/01/21 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Django REST 异常处理详解
2020/07/15 Python
Python实现像awk一样分割字符串
2020/09/15 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
直接有效的自我评价
2014/01/11 职场文书
《阳光》教学反思
2014/02/23 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
党校毕业个人总结
2015/02/28 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python