Sélection aléatoire de lignes avec probabilité pondérée
Considérant un tableau avec l'identifiant, le contenu et le poids des colonnes, la tâche consiste à sélectionner au hasard une ligne tout en tenant compte du poids. Dans un scénario où il existe trois lignes avec des pondérations de 60, 40 et 100, respectivement, le défi consiste à calculer la probabilité de sélectionner chaque ligne comme suit :
Échantillonnage pondéré de réservoir
L'approche optimale pour ce problème est l'échantillonnage pondéré de réservoir, qui peut sélectionner efficacement des éléments avec des probabilités proportionnelles à leur poids. Voici comment l'appliquer :
SELECT id, -LOG(RAND()) / weight AS priority FROM your_table ORDER BY priority LIMIT 1;
Cette requête SQL utilise la logique suivante :
Cette technique d'échantillonnage de réservoir pondéré peut être utilisée pour sélectionner plusieurs lignes ou même la table entière avec des probabilités pondérées, ce qui en fait une solution polyvalente pour divers scénarios de sélection de données.
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!