抽獎算法

根據實際需求整理的抽獎算法邏輯

需求說明

  • 獎品多數爲虛擬商品,只設置比例,不設置數量
  • 獎品需要精準發放,舉例:假如只有兩個獎品,比例爲1:9,那麼10個人抽獎一定要1個人中獎品1,9個人中獎品2

算法邏輯

注: 獎池相當於一個隊列

  1. 計算各個獎品的比例 例如 獎品1:獎品2:獎品3:獎品4 = 1:5:30:64
  2. 將對應比例的獎品按照份數放入獎池
  3. 將獎池打亂
  4. 判斷獎池數量是否達到獎品最小數量,假如未達到,擴大相應倍數。這個步驟的目的是初始化獎池的邏輯比較耗時,並且生成獎池的動作需要加鎖,開銷較大,多生成幾份,以空間獲取時間

缺陷

  • 業務上,當參與人數很少時貴重物品可能會被抽走,失去了抽獎活動的意義

解決

將貴重獎品放到後二分之一位置, 這是最騷的

  1. 貴重物品篩選出來,暫不放入獎池
  2. 取獎品總數的一半到現獎池末尾隨機一點,切割這一點到獎池末尾形成一個新的獎池
  3. 將貴重物品放入新獎池
  4. 將新獎池打亂, 這一步很重要,防止貴重物品在獎池中集中
  5. 將新獎池加入到舊獎池中

算法缺點

  • 當某個獎品的中獎率特別低時,所生成的獎池會非常大,生成獎池期間無法抽獎, 消耗內存
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章