Maison > base de données > tutoriel mysql > Comment puis-je sélectionner au hasard une ligne dans un tableau avec des probabilités pondérées ?

Comment puis-je sélectionner au hasard une ligne dans un tableau avec des probabilités pondérées ?

Susan Sarandon
Libérer: 2025-01-01 13:38:10
original
633 Les gens l'ont consulté

How Can I Randomly Select a Row from a Table with Weighted Probabilities?

Sélection de lignes aléatoires avec probabilité pondérée

Problème :

Imaginez avoir une table avec des colonnes telles que « id », « contenu » et « poids ». Vous souhaitez sélectionner au hasard une ligne de ce tableau, en tenant compte de la valeur « poids ». Par exemple, s'il existe trois lignes :

id content weight
1 some content 60
2 other content 40
3 something 100

La première ligne a 30 % de chances d'être sélectionnée, la deuxième ligne a 20 % de chances et la troisième ligne a 50 % de chances.

Solution :

Une approche consiste à appliquer un réservoir pondéré échantillonnage :

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;
Copier après la connexion

Cette méthode permet de sélectionner un élément parmi de nombreux éléments avec des probabilités proportionnelles à leurs poids. Cela fonctionne efficacement pour sélectionner un seul élément.

La technique est détaillée dans cet article : [Weighted Reservoir Sampling](https://bit.ly/weighted-res-sampling). Notez que l'article sélectionne les plus grandes valeurs de POW(RAND(), 1/weight), ce qui équivaut à choisir les plus petites valeurs de -LOG(RAND()) /weight.

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 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