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

怪我咯
Libérer: 2023-03-13 17:52:02
original
1559 Les gens l'ont consulté

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);
?>
Copier après la connexion


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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal