使用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 相关文章推荐
PHP4实际应用经验篇(4)
Oct 09 PHP
模板引擎Smarty深入浅出介绍
Dec 06 PHP
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
Jun 24 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
php常用的url处理函数总结
Nov 19 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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多个文件及图片上传实例详解
2014/11/10 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
原生JS检测CSS3动画是否结束的方法详解
2019/01/27 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
深入浅析python定时杀进程
2016/06/06 Python
Python内存读写操作示例
2018/07/18 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
采购主管的岗位职责
2013/12/17 职场文书
大学生暑期实践感言
2014/02/26 职场文书
优秀公益广告词大全
2014/03/19 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
Python竟然能剪辑视频
2021/05/25 Python