2009-07-17 81 views
0

我需要根據用戶評分對一些產品進行排序。產品排行榜

假設我們有3個產品{a,b,c},並且我們有用戶對此產品的反饋。用戶給我們反饋並不重要(這個問題不是關於相關的過濾,如果你熟悉的話 - 用戶的興趣不在這裏)

下面的每一行都是用戶反饋,當他們試圖比較3款產品:

a 150分-b 0分(這位使用者告訴我們他認爲2款產品a和b以及a和b的比較,儘管如果他給出了150分,那麼b的價值0點)

一個150點 - C 20個的點

C 200分 - 10分(儘管先前的一個這種用戶認爲c是更好在於:a)

一個200點 - B 40分 - C 100點

一個150點 - B 50分

一個150點 - B 20分

(這些評分只是一個樣本,在現實世界中產品數量和評分遠遠大於此)

現在我需要一種算法來根據用戶投票找到產品的排名。在我看來,最好的方法是用相關圖來描述這個問題,並將所有產品連接起來。

讚賞任何形式的幫助或提示。

/********************************************* *********************************/**

你不能只加點和計算均值產品的點原因是很重要的它是如何得到他的分假設對b A得到了800分 - 那麼C得到10分針對這樣的:

200 - b 0

200 - b 0

a 200 -b 0

200 - B 0

-C 10 - 0(這意味着c是優於一個)

所以肯定A比B但具有小的10點C從一個有一個更好的秩更好

/********************************************* *******************************/

+0

絕對重複? – EFraim 2009-07-17 12:11:31

+0

http://stackoverflow.com/questions/1057269/implementing-a-ranking-system – EFraim 2009-07-17 12:12:07

回答

1

這是多麼奇怪的排名方式。我建議,對於每個用戶,您需要爲他們排名第一的所有產品創建排名。舉例來說,如果用戶沒有這樣的:

a 200 - b 0 
c 10 - a 0 

那麼你可能想將其轉換成一個完整的爲用戶設置是這樣的:

c 210 - a 200 - b 0 

然後,你需要正常化(假設所有用戶都相同的權重):

c 100 - a (200/210) - b 0 

那麼,如果用戶有不同的權重(換句話說,一個用戶擁有比另一種更可信),那麼你可以這樣做(假設該用戶的信譽5):

c 100*5 - a (200/210)*5 - b 0 

一旦你做完了,你可以總結所有用戶的每個產品的所有結果。

1

聽起來很複雜。我接近它的方式是定期重新排名排名並將排序順序存儲到數據庫。從你所描述的,它聽起來像一個巨大的代數系統。我不知道這是否可以在數據庫中解決,但即使可以解決,也可能需要很長的時間來解決,所以我覺得緩存將成爲你的朋友。

至於排序順序的實際調查結果,我會建立方程列表,如:

A = B + 400 C = A + 10

而一旦你擁有了整個列表構建,解決整個事情並緩存排名