2012-01-18 19 views
2

私はDiggに似たWebアプリケーションを開発しています。人気をもって投稿を注文するアルゴリズムが必要です。たとえば、最初のページには今日の最も人気のある投稿があり、数日前には投票数が足りなくなりました。私のdbが、現時点では次のようになります。投票加重アルゴリズム

Table | fields 
Posts | id | ... | time 
Feedback | id | userid | time | upvote 

upvoteフィールドがブール値です。肯定的な場合は、ユーザーが投票ボタンをクリックしたことを意味します。

テーブルが空であるため、テーブルを変更できます。

すべてのヘルプは、私が正しくあなたを理解していれば、あなたは投票の値は、それの年齢に反比例したい

+0

[KISS](http://en.wikipedia.org/wiki/Keep_it_simple_stupid)と最後の* X *時間内の投票数でランク付けしてみませんか?または、時間遅延フィルタを使用することもできます。 – wallyk

答えて

2

私は個人的にもっと洗練されたアプローチをとっています。一般的な考え方は、cronプロセッサが5分ごとに実行されて、言及した基準に基づいて各エンティティの人気を計算することと、ユーザーベースのstandard deviationに基づいて、ギャング投票の明らかな集計を排除して、

投票の年齢を考慮するには、ローソンの答えを見てください。しかし、評判、年功序列などに基づいてユーザー自身の体重を適用することは有用であると考えてください。

この不幸な部分は簡単ではないということです。私はそれがほとんどのWebプログラミングよりも楽しいと感じていますが、ゲームの基本的な心理学をすべて考慮に入れると、システムは非常に時間のかかるプロセスになる可能性があり、Digg自体のために働く場合や、深刻なスタートアップ。

ここphp.net標準偏差です:私はこれはSO答えだと思いますがhttp://php.net/manual/en/function.stats-standard-deviation.php

はポイントによります:z-Scores(standard deviation and mean) in PHP

コードサンプルがいいかもしれないが、我々は何をするあなたのデータの一部を必要としますそうであっても、これはかなり複雑になる可能性があります。しかし、それは間違いなく楽しいです。特にあなたのコードがシステムを試そうとする人を見つけたとき。

5

を理解されるであろう。

これを実現する簡単な方法は、投票を人気ユニット(PU)に変換し、単なる投票ではなくPUを集計することです。 PUの構築は、1 /(投票の年齢は数日または数時間)と同じくらい単純にすることができます。 1日前の投票は1 PUに相当し、2日前の投票では半分の価値があります。

関連する問題