专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » 排列组合计算公式:计算排列组合的php代码 »正文

排列组合计算公式:计算排列组合的php代码

来源: 发布时间:星期三, 2008年9月10日 浏览:633次 评论:0
前些天因为业务需要写了一段计算排列组合的代码,今天整理了一下,以备后用

<?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);
?>

相关文章

读者评论

  • 1ace(118.113.10.*) 发布于:星期三, 2008年12月3日12:49
    高!请教14组310的任意单式组合,可重复的,好象共有4782969种可能,请直接把结果给我嘛,我算了好久,算不清楚,土办法不管用,谢谢您拉.邮箱地址:[email protected].再次跪拜!
  • 1 共1条 分1页

发表评论

  • 昵称:
  • 内容: