Générer des nombres aléatoires pour résumer une valeur prédéterminée pose un défi intéressant en programmation informatique. Même si des approches simples peuvent sembler suffisantes, elles introduisent souvent des biais, dans la mesure où certains chiffres ont plus de chances d'être sélectionnés. Cet article examine une solution raffinée qui garantit une distribution de probabilité égale pour toutes les combinaisons possibles.
La solution fournie s'appuie sur la fonction constrained_sum_sample_pos pour obtenir une distribution uniforme des résultats possibles. Cette fonction génère une liste d'entiers positifs (n) qui totalisent la valeur cible (total). Sa principale caractéristique est que chaque combinaison a une chance égale d'être choisie.
La force de la fonction réside dans son fondement mathématique, qui garantit que toutes les combinaisons possibles sont également probables. De plus, il est facilement adaptable à d'autres scénarios, tels que la génération de sept nombres totalisant 100 ou tout autre total souhaité.
L'implémentation Python de la fonction est fournie ci-dessous :
<code class="python">import random def constrained_sum_sample_pos(n, total): """Return a randomly chosen list of n positive integers summing to total. Each such list is equally likely to occur.""" dividers = sorted(random.sample(range(1, total), n - 1)) return [a - b for a, b in zip(dividers + [total], [0] + dividers)]</code>
La représentation graphique de @FM permet de comprendre clairement le fonctionnement de la fonction :
0 1 2 3 4 5 6 7 8 9 10 # The universe. | | # Place fixed dividers at 0, 10. | | | | | # Add 4 - 1 randomly chosen dividers in [1, 9] a b c d # Compute the 4 differences: 2 3 4 1
Cette solution sophistiquée, basée sur L'échantillonnage à somme contrainte fournit une méthode robuste et impartiale pour générer des nombres aléatoires qui totalisent une valeur prédéfinie. Il garantit une probabilité égale pour tous les résultats possibles, ce qui en fait un outil fiable pour divers scénarios de programmation.
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!