使用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 闭包特性在实际应用中的问题
Oct 30 PHP
PHPMailer 中文使用说明小结
Jan 22 PHP
PHP文件读写操作之文件读取方法详解
Jan 13 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
php实现的简单检验登陆类
2015/06/18 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
js控制框架刷新
2008/08/01 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
python中列表元素连接方法join用法实例
2015/04/07 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
python设置环境变量的作用和实例
2019/07/09 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
如何基于python操作excel并获取内容
2019/12/24 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
Linux常见面试题
2013/03/18 面试题
班组长安全生产职责
2013/12/16 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
结婚周年感言
2014/02/24 职场文书
生死抉择观后感
2015/06/09 职场文书
小学班主任心得体会
2016/01/07 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers