Les nombres aléatoires sont souvent utilisés en programmation, et Golang fournit le package rand pour générer des nombres pseudo-aléatoires. Cependant, dans certains cas, nous pouvons avoir besoin de générer un ensemble de nombres aléatoires différents les uns des autres. Afin d’atteindre cet objectif, nous devons considérer un algorithme réalisable.
Cet article présentera plusieurs méthodes pour générer des nombres aléatoires non répétitifs et fournira une méthode pour utiliser le package Golang Rand pour générer des nombres aléatoires non répétitifs.
Méthode 1 : Algorithme de brassage
Dans l'algorithme de brassage, nous organisons une fois de manière aléatoire le tableau de nombres avec la même plage. La complexité temporelle de cet algorithme est O(n). L’inconvénient de cette méthode est que le système prend beaucoup de mémoire lorsque l’on utilise cet algorithme pour générer un grand nombre de nombres aléatoires.
L'algorithme est implémenté comme suit :
Méthode 2 : Algorithme d'échantillonnage par rejet
Dans l'algorithme d'échantillonnage par rejet, nous stockons les nombres aléatoires générés dans un ensemble et lors de la génération du nombre aléatoire suivant, vérifions si le même nombre existe déjà dans l'ensemble. S’il est présent, régénérez le nombre aléatoire. L’avantage de cet algorithme est qu’il s’agit d’un algorithme efficace en termes d’espace. Cependant, cet algorithme peut prendre plus de temps lorsque le nombre de numéros uniques que nous devons générer est plus important.
L'algorithme est implémenté comme suit :
Troisième méthode : algorithme Bitmap
Dans l'algorithme Bitmap, nous créons un bitmap où chaque bit représente la présence ou l'absence d'un nombre dans la plage. Nous utilisons ce bitmap pour savoir si un certain nombre existe déjà dans l'ensemble de nombres aléatoires que nous avons générés. L’avantage de cet algorithme est qu’il s’agit d’un algorithme relativement efficace en termes de temps et d’espace.
L'algorithme est implémenté comme suit :
Méthode 4 : implémentation du package rand de Golang
Golang fournit le package rand, qui peut être utilisé pour générer des nombres pseudo-aléatoires. Nous pouvons l'utiliser pour générer des nombres aléatoires non répétitifs.
L'algorithme est implémenté comme suit :
Les quatre méthodes ci-dessus peuvent toutes être utilisées pour générer des nombres aléatoires non répétitifs. Chaque algorithme a ses avantages et ses inconvénients. L'algorithme à utiliser dépend de vos besoins, si l'importance réside dans l'espace, utilisez l'algorithme d'échantillonnage par rejet, si l'importance est dans le temps, choisissez l'algorithme bitmap. Et si vous utilisez Golang, vous pouvez utiliser directement le package rand pour implémenter un algorithme de génération de nombres aléatoires non répétitifs simple, direct et efficace.
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!