Maison  >  Article  >  développement back-end  >  Exemple de code de méthode PHP pour calculer les permutations et les combinaisons

Exemple de code de méthode PHP pour calculer les permutations et les combinaisons

怪我咯
怪我咯original
2017-07-12 14:21:301556parcourir

La permutation et la combinaison sont les concepts les plus fondamentaux de la combinatoire. Ce qu'on appelle l'arrangement signifie trier un nombre spécifié d'éléments à partir d'un nombre donné d'éléments. La combinaison fait référence au fait de retirer uniquement un nombre spécifié d'éléments d'un nombre donné d'éléments, quel que soit le tri. Le problème central des permutations et combinaisons est d’étudier le nombre total de situations possibles pour les permutations et combinaisons d’exigences données. La permutation et la combinaison sont étroitement liées à la théorie classique des probabilités.

Le problème mathématique à résoudre dans cet article en utilisant PHP est de calculer la combinaison de C(a,1) * C(b, 1) * ... * C(n, 1), où C (n, 1 ) représente la sélection aléatoire d'un élément parmi n éléments

Il y a quelques jours, j'ai écrit un morceau de code pour calculer les permutations et les combinaisons en raison des besoins de l'entreprise. Je l'ai trié aujourd'hui pour l'avenir. utiliser

Le code est le suivant :

<?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);
    $Start
Position
 = 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 class="brush:php;toolbar:false">";
print_r($Result);
?>


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn