使用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 相关文章推荐
粗略计算在线时间,bug:ip相同
Dec 09 PHP
PHP 函数执行效率的小比较
Oct 17 PHP
基于PHP文件操作的详细诠释
Jun 21 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
php实现水仙花数示例分享
Apr 03 PHP
php快递单号查询接口使用示例
May 05 PHP
php中session过期时间设置及session回收机制介绍
May 05 PHP
php中多维数组按指定value排序的实现代码
Aug 19 PHP
Zend Framework教程之Zend_Layout布局助手详解
Mar 04 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
轻松实现php文件上传功能
Feb 17 PHP
Nginx下ThinkPHP5的配置方法详解
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
php桌面中心(四) 数据显示
2007/03/11 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
Python生成器以及应用实例解析
2018/02/08 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
个人求职信范文分享
2014/01/31 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
什么是就业协议书
2014/04/17 职场文书
党校学习心得体会范文
2014/09/09 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
电影红河谷观后感
2015/06/11 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
python中如何对多变量连续赋值
2021/06/03 Python
Golang生成Excel文档的方法步骤
2021/06/09 Golang