導航:首頁 > APP軟體 > 微信紅包分配演算法解析

微信紅包分配演算法解析

發布時間:2023-01-10 18:19:24

① 50塊25個拼手氣紅包怎麼分配

微信拼手氣紅包演算法分析
熱度:5 關鍵字:分析 時間:2022-12-04 20:30:27
好長一段時間了,身邊的朋友都是在揣著手機一直在搶紅包,都知道搶紅包是一件非常有趣的事,還會有人因為搶紅包手氣差而生氣,其實我們是不知道微信紅包隨機的演算法,其實微信紅包不單單是靠手氣搶大小的,它中間藏著很深的數據演算法,只不過我們不知道而已,我們今天就來討論一下微信紅包的演算法!小編精心為大家准備了一下相關材料,大家可以好好的看一看下面柱形圖和指數分布柱形圖所得出的紅包獲取平均值,具體數據就在下文哦,感興趣的小夥伴們來看吧!

首先,我們來討論一下為什麼要採用截尾正態分布。介紹一種非常直接的方法:如果我有50元,要發給25人。那麼我用連續均勻分布隨機產生24個位於0到50之間的數字。這24個數字將整個0-50的區間劃分為25份,分別分給這25個人。事實真的是這樣嗎?學過序列統計的人應該知道,由於這24個點是連續均勻分布產生的,因此他們的序列統計量也是連續均勻分布產生的,因此他們之間的間隔的分布是指數分布的。具體證明從略,

如果沒有序列統計的背景,我們也可以做一個模擬。我有60元錢,按照上述數據產生機理隨機分成60份(因此人均1元左右),反復操作10000次,對數據採取聚集後的歸一化處理。由於中心極限定理(Central Limit Theorem),該分布反應整體分布(Population Distribution)。畫出柱形圖如下:

可見是符合指數分布的。

這種產生機理不好的地方在於:大多數人得到的錢非常少,而極少數人得到的錢卻非常多,因此可能有一個公平性的問題,而這可能會對抽取人的積極性產生影響。截尾正態分布能夠更好地避免這樣的問題,因為更多人的紅包大小會聚集在平均值附近,而且由於尾部更快的衰減,因此獲得特別大的紅包的概率也會相應減小,有助於增加公平性與參與的積極性。這一點佐證了土豆的觀點,盡管具體截尾的方位可能需要獲取更多的數據才有可能有一個准確的預測。

以下是我的兩個樣本的柱形圖:

大家可以比照我的柱形圖與上面指數分布柱形圖。注意到:

1.更多的人獲得的紅包在均值附近;

2.獲取大於2.5元的紅包的概率幾乎為零(事實上,第一個錢包的最高值是2.06,第二個錢包的最高值是2.10。然而假設是指數分布的(或者說均勻連續分布的數據產生機理),那麼在每個60元紅包中都會有一定量的抽取者抽到大於3甚至大於4元的紅包--這點我通過模擬也確認了。

我進一步對正態假設做了檢驗

接下去我討論一下獲取錢包大小和搶錢包先後的關系。我的結論是,紅包大小和搶紅包先後沒有統計意義上的關聯。

② 微信中發紅包時怎麼平均分配

微信紅包有兩種,一種就是拼手氣紅包,還有一種就是普通紅包,普通紅包就屬於平均分配!

③ 微信紅包的隨機演算法是怎樣的

1)紅包大小服從截尾正態分布,其好處是減少抽取紅包大小分布的方差,讓更多的人抽取的紅包在均值附近,同時仍給一小部分人抽取大紅包的機會,總體來說增加了紅包抽取人的積極性和游戲的公平性;
2)抽取紅包大小與抽取紅包先後無相關性。一種可能的紅包產生機制是:當發紅包者<准備紅包>的時候,程序自動依照截尾分布產生了相應大小,相應個數的紅包,然後隨機發給抽取紅包的人。同樣,這樣的一個隨機過程有助於增加游戲的公平性,也減少了紅包抽取人投機操作。

錢包錢數滿足截尾正態隨機數分布。大致為在截尾正態分布中取隨機數,並用其求和數除以總價值,獲得修正因子,再用修正因子乘上所有的隨機數,得到紅包價值。

這種分布意味著:低於平均值的紅包多,但是離平均值不遠;高於平均值的紅包少,但是遠大於平均值的紅包

