Maison  >  Article  >  développement back-end  >  Golang Rand ne répète pas

Golang Rand ne répète pas

WBOY
WBOYoriginal
2023-05-09 22:35:36879parcourir

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 :

  1. Générer un tableau de nombres avec une plage.
  2. Générez un nombre aléatoire dans une plage et échangez ce numéro avec un autre nombre de la plage.
  3. Répétez l'étape 2 jusqu'à ce que tous les numéros uniques souhaités aient été générés.

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 :

  1. Initialisez une plage numérique, un nombre cible d'éléments et un tableau de résultats.
  2. Générez un nombre aléatoire dans une plage de valeurs et ajoutez le nombre aléatoire au tableau de résultats.
  3. Si le nombre de nombres contenus dans le tableau de résultats est inférieur au nombre cible, répétez l'étape 2.

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 :

  1. Initialisez une plage numérique, un nombre cible d'éléments et un tableau de résultats.
  2. Créez un bitmap où chaque élément représente un nombre dans une plage.
  3. Générez aléatoirement un nombre et vérifiez si l'élément bitmap correspondant au nombre est nul. Si zéro, cela signifie que le numéro n’a pas été généré ; sinon, cela signifie que le numéro a été généré ; Définit un bit du bitmap sur un s'il est égal à zéro.
  4. Ajoutez les numéros uniques générés au tableau de résultats. Si le tableau résultant contient moins que le nombre cible de nombres, répétez l'étape 3.

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 :

  1. Initialiser une plage numérique et un nombre cible d'éléments.
  2. Utilisez le package rand de Golang pour générer un nombre aléatoire et enregistrez le premier élément du tableau de résultats.
  3. Stockez les nombres dans une plage numérique dans une tranche.
  4. Trouvez le numéro dans le tableau résultant dans la tranche et supprimez-le. Ceci peut être réalisé en utilisant des opérations d'indexation dans les tranches.
  5. Répétez les étapes 2 et 4 jusqu'à ce que le tableau résultant contienne le nombre de nombres requis.

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!

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