有些人的算法過於復雜,第幾個人領取都要面面俱到的計算,考慮因素太多,工程實現上真的沒必要。
其實只需要按照如下框架即可:
1. 發紅包時,按照設計的快速隨機算法,將紅包分好若幹份。
2. 按照設計的評估算法,對得到的紅包分配進行校驗。
3. 如果校驗不通過,如貧富差距過大,則重復隨機分配。
4. 如果若幹次重復,如5次,則停止重復,就按照當前分配。
5. 再有用戶請求紅包,直接隊列化請求,再從紅包序列中取出對應編號紅包。
上述方案的優勢是:
1. 只需“壹次”計算。
隨機算法選擇簡單粗暴的即可,系統按照校驗策略對其評價,不滿足則有限次重復,直到滿足或次數太多為止。
2. 此後就只有讀取。
後續操作完全是讀取緩存,無需密集計算。
那麽是不是還有更簡單粗暴的方案呢?還是有的,那就是偽隨機序列查表法。
百萬千萬級別的紅包請求,如果每次都按照真隨機來計算,仍然會有不小的計算壓力。
索性預先計算得到若幹偽隨機分配方案,調用時只需要隨機選擇壹個即可。
舉例來說,有人的紅包是10元分配給5人,系統預先存有多種分配方案,如1,1,2,3,3,或1,1,2,2,4,請求時隨機選取壹個方案即可。
當然,各種組合未必能窮盡,但是只需要讓用戶在有限次操作中覺得這是隨機就夠了。
擴展資料
微信紅包是騰訊旗下產品微信於2014年1月27日推出的壹款應用,功能上可以實現發“紅包”、查收發記錄和提現。
2014年4月14日,“安卓手機用戶只要用微信掃描身邊出現的紅色二維碼,通過騰訊應用寶成功安裝其他應用軟件,即可領取微信紅包。
2019年2月10日,微信官方發布2019年春節數據報告,除夕到初五,8.23億人次收發微信紅包。
設計簡單
在“微信紅包”這個功能的設計上,遵循了簡單的原則。發送方通過“新年紅包”公眾號,選擇發送紅包的數量和金額,以及祝福的話語,通過“微信支付”進行支付,就可以發送給好友;接收方則在打開後獲得相應收益,只需要將儲蓄卡與微信關聯,就可以在壹個工作日後提現。2014年1月27日前,用戶在搶紅包之前,要先寫上祝福,然後才可以搶。在這之後,已經改為先搶紅包再發送祝福的過程。