2011-06-15 26 views
0

我正在爲我公司的Intranet網站工作,我需要添加一個模塊,以列出由員工的子女完成的圖紙。每個員工都可以上傳任意數量的圖紙,每次加載時都會在Intranet的主頁上出現一張隨機圖。幫助創建按排序算法排序

每個圖形旁邊都會有一個「Like」按鈕,每按一下該按鈕將對該圖形進行一次投票。

還會有一個「頂部圖紙」部分,當然圖紙將按「頂部」排序。

問題是......我不確定什麼可以定義一個繪圖在頂部,我到目前爲止是通過投票排序,這是不公平的,因爲1個月前發佈的圖紙有很多的選票和今天發佈的圖紙將不太可能獲得更多的選票,1個月大。

任何幫助將不勝感激!

每個用戶只能投一次,(公司有一個lot員工),我不存儲圖紙有多少視圖(我應該?)。

我不確定使用什麼公式......我認爲新上傳的圖紙應該有機會也在頂部列表中,對嗎?

謝謝!

回答

1

XKCD的蘭德爾芒羅有一篇關於reddit如何處理這個的優秀文章,here。那篇文章鏈接到this one,涵蓋所有天真的方法,描述他們的失敗,然後繼續解釋如何建立一個實際上如何工作的評級系統。

+0

我不擅長數學,所以有人有這樣的算法的.NET實現?謝謝! – Gustav 2011-06-25 01:02:52

0

我會去平均評分,不包括沒有得到一定票數的圖紙。這樣,如果一張圖只有一票,但是它是五星,它不會自動獲勝。例如:

if votes >= minVotes: 
    score = sum(ratings)/votes 
+0

結合吉姆的想法,你可以做評級的加權平均值。 – jpm 2011-06-15 21:50:08

0

您可以按最近的投票進行排序。所以現在獲得選票的較新圖紙將在較早的圖紙之前排序。很多網站都有多個「頂部」列表,按時間表排列。像「本週頂部」,「本月」和「所有時間」。

如果您只能有一個「頂部」列表,那麼您可以「老化」較舊的圖紙。所以一張有10張選票但有一個月大的圖紙可能會得到0.8的年齡乘數,而新的圖紙會有1.0的乘數。