2015-12-05 27 views
0

我有一箇舊的評級從數據庫,並從用戶, 我試圖尋找「排名算法的」一個新的評級,但他們節省每用戶的收視率。在我的情況下,我不保存以前的評級。我的等級酒吧是高達5有一個算法來解決目前的評級,現在呢?

最大,目前我的解決辦法是oldR + newR/2這是否有道理?

回答

0

不是真的。當你考慮它時,這樣一個公式意味着較新的投票權比舊投票權要多得多。試想票的順序是這樣的:

Vote:  1 1 1 1 1 1 1 1 1 1 1 5 
Rating: 1 1 1 1 1 1 1 1 1 1 1 3 

顯然評級不應該在這種情況下是3,但仍然應該是1(或在最壞的情況2),但您的公式將是。

至少,你應該保存的投票數以及平均等級,讓您來計算newR = ((oldR*votesCast)+newVote)/(votesCast+1)。這也需要以更高的精度存儲評分,而不僅僅是整數。 (當你顯示它時,你可以將其捨棄,但是在內部你也應該跟蹤分數。)

一個稍微好一點的解決方案是分別存儲迄今爲止已經爲5個不同的評級投了多少票,讓你計算不同種類的裝置(幾何例如)。

而且顯然是最靈活(但大多數存儲和計算密集型)是存儲與用戶ID和時間戳每個人投票,讓您使用您能想到的任何算法。