④ 微信紅包的隨機演算法是怎樣實現的

自微信紅包推出以來,對於微信紅包的我演算法很多人都在做出自己的猜測,這也是在不知道內部隨機演算法的時候的唯一選擇,但是大多數人沒有給出自己親自的調查結果。這里給出一份100樣本的調查抽樣樣本數據,並提出自己的猜測。

1.錢包錢數滿足截尾正態隨機數分布。大致為在截尾正態分布中取隨機數,並用其求和數除以總價值,獲得修正因子,再用修正因子乘上所有的隨機數,得到紅包價值。

這種分布意味著:低於平均值的紅包多,但是離平均值不遠;高於平均值的紅包少,但是遠大於平均值的紅包偏多。



圖1. 錢包價值與其頻率分布直方圖及其正態擬合

但看分布直方圖並不能推出它符合正態分布,但是考慮到程序的簡潔性和隨機數的合理性,這是最合乎情理的一種猜測。

2.越是後面的錢包,價值普遍更高



圖2. 錢包序列數與其價值關系曲線

從圖2中的線性擬合紅線可以看到,錢包價值的總體變化趨勢是在慢慢增大,其變化范圍大約是一個綠色虛線上下界劃出的「通道」。(曲線可以被圍在這么一個正合乎常規的「通道」中,也從側面反映了規律1的合理性,說明了並不是均勻分布的隨機數)

從另一個平均數的圖中也可以看出這一規律。



圖3. 平均數隨序列數的變化曲線

在樣本中,1000價值的錢包被分成100份,均值為10。然而在圖3中我們可以看到在最後一個錢包之前,平均數一直低於10,這就說明了一開始的錢包價值偏低,一直被後期的錢包價值拉著往上走,後期的錢包價值更高。

3.當然平均數的圖還可以透露出另一個規律,那就是最後的那一個人往往容易走運抽得比較多。因為最後那一個人是錢包剩下多少就拿多少的,而之前所有人的平均數都低於10,所以至少保證了最後一個人會高於平均值。在本樣本中,98號錢包抽到35,而最後一份錢包抽到46。



綜上,根據樣本猜測:

1.抽到的錢大多數時候跟別人一樣少,但一旦一多,就容易多很多。

2.越是抽後面的錢包,錢越容易多。

3.最後一個人往往容易撞大運。

其實這些一點用的沒有,就是自己閑了無聊開一開腦洞,大家也別認真,玩紅包其實就是開心就好啦

⑤ 微信紅包的隨機演算法是怎樣實現的

下面是一個比較拙的演算法,真實的紅包隨機數要稍微復雜些:

classProgram
{
staticvoidMain(string[]args)
{
double[]hb=WeiXin.Hongbao(5,1);

for(inti=0;i<5;i++)
{
Console.WriteLine(hb[i]);
}

}
}

///<summary>
///微信類
///</summary>
publicclassWeiXin
{
///<summary>
///紅包隨機分配
///</summary>
///<paramname="personNumber">紅包個數</param>
///<paramname="money">金額</param>
///<returns></returns>
publicstaticdouble[]Hongbao(intpersonNumber,doublemoney)
{
Randomrand=newRandom();
doublefen=money;
double[]hb=newdouble[personNumber];
doublerm=0D;

//預分配
for(inti=0;i<personNumber;i++)hb[i]=0.01;

fen-=(personNumber*0.01);

if(fen>0.01)
{
//隨機分配
while(fen>0)
{
rm=GetRandomNumber(0.01,fen);
hb[rand.Next(0,personNumber)]+=rm;
fen-=rm;
}
}

returnhb;
}

///<summary>
///返回介於minimum和maximum之間的隨機數
///</summary>
///<paramname="minimum">最小值</param>
///<paramname="maximum">最大值</param>
///<returns></returns>
(doubleminimum,doublemaximum)
{
Randomrandom=newRandom();
returnMath.Round(random.NextDouble()*(maximum-minimum)+minimum,2);
}
}

⑥ 微信群裡面發紅包,群里成員領到的紅包金額是怎麼計算的,是隨機的還是怎麼來的

微信群里發的紅包,在默認狀態下都是隨機領的,有的多,有的少,但是如果你想評論發,也可以設置的,所以看你是什麼情況的。

⑦ 微信紅包金額怎麼分配

微信紅包分兩種:
1、單獨發給一個人的,紅包都歸個人;
2、紅包發到群里的,會隨機分配;
但根據個人發紅包的經驗,頭兩個和倒數四到五個,通常拿不到最大的紅包。
最容易拿到大紅包的,是倒數第一第二,通常都是手氣最佳。
根據個人的經驗。

⑧ 微信紅包的隨機演算法是怎樣實現的

‍‍

核心演算法就是隨機數主要的需求是得出10個紅包,同時有一個隱性條件,每個紅包中都要有錢,即每個紅包至少1分錢。如果是我會這么干(100塊分成10個紅包),先取10分錢出來,這樣可以屏蔽有的紅包沒錢的問題。剩下9990分錢,把這9990分錢分成10份即可。9990分錢一字排開,用9塊板子插到這些錢中間(插板子這事你們肯定都干過),每兩塊板子中有多少錢就是一個紅包中的錢數了,再加上之前取出的1分錢就是最後的紅包了。怎麼找插板子的位置呢?取0到1之間的隨機數乘9991就好了,重復做9次。第1塊板之前的錢加1分就是第一個紅包里的錢數,依此類推得出10個紅包中的錢數。之後要測試這種方法是不是平均的分了。分個一萬次,嗯,反正電腦不會累。回答完畢。微信的紅包表現還挺好的 也就卡個10來分鍾。。。想發的可以先塞錢,過10分鍾再發。

‍‍

⑨ 微信紅包的隨機演算法是怎樣實現的

我考慮了一個簡單的演算法:
比如100元,由10個人分,那麼平均一個人是10元錢。然後付款後,系統開始分份兒。
第一份:系統由0~10元之間隨機一個數,作為這一份的錢數,設x1。
第二份:剩下的錢(100-x1),系統由0~(100-x1)/(10-1)隨機一個數,作為這份的錢數,設x2
.。。。
第n份:剩下的錢(100-x1-x2-...-xn),系統由0~(100-x1-x2-...-xn-1)/(10-n)隨機一個數,作為這個份的錢數,設為xn
當用戶進來拿紅包的時候,系統由0~9之間隨機一個數,隨機到幾,就取第幾份紅包,然後將這個數存到list里。當之後的用戶抽到相同的隨機數時,則將這個數+1,如遇相同再+1,直至list滿,紅包發完。

⑩ 微信紅包的隨機演算法是怎樣實現的

一個紅復包要分10份的話,就取制10個0.01到0.99的隨機數,按照這10個數分配紅包,來的人隨機給。
當然10個隨機數的和不能超過1,做法可以這樣:
1. 維護一個當前剩餘比例Rest,初始1
2. 維護一個當前剩餘紅包份數Left,初始10
3. 每次算隨機數A的時候,要求A>0,並且A<=Rest*((Left+1)/2),保證隨機數的和在1之內,並且沒有哪個隨機數太大,更新Rest=Rest-A
4. 最後一個隨機數可以不按照3的要求,把所有的給它,也可以留做紅包的剩餘返回給用戶。

閱讀全文

與微信紅包分配演算法解析相關的資料

熱點內容
網路中常用的傳輸介質 瀏覽:518
文件如何使用 瀏覽:322
同步推密碼找回 瀏覽:865
樂高怎麼才能用電腦編程序 瀏覽:65
本機qq文件為什麼找不到 瀏覽:264
安卓qq空間免升級 瀏覽:490
linux如何刪除模塊驅動程序 瀏覽:193
at89c51c程序 瀏覽:329
怎麼創建word大綱文件 瀏覽:622
裊裊朗誦文件生成器 瀏覽:626
1054件文件是多少gb 瀏覽:371
高州禁養區內能養豬多少頭的文件 瀏覽:927
win8ico文件 瀏覽:949
仁和數控怎麼編程 瀏覽:381
項目文件夾圖片 瀏覽:87
怎麼在東芝電視安裝app 瀏覽:954
plc顯示數字怎麼編程 瀏覽:439
如何辨別假網站 瀏覽:711
寬頻用別人的賬號密碼 瀏覽:556
新app如何佔有市場 瀏覽:42

友情鏈接