我正在尋找一種算法,可以從合理抽樣p的用戶百分比的無限列表。如何在用戶事件流中隨機抽樣p%的用戶
一個天真的算法看起來是這樣的:
//This is naive.. what is a better way??
def userIdToRandomNumber(userId: Int): Float = userId.toString.hashCode % 1000)/1000.0
//An event listener will call this every time a new event is received
def sampleEventByUserId(event: Event) = {
//Process all events for 3% percent of users
if (userIdToRandomNumber(event.user.userId) <= 0.03) {
processEvent(event)
}
}
沒有與此代碼的問題,但(的hashCode可能有利於較短的字符串,模運算的離散所以它不是完全的p值等)。
找到userId
s的確定性映射到上面的函數userIdToRandomNumber
的隨機數的「更正確」方法是什麼?
不錯,但'modN()'只能返回's.sum%n'。 – jwvh
@jwvh好趕上! – radumanolescu