Maison développement back-end tutoriel php 大家在抢红包,程序员在研究红包算法_PHP

大家在抢红包,程序员在研究红包算法_PHP

May 30, 2016 am 08:44 AM
Enveloppe rouge WeChat

除夕全天微信用户红包总发送量达到10.1亿次,摇一摇互动量达到110亿次,红包峰值发送量为8.1亿次/分钟。

抛开微信红包的市场价值不谈,红包本身的算法也引发了热议,由于官方没有给出明确的说法,各家也是众说纷纭,小编下面也为大家带来几种分析。

首先看看数据分析帝

大多数人都做出自己的猜测,这也是在不知道内部随机算法的时候的唯一选择,但是大多数人没有给出自己亲自的调查结果。这里给出一份100样本的调查抽样样本数据,并提出自己的猜测。

1. 钱包钱数满足截尾正态随机数分布。大致为在截尾正态分布中取随机数,并用其求和数除以总价值,获得修正因子,再用修正因子乘上所有的随机数,得到红包价值。

这种分布意味着:低于平均值的红包多,但是离平均值不远;高于平均值的红包少,但是远大于平均值的红包偏多。


图1. 钱包价值与其频率分布直方图及其正态拟合

但看分布直方图并不能推出它符合正态分布,但是考虑到程序的简洁性和随机数的合理性,这是最合乎情理的一种猜测。
越是后面的钱包,价值普遍更高


图2. 钱包序列数与其价值关系曲线

从图2中的线性拟合红线可以看到,钱包价值的总体变化趋势是在慢慢增大,其变化范围大约是一个绿色虚线上下界划出的“通道”。(曲线可以被围在这么一个正合乎常规的“通道”中,也从侧面反映了规律1的合理性,说明了并不是均匀分布的随机数)
从另一个平均数的图中也可以看出这一规律。


图3. 平均数随序列数的变化曲线

在样本中,1000价值的钱包被分成100份,均值为10。然而在图3中我们可以看到在最后一个钱包之前,平均数一直低于10,这就说明了一开始的钱包价值偏低,一直被后期的钱包价值拉着往上走,后期的钱包价值更高。

3. 当然平均数的图还可以透露出另一个规律,那就是最后的那一个人往往容易走运抽得比较多。因为最后那一个人是钱包剩下多少就拿多少的,而之前所有人的平均数 都低于10,所以至少保证了最后一个人会高于平均值。在本样本中,98号钱包抽到35,而最后一份钱包抽到46。

综上,根据样本猜测:


1. 抽到的钱大多数时候跟别人一样少,但一旦一多,就容易多很多。
2. 越是抽后面的钱包,钱越容易多。
3. 最后一个人往往容易撞大运。

点评:这种明显很实际有差异,小编每次不管什么时候抢都是几毛钱。

第二位同学写了一个简单python 代码

据观察,红包分钱满足以下几点:

1.不会有人拿不到钱

2.不会提前分完

3.钱的波动范围很大

红包在一开始创建的时候,分配方案就订好了。抢红包的时候,不过是挨个pop up而已。

因此 python 代码如下:

def weixin_divide_hongbao(money, n): 
divide_table = [random.randint(1, 10000)
for x in xrange(0, n)] 
sum_ = sum(divide_table) 
return [x*money/sum_ for x in divide_table] 
Copier après la connexion

不过上述算法还有两个小问题:

1.浮点数精度问题

2.边界值的处理

第三位同学按照网上流传的python写了一个java的版本

int j=1; 
while(j<1000) 
{ 
int number=10; 
float total=100; 
float money; 
double min=0.01; 
double max; 
int i=1; 
 
List math=new ArrayList(); 
while(i<number) 
{ 
 
max = total- min*(number- i); 
int k = (int)((number-i)/2); 
if (number -i <= 2) 
{k = number -i;} 
max = max/k; 
money=(int)(min*100+Math.random()*(max*100-min*100+1)); 
money=(float)money/100; 
total=total-money; 
math.add(money); 
System.out.println("第"+i+"个人拿到"+money+"剩下"+total); 
i++; 
if(i==number) 
{ 
math.add(total); 
System.out.println("第"+i+"个人拿到"+total+"剩下0"); 
} 
} 
 
System.out.println("本轮发红包中第"+(math.indexOf(Collections.max(math))+1)+"个人手气最佳"); 
j++; 
}
Copier après la connexion
Copier après la connexion

