Quelle est une approche appropriée pour la sélection aléatoire pondérée avec remplacement ?

Patricia Arquette
Libérer: 2024-10-24 10:15:29
original
734 Les gens l'ont consulté

What is a Suitable Approach for Weighted Random Selection With Replacement?

Sélection aléatoire pondérée : surmonter les limitations de remplacement

Récemment, de nombreux développeurs ont rencontré le défi de la sélection aléatoire pondérée d'éléments dans une liste, à la fois avec et sans remplacement. Bien qu'il existe des algorithmes efficaces pour la sélection non pondérée et la sélection pondérée sans remplacement, trouver une solution appropriée pour la sélection pondérée avec remplacement s'est avéré difficile.

Une approche innovante qui permet d'atteindre l'efficacité et la simplicité est la méthode des alias. Cela fonctionne en créant des bacs de taille égale pour la liste pondérée. Ces compartiments sont indexés efficacement à l'aide d'opérations sur bits, évitant ainsi les recherches binaires fastidieuses.

Pour former la table de recherche d'alias :

  1. Normalisez les poids pour que leur somme soit égale à 1,0 (par exemple, de (1 , 1, 1, 1, 1) à (0.2, 0.2, 0.2, 0.2, 0.2)).
  2. Déterminer la plus petite puissance de 2 supérieure ou égale au nombre de variables et créer ce nombre de partitions . Dans notre exemple de cinq choix, nous créerions huit partitions.
  3. Attribuez le poids restant le plus faible à une partition vide (par exemple, la partition 1 obtient un poids de 0,075).
  4. Si la partition n'est pas pleine , attribuez-lui également le poids le plus élevé (par exemple, la partition 2 a maintenant les poids 0,075 et 0,15).

Répétez les étapes 3 et 4 jusqu'à ce que tout le poids d'origine soit attribué.

Pendant runtime :

  1. Générez un nombre aléatoire dans la plage [0, 1] (par exemple, 0,001100000).
  2. Décalez le nombre aléatoire de log2(num_partitions) pour trouver la partition appropriée ( par exemple, 001.1 correspond à la partition 2).
  3. Si la partition est divisée, utilisez la partie décimale du nombre aléatoire décalé pour décider de la division.

Cette méthode gère efficacement le nombre aléatoire pondéré sélection avec remplacement, offrant une amélioration significative des performances par rapport aux approches basées sur un réservoir, en particulier lors de la sélection d'une grande partie d'une liste.

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!