ホームページ >データベース >mysql チュートリアル >重み付けされた確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?

重み付けされた確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-01 13:38:10604ブラウズ

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

加重確率によるランダムな行選択

問題:

「id」などの列を持つテーブルがあると想像してください。 「内容量」と「重量」です。 「重み」の値を考慮して、このテーブルから行をランダムに選択したいとします。たとえば、3 つの行が存在する場合:

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

最初の行の選択の確率は 30%、2 行目の選択の確率は 20%、3 行目の選択の確率は 50% です。

解決策:

1 つのアプローチは、加重リザーバーを適用することです。サンプリング:

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;

このメソッドを使用すると、重みに比例する確率で多くの要素から 1 つを選択できます。これは、単一の要素を選択する場合に効果的に機能します。

この手法については、[加重リザーバー サンプリング](https://bit.ly/weighted-res-sampling) の記事で詳しく説明されています。この記事では POW(RAND(), 1/weight) の最大値を選択していますが、これは -LOG(RAND()) /weight の最小値を選択するのと同じであることに注意してください。

以上が重み付けされた確率を使用してテーブルから行をランダムに選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。