第四位同学的这种算法看起来非常科学。

他认为:

1、每个人都要能够领取到红包;

2、每个人领取到的红包金额总和=总金额;

3、每个人领取到的红包金额不等,但也不能差的太离谱,不然就没趣味;

4、算法一定要简单,不然对不起腾讯这个招牌;

正式编码之前,先搭建一个递进的模型来分析规律

设定总金额为10元,有N个人随机领取:

N=1

则红包金额=X元;

N=2

为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数

第二个红包=10-第一个红包金额;

N=3

红包1=0.01至0.98之间的某个随机数

红包2=0.01至(10-红包1-0.01)的某个随机数

红包3=10-红包1-红包2

……

int j=1; 
while(j<1000) 
{ 
int number=10; 
float total=100; 
float money; 
double min=0.01; 
double max; 
int i=1; 
 
List math=new ArrayList(); 
while(i<number) 
{ 
 
max = total- min*(number- i); 
int k = (int)((number-i)/2); 
if (number -i <= 2) 
{k = number -i;} 
max = max/k; 
money=(int)(min*100+Math.random()*(max*100-min*100+1)); 
money=(float)money/100; 
total=total-money; 
math.add(money); 
System.out.println("第"+i+"个人拿到"+money+"剩下"+total); 
i++; 
if(i==number) 
{ 
math.add(total); 
System.out.println("第"+i+"个人拿到"+total+"剩下0"); 
} 
} 
 
System.out.println("本轮发红包中第"+(math.indexOf(Collections.max(math))+1)+"个人手气最佳"); 
j++; 
} 
Copier après la connexion

输入一看,波动太大,这数据太无趣了!

第1个红包:7.48 元,余额:2.52 元

第2个红包:1.9 元,余额:0.62 元

第3个红包:0.49 元,余额:0.13 元

第4个红包:0.04 元,余额:0.09 元

第5个红包:0.03 元,余额:0.06 元

第6个红包:0.03 元,余额:0.03 元

第7个红包:0.01 元,余额:0.02 元

第8个红包:0.02 元,余额:0 元

改良一下,将平均值作为随机安全上限来控制波动差

int j=1; 
while(j<1000) 
{ 
int number=10; 
float total=100; 
float money; 
double min=0.01; 
double max; 
int i=1; 
 
List math=new ArrayList(); 
while(i<number) 
{ 
 
max = total- min*(number- i); 
int k = (int)((number-i)/2); 
if (number -i <= 2) 
{k = number -i;} 
max = max/k; 
money=(int)(min*100+Math.random()*(max*100-min*100+1)); 
money=(float)money/100; 
total=total-money; 
math.add(money); 
System.out.println("第"+i+"个人拿到"+money+"剩下"+total); 
i++; 
if(i==number) 
{ 
math.add(total); 
System.out.println("第"+i+"个人拿到"+total+"剩下0"); 
} 
} 
 
System.out.println("本轮发红包中第"+(math.indexOf(Collections.max(math))+1)+"个人手气最佳"); 
j++; 
}
Copier après la connexion
Copier après la connexion

输出结果见下图

第1个红包:0.06 元,余额:9.94 元

第2个红包:1.55 元,余额:8.39 元

第3个红包:0.25 元,余额:8.14 元

第4个红包:0.98 元,余额:7.16 元

第5个红包:1.88 元,余额:5.28 元

第6个红包:1.92 元,余额:3.36 元

第7个红包:2.98 元,余额:0.38 元

第8个红包:0.38 元,余额:0 元

小结:

小编觉得这完全可以理解成一个红包引发的血案,小编仅仅列举了几个,还有一些工程学的同学直接抛出了数学模型、离散函数等等,但是无论算法是简单还是复杂,玩的开心就够了。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la quantité maximale d'enveloppes rouges WeChat pouvant être envoyées ? Quelle est la quantité maximale d'enveloppes rouges WeChat pouvant être envoyées ? Feb 23, 2024 pm 04:40 PM

