Maison > développement back-end > tutoriel php > PHP génère efficacement un nombre aléatoire non répétitif

PHP génère efficacement un nombre aléatoire non répétitif

王林
Libérer: 2023-04-07 08:22:02
avant
3496 Les gens l'ont consulté

Méthode d'encapsulation PHP pour générer un tableau aléatoire

/*
* array unique_rand( int $min, int $max, int $num )
* 生成一定数量的不重复随机数
* $min 和 $max: 指定随机数的范围
* $num: 指定生成数量
*/
function unique_rand($min, $max, $num) {
//初始化变量为0
$count = 0;
//建一个新数组
$return = array();
while ($count < $num) {
//在一定范围内随机生成一个数放入数组中
$return[] = mt_rand($min, $max);
//去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。
$return = array_flip(array_flip($return));
//将数组的数量存入变量count中
$count = count($return);
}
//为数组赋予新的键名
shuffle($return);
return $return;
}
Copier après la connexion

Cette méthode obtient à chaque fois des nombres aléatoires et les stocke dans le tableau avant de les dédupliquer... Inefficace... Je ne souhaite pas utiliser

PHP est efficace Générer m nombres aléatoires non répétitifs dans la plage n (m<=n)

Remarque : Il est également mentionné dans le livre "Programming Pearls", intitulé "Comment pour générer efficacement m n plages" Nombres aléatoires non répétitifs dans (m<=n)"

Cet algorithme prend très intelligemment la position du nombre aléatoire (l'indice du tableau), au lieu de prendre le nombre aléatoire lui-même, à chaque fois, après avoir obtenu un nombre aléatoire, il sera exclu de la plage de valeurs, et la prochaine fois, il ne sera sélectionné que parmi les nombres restants. La sélection de nombres aléatoires peut être effectuée en un seul parcours, ce qui. est très efficace.

function rand_num($num=&#39;200&#39;){
for($i=0;$i<$num;$i++){
$n[$i] = $i;
}
for($i=0;$i<$num;$i++){
$rand = mt_rand($i,$num-1);
//数组 随机数交换下标
if($n[$i] == $i){
$n[$i] = $n[$rand];
$n[$rand] = $i;
}
}
}
Copier après la connexion

1. La première étape consiste à attribuer une valeur à chaque nombre du tableau dans l'ordre de son indice et à obtenir un tableau de valeurs de clés numériques $num ​disposés dans l’ordre correspondant.

2.La deuxième étape, commencez à obtenir le nombre aléatoire $rand dans la plage [i, $num-1], et utilisez le nombre aléatoire obtenu $rand comme valeur actuelle dans le tableau La clé de position i correspond à la valeur de l'indice $rand, et la valeur correspondant à l'indice de la clé $rand dans le tableau est remplacée par i. Il s'agit en fait d'un échange croisé de valeurs de clé du tableau. Le sens est d'exclure le nombre aléatoire généré de la plage de valeurs [i,$num-1], et la prochaine fois, il prendra la valeur des nombres restants [i+1,num-1].

3.La troisième étape, afin d'éviter les valeurs répétées, effectuez uniquement des opérations alternées sur les paires clé-valeur inchangées, c'est-à-dire à la position où le tableau d'origine est disposé séquentiellement (clé == valeur) Effectuer des opérations alternées.

4.Fin.

PHP génère efficacement un nombre aléatoire non répétitif

Comme indiqué ci-dessus, obtenez 10 exemples partiels de nombres aléatoires.

Pour plus de questions liées à PHP, veuillez visiter le site Web PHP chinois : Tutoriel vidéo PHP

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:csdn.net
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