2017-01-01 55 views
1

我正在設計一個廣告系統,根據廣告的重量(投標)在廣告之間隨機輪換。根據體重和挑選時間挑選隨機密鑰

local ads = local ads = { 
    ["a"] = { 
     views = 0, 
     bid = 10 
    }, 
    ["b"] = { 
     views = 0, 
     bid = 1000 
    }, 
    ["c"] = { 
     views = 0, 
     bid = 100 
    }, 
    ["d"] = { 
     views = 0, 
     bid = 50 
    }, 
    ["e"] = { 
     views = 0, 
     bid = 500 
    }, 
    ["f"] = { 
     views = 0, 
     bid = 10 
    }, 
} 

我尋找了一圈,發現下面的算法:所有的加權數

  1. 獲取和
  2. 選0之間的隨機數,並通過表格總結
  3. 環路(廣告)並且如果(隨機數)< =重量然後返回其他隨機數=隨機數 - 重量

使用算法和循環1000次打印出

a 3 
c 60 
b 581 
e 313 
d 35 
f 8 

這是非常好的。但是,正如你所看到的,即使在同等重量的情況下,廣告f的收看次數幾乎是廣告的3倍。

我試圖通過考慮廣告已經獲得的視圖來使算法更公平。我通過減少每個視圖的重量來做到這一點。

雖然我不能讓它工作,我不知道有人能幫助我嗎?

+1

您應該期望結果不均勻,特別是對於低值。運行它1000000,事情可能會出來。 –

+4

爲什麼'python'標籤? –

+0

@SQLHacks是正確的。基於統計數字理論,較低的數字更容易受到隨機數發生器的影響。嘗試尋找一個加密隨機生成器,這是如果你想它真的是隨機的。如果你做這樣的事情真的很高的數字,你仍然會得到歪斜的數據。 –

回答

0

如果你想確保每個人都得到正是你可以使用這個算法權比例 - 它需要大量的記憶:

  • 填充大小sum的陣列10,1000 B,100 ç...
  • 洗牌陣列隨機
  • 皮克項目從序列中的陣列,從0

開始當用完元件可以再次使用任一開始相同的數組或重新創建數組。無論如何,每當權重發生變化時,您都需要重新創建陣列。