• ベストアンサー

ピックアップシステムのアルゴリズム

Perlで日替わりのピックアップシステムを作っています。 60件(掲載期限が2週間)程度のデータベースの中から、ランダムに 3件のデータ(重複しない)を表示するピックアップシステムを作っ ています。 なるべく同頻度でデータを表示させたいのですが、randを使うと 同じデータが複数回表示されてしまったりします。 これを防ぐにはどのようなプログラムを組めばいいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Seravy
  • ベストアンサー率47% (118/249)
回答No.2

データの数が60件しかないため、randをしても偏ってしまうのだと思います。 最近のPerlはsrandは関係ないはずなので、根本的な問題はサンプルの数が少ないことだと思います。 そこでですが、データベースに表示回数のフィールドを用意して、何回ピックしたか保存してみてはどうでしょう。 この値が低いデータを優先的に選択するようにします。 まずは最小値の取得 ↓ 表示回数が最小値の行数を取得 ↓ 行数が2以下 YES→ 最小値の行をすべてピック、表示回数が最小値+1の行数を取得 ↓ NO ↓ その行数を最大値としてrandでランダムに行を選択してピック、表示回数を+1し、randの最大値の行数を-1する。 以降3つピックされるまで繰り返す。 これによって、20日で確実に同頻度でデータをピック出来ると思います。

その他の回答 (1)

noname#111181
noname#111181
回答No.1

スクリプト冒頭に srand(time) を追加して、毎回シードを変更するようにして下さい。

関連するQ&A