Quelle est la quantité maximale d’enveloppes rouges WeChat pouvant être envoyées ? Il existe une limite supérieure au nombre d'enveloppes rouges envoyées dans WeChat, et certains utilisateurs ne connaissent pas clairement le nombre maximum d'enveloppes rouges pouvant être envoyées sur WeChat. Le montant maximum aux dates non spéciales est de 200. Vient ensuite une introduction au nombre maximum d'enveloppes rouges que l'éditeur apporte aux utilisateurs. Les utilisateurs intéressés peuvent venir y jeter un œil ! Tutoriel d'utilisation de WeChat Comment définir l'image d'arrière-plan du statut WeChat Réponse : 200 yuans Détails : 1. La limite supérieure du montant de l'enveloppe rouge WeChat : 200. Chaque personne ne peut envoyer qu'un maximum de 200 yuans dans des enveloppes rouges WeChat à chaque fois. 2. Montant spécial de l'enveloppe rouge : le 20 mai de chaque année, les utilisateurs peuvent envoyer des enveloppes rouges avec une limite supérieure de 520 yuans.

Comment retourner une enveloppe rouge WeChat ? Comment rejeter une enveloppe rouge WeChat et la restituer immédiatement à l'autre partie ? Comment retourner une enveloppe rouge WeChat ? Comment rejeter une enveloppe rouge WeChat et la restituer immédiatement à l'autre partie ? Feb 22, 2024 pm 04:43 PM

L'enveloppe rouge WeChat actuelle ne prend pas en charge le retour manuel. Modèle applicable du tutoriel : iPhone13 Système : iOS15.5 version : WeChat 8.0.19 Analyse 1 L'enveloppe rouge WeChat actuelle ne prend pas en charge le retour manuel Pour l'enveloppe rouge WeChat qui n'a pas été réclamée, le système WeChat la renverra automatiquement. le compte d'origine après 24 heures, donc quand Si nous souhaitons retourner l'enveloppe rouge après l'avoir reçue, tant que nous ne l'acceptons pas, elle sera automatiquement restituée après 24 heures. Supplément : Comment retourner un transfert WeChat 1 Cliquez sur le transfert qui doit être restitué sur l'interface de chat WeChat. 2Dans l'interface des détails du transfert, cliquez sur l'option de remboursement. 3. Dans la nouvelle fenêtre contextuelle qui apparaît, cliquez à nouveau sur Retour. Résumé/Remarques : L'enveloppe rouge WeChat actuelle ne prend pas en charge le retour manuel. Lorsque nous recevons l'enveloppe rouge, tant que nous ne l'acceptons pas, elle sera retournée après 24 heures.

Étapes détaillées pour renvoyer les enveloppes rouges WeChat Étapes détaillées pour renvoyer les enveloppes rouges WeChat Mar 25, 2024 am 11:21 AM

1. Recherchez l'applet WeChat : 2. Cliquez pour rechercher [Tencent Report Acceptance Center]. 3. Cliquez sur l'option de fraude sur Internet. 4. Saisissez les informations pertinentes et les captures d'écran. Instructions pour l'enveloppe rouge WeChat : 1. Si l'enveloppe rouge WeChat n'est pas récupérée dans les 24 heures, elle sera renvoyée directement. 2. Les enveloppes rouges WeChat sont collectées par d'autres et ne peuvent pas être retournées par vous ;

Comment retourner l'enveloppe rouge WeChat ? Comment gérer le retour des enveloppes rouges WeChat Comment retourner l'enveloppe rouge WeChat ? Comment gérer le retour des enveloppes rouges WeChat Mar 12, 2024 pm 05:00 PM

WeChat est une application mobile qui intègre des fonctions de réseautage social, de paiement, d'achat et autres, et est profondément appréciée des utilisateurs. Parmi elles, les enveloppes rouges WeChat, dans le cadre de la fonction de paiement, ont gagné la faveur de la majorité des utilisateurs pour leur commodité et leur plaisir. Cependant, nous pouvons parfois rencontrer des situations dans lesquelles la mauvaise enveloppe rouge est envoyée. Bien qu'il soit parfois un peu difficile de renvoyer des enveloppes rouges WeChat, lorsque vous utilisez des enveloppes rouges WeChat, assurez-vous de vérifier attentivement les informations pour vous assurer que chaque envoi est exact. Comment retourner l'enveloppe rouge WeChat ? Comment gérer le retour des enveloppes rouges WeChat La méthode de retour des enveloppes rouges WeChat dépend principalement de la réception ou non de l'enveloppe rouge. Si l'enveloppe rouge n'a pas été reçue, il existe les méthodes de traitement suivantes : Situation 1 : Si l'autre partie n'a pas reçu l'enveloppe rouge, vous pouvez communiquer directement avec l'autre partie, l'informer que la mauvaise enveloppe rouge a été envoyée, et demandez à l'autre partie de ne pas le recevoir. plus de 24 heures

