0

タイトルの問題を一般化しただけです。

私が解決している実際の問題はこれです。Web サイトを作成していて、サイトの「ランダム記事」セクションに入力する必要があります。このランダムな記事は、終日表示する必要があります。だから私は、今日の日付に基づいた記事でデータベースから 1 つの要素を選択するアルゴリズムを考え出そうとしています。

私は約100,000件の記事のデータベースを持っています。

今日の日付が であるとしましょう2012-04-28。選択する記事の ID と一緒に数字を合計することもできます。この場合は 2012+4+28 = 2044 です。しかし、これは同じ記事を表示し2012-04-28てしまうという問題です。2013-04-27

また、近い 2 日間でアルゴリズムが同じ記事を 2 回選択することも望ましくありません。選択肢をユニークにしたい。(理想的には、100,000 日連続で与えられた 100,000 件の記事全体をカバーする生成関数にしたいと思います。)

日付に基づいて記事を選択する別の方法は考えられません。何か案は?

4

3 に答える 3

0

Web サイトが公開されてからの日数を単純に数える場合、問題はシーケンス 1、2、3、...nをランダムなシーケンスにマッピングすることになります。

これを行う簡単な方法は、1 からランダムな順序で数字を含む配列を作成することです。その後、毎日、要素を使用できます。n iith

たとえば、n= 4 で、次のように配列をランダムに埋めたとします。

a[0] = 3
a[1] = 1
a[2] = 4
a[3] = 2

配列には 3、1、4、2 のランダムな順序があるため、日が経過するにつれて、記事 3、次に記事 1、次に記事 4、最後に記事 2 を選択します。

于 2012-04-28T14:41:35.647 に答える
0

日付を連結するだけで、 に2012-04-28なり20120428ます。

この数は、DB にある記事の量よりも多いことはわかっていますが、これらの記事の表示を開始した日を差し引いて、20120428-20120428=0今日の記事と20120429-20120428=1明日の記事を表示することができます。

于 2012-04-28T14:25:26.783 に答える
0

私はこの問題に別の方法でアプローチします。各記事に一意の番号を割り当て、[1..記事数] の範囲から乱数を選択します。これにより、有効なランダムな日付を生成する難しさを乗り越えることができます。

番号を割り当てる 1 つの方法は、投稿された日付で記事を並べ替え、最も古い記事を 1 に割り当てるというものです。これらの記事がデータベースに保存されている場合、データベースの主キーがニーズに合っている可能性が非常に高くなります。

余談ですが、記事に番号を割り当てる方法はあまり重要ではありません。このアイデアが機能するために記事のセットをソートする必要さえありません (たとえば、記事が順序付けられていないハッシュ テーブルに格納されている場合)。

まれに、利用できなくなった (非表示または削除された) 記事の番号が返される場合に、ジェネレーター関数を複数回呼び出す必要がある場合があります。ただし、利用できない記事の数が少ないと仮定すると、このシナリオは頻繁には発生せず、パフォーマンスの問題にもなりません。

于 2012-09-26T22:26:45.790 に答える