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 ?
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;
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!