Méthodes spécifiques pour définir des rappels pour les enveloppes rouges WeChat Méthodes spécifiques pour définir des rappels pour les enveloppes rouges WeChat Mar 25, 2024 pm 05:46 PM

1. Téléchargez Tencent Butler 2. Recherchez Tencent Mobile Butler : [Utilitaire] - [Plus]. 3. Cliquez ensuite sur [Réveil enveloppe rouge]. 4. Lorsque vous voyez les options pour WeChat et QQ, cliquez sur un bouton ci-dessous pour les ouvrir. 5. Ensuite, vous pouvez voir l'interface après l'ouverture, ou vous pouvez cliquer sur le bouton Paramètres dans le coin supérieur droit pour la définir. 6. Vous pouvez choisir des rappels sonores ou des rappels de vibrations, et vous pouvez tous les définir.

Comment définir le son de notification de l'enveloppe rouge WeChat ? Comment définir le son de l'invite de l'enveloppe rouge WeChat Comment définir le son de notification de l'enveloppe rouge WeChat ? Comment définir le son de l'invite de l'enveloppe rouge WeChat Mar 13, 2024 am 11:30 AM

WeChat, en tant qu'application sociale riche en fonctionnalités, offre non seulement aux gens un moyen pratique de communiquer, mais ajoute également plus de plaisir grâce à sa fonction unique d'enveloppe rouge. Le réglage du son de notification de l'enveloppe rouge WeChat permettra aux utilisateurs de savoir immédiatement lorsqu'ils reçoivent une enveloppe rouge, ajoutant ainsi anticipation et surprise. Le réglage du son de rappel de l'enveloppe rouge WeChat rend chaque fois que vous recevez une enveloppe rouge pleine d'anticipation et de plaisir. La méthode de configuration du son de notification de l'enveloppe rouge WeChat dépend principalement de votre système de téléphonie mobile et de la version de WeChat. Jetons un coup d'œil aux étapes de configuration pour les systèmes Android et Apple. Comment définir le son de notification de l'enveloppe rouge WeChat ? Méthode 1 pour définir le son de l'invite de l'enveloppe rouge WeChat. Pour le système Android, 1. Ouvrez l'application WeChat, cliquez sur l'option [Moi] dans la barre de navigation inférieure, accédez à la page [Moi], puis cliquez sur [Paramètres]. 2. Sur la page des paramètres

Une explication détaillée des invites pour renvoyer les enveloppes rouges WeChat à l'autre partie Une explication détaillée des invites pour renvoyer les enveloppes rouges WeChat à l'autre partie Mar 25, 2024 pm 05:51 PM

1. Tout d’abord, nous ouvrons WeChat et cliquons sur le champ de recherche. 2. Recherchez WeChat Pay 3. Cliquez pour entrer. 4. Les deux parties recevront ici des invites de remboursement de l'enveloppe rouge WeChat.

Quel est le nombre maximum d'enveloppes rouges pouvant être envoyées sur WeChat ? Quel est le nombre maximum d'enveloppes rouges pouvant être envoyées sur WeChat ? Aug 17, 2023 pm 01:48 PM

Vous pouvez envoyer jusqu'à 200 enveloppes rouges sur WeChat. Détails : Le montant total des enveloppes rouges envoyées à chaque utilisateur par jour ne peut pas dépasser 1 000 yuans. Bien qu’il existe certaines limites, les enveloppes rouges WeChat restent un moyen de paiement très pratique et populaire. Que ce soit pendant le Nouvel An chinois ou lors d'autres occasions spéciales, les enveloppes rouges WeChat apportent plus de plaisir et de surprises aux gens.

See all articles