Maison  >  Article  >  développement back-end  >  Algorithme de probabilité de gain à la loterie PHP et JS

Algorithme de probabilité de gain à la loterie PHP et JS

不言
不言original
2018-07-06 16:21:251768parcourir

Cet article présente principalement l'algorithme de probabilité de gain en PHP et JS. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent se référer à l'

algorithme de probabilité classique.

Nous avons maintenant le tableau : [10, 20, 30, 40] .

En supposant la probabilité de gagner correspondante : 10 % pour le prix spécial, 20 % pour le premier prix, 30 % pour le deuxième prix, 40 % pour le troisième prix, soit un total de 100 %.

Au début de l'algorithme, une valeur $value est sélectionnée dans le tableau, puis un nombre $rand est sélectionné au hasard dans l'espace de probabilité de 1 à 100.

Comparez $value et $rand. Si $rand est dans la plage de probabilité $value, renvoyez directement la clé correspondant à $value.

Sinon, soustrayez la valeur $value de la valeur de l'espace de probabilité.

Dans cet exemple, après le premier jugement, 10 est soustrait, ce qui signifie que la deuxième fois, il est examiné dans la plage de 1 à 90.

Après avoir filtré de cette manière, il y aura toujours un numéro qui répond aux exigences.

C'est comme toucher quelque chose dans une boîte

Le premier ne l'est pas, le deuxième ne l'est pas, et le troisième ne l'est pas, alors le dernier doit l'être.

Cet algorithme est simple et très efficace.

Implémentation PHP
<?php
    function getRand($arr)
    {
        $result = &#39;&#39;;
        //概率数组的总概率精度
        $sum = array_sum($arr);
        //概率数组循环
        foreach ($arr as $key => $value) {
            $rand = mt_rand(1, $sum);
            if ($rand <= $value) {
                $result = $key;
                break;
            } else {
                $sum -= $value;
            }
        }
        unset ($arr);
        return $result;
    }
使用范例:

$a = [10, 20, 30, 40];
// 输出3的概率最大
echo &#39;PHP:&#39; . getRand($a);
Implémentation Javascript
<script>
    function getRand(arr) {
        var result = 0;
        var sum = arr.reduce(function(a, b) {
            return a + b;
        });

        for (index in arr) {
            rand = Math.round(Math.random() * (sum - 1) + 1);
            if (rand <= arr[index]) {
                return index;
            } else {
                sum -= arr[index];
            }
        }

        return result;
    }

    // 使用示例,输出2的概率最大
    var a = [10, 20, 30, 40];
    document.write(&#39;<br />Javascript:&#39; + getRand(a));
</script>
使用范例:

    // 使用示例,输出3的概率最大
    var a = [10, 20, 30, 40];
    document.write(&#39;<br />Javascript:&#39; + getRand(a));

Ce qui précède est l'intégralité du contenu de cet article, J'espère que cela sera utile à tout le monde. L'apprentissage est utile. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Comment générer rapidement des formulaires modernes avec PHP

php utilise simplement la fonction shmop pour créer des formulaires partagés mémoire pour réduire la charge du serveur

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