Générer des nombres aléatoires non répétitifs en JavaScript
Le défi de générer des nombres aléatoires non répétitifs se pose lorsque vous devez vous assurer que chaque nombre dans une plage donnée est unique. Pour surmonter cet obstacle, explorons des approches alternatives.
Générer une liste aléatoire au début
Une solution efficace consiste à créer une liste aléatoire de la plage souhaitée au début début. Cela garantit que vous évitez l’approche itérative, qui pourrait conduire à une récursivité excessive et à des débordements de pile. En calculant une permutation aléatoire des nombres (comme l'exemple fourni dans la réponse), vous pouvez simplement parcourir la liste pour récupérer les nombres aléatoires dans l'ordre.
Fisher-Yates Shuffle
Envisagez d'utiliser l'algorithme Fisher-Yates Shuffle pour une efficacité améliorée. Cela implique de sélectionner au hasard un élément dans la liste restante et de l'échanger avec l'élément actuel. Ce processus est répété jusqu'à ce que la liste entière soit randomisée. Le tableau est ensuite itéré pour récupérer les nombres aléatoires.
Utilisation de générateurs
Si la prise en charge du générateur est disponible, cette option peut fournir une approche propre et flexible. Les générateurs vous permettent de générer une valeur une à la fois sans créer l’intégralité du tableau à l’avance. L'exemple fourni dans la réponse montre comment utiliser un générateur pour générer des nombres aléatoires à partir du tableau mélangé.
En conclusion, la meilleure méthode pour générer des nombres aléatoires non répétitifs en JavaScript dépend du cas d'utilisation spécifique et de l'efficacité. exigences. Bien que l'approche itérative présentée dans la question initiale puisse fonctionner pour de petites plages, des plages plus grandes ou une récupération fréquente de nombres nécessitent des solutions plus efficaces comme le Fisher-Yates Shuffle ou des générateurs.
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!