可能有一些資源可以爲您提供參數,但您應該準確地決定要使用的模型,而不是使用某些預定義的模型。我建議你定義一些規則,哪些用戶組應該是等價的或哪些應該超過彼此(例如,10 0 karma users = 1 5k karma user)(等價性更容易處理),這將很快產生一些參數給一些選擇的方程。
使用日誌(如已經建議),一些(小數)功率(如平方根)或甚至只是線性可以工作。
我建議是這樣newKarma = a.karma^b + c
,它不應該是很難解決a
,b
和c
。我建議你選擇b
而不是試圖計算它。使用新用戶(使用karma = 0)應該使這很容易解決。猜測值接近你想要的數值可能比以數學方式確定它們要容易(因爲一些規則在一起將不適合任何簡單的方程式)。
請注意,c
以上是對業力的抵消,這將給許多新用戶比高業主用戶更多的全部業力。您可能還想考慮a.(karma + c)^b
或a.(karma + c)^b + d
。分析你定義的規則應該告訴你要使用哪一個。
更新:爲c
編輯添加的替代品:您有SQL一些選項。一個臨時表(和)可能實際上是最快的。您也可以使用視圖。雖然我不確定,但在同一張桌子上的加入也是可能的。使用視圖看起來是這樣的:(對於某些選定的a,b,c和d)(您可能還需要索引添加到視圖)
Votes(issueID, userID) // table structure
User(userID, karma, ...) // table structure
CREATE VIEW Sums AS
SELECT issueID, SUM(1*POWER(karma + 2, 3) + 4) AS sumVal
FROM Votes JOIN User ON User.userID = Votes.userID
GROUP BY issueID
查詢:
SELECT (1*POWER(karma + 2, 3) + 4)/sumVal AS influenceOnIssue
FROM Votes JOIN User ON User.userID = Votes.userID
JOIN Sums on Sums.issueID = Votes.issueID
WHERE Votes.userID = @UserID AND Votes.issueID = @IssueID
簡化可能有一個計算列= 1*POWER(karma + 2, 3) + 4
更快的選擇將是插入/更新計算派生的業力,或者通過有一個額外的列和使用觸發器或只是在你調用插入/更新之前計算和使用新值調用插入/更新。
嗯......這是由你來定義它。 5K用戶應該多少新用戶?一種方法是使用'log()',基礎由你決定。 – Wrikken
僅供參考:因此,'weight = log(karma)/ log(n);',其中'n'是您想要擺弄的數字,可能是'1
Wrikken