大家在抢红包,程序员在研究红包算法_php实例
除夕全天微信用户红包总发送量达到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]
不过上述算法还有两个小问题:
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++; }
第四位同学的这种算法看起来非常科学。
他认为:
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++; }
输入一看,波动太大,这数据太无趣了!
第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++; }
输出结果见下图
第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 元
小结:
小编觉得这完全可以理解成一个红包引发的血案,小编仅仅列举了几个,还有一些工程学的同学直接抛出了数学模型、离散函数等等,但是无论算法是简单还是复杂,玩的开心就够了。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Wie viele rote WeChat-Umschläge können maximal versendet werden? Es gibt eine Obergrenze für die Anzahl roter Umschläge, die über WeChat gesendet werden können, und einige Benutzer sind sich nicht im Klaren darüber, wie viele rote Umschläge maximal über WeChat gesendet werden können. Der Höchstbetrag an nicht-speziellen Terminen beträgt 200. Als nächstes folgt eine Einführung in die maximale Anzahl roter Umschläge, die der Herausgeber den Benutzern zur Verfügung stellt. Interessierte Benutzer können vorbeikommen und einen Blick darauf werfen! Tutorial zur Verwendung von WeChat So legen Sie das Hintergrundbild für den WeChat-Status fest Antwort: 200 Yuan Details: 1. Die Obergrenze des Betrags für den roten WeChat-Umschlag: 200. Jede Person kann jedes Mal maximal 200 Yuan in roten WeChat-Umschlägen versenden. 2. Besonderer Betrag für rote Umschläge: Am 20. Mai eines jeden Jahres können Benutzer rote Umschläge mit einer Obergrenze von 520 Yuan versenden.

Der aktuelle rote WeChat-Umschlag unterstützt keine manuelle Rücksendung. Anwendbares Modell des Tutorials: iPhone13 System: iOS15.5 Version: WeChat 8.0.19 Analyse 1 Der aktuelle rote WeChat-Umschlag unterstützt keine manuelle Rückgabe. Für den nicht beanspruchten WeChat-Umschlag sendet das WeChat-System ihn automatisch zurück Wenn wir den roten Umschlag nach Erhalt zurücksenden möchten und wir ihn nicht annehmen, wird er nach 24 Stunden automatisch zurückgeschickt. Ergänzung: So geben Sie eine WeChat-Überweisung zurück: 1 Klicken Sie auf der WeChat-Chat-Oberfläche auf die Überweisung, die zurückgegeben werden soll. 2Klicken Sie in der Benutzeroberfläche mit den Überweisungsdetails auf die Rückerstattungsoption. 3. Klicken Sie im neuen Popup-Fenster, das erscheint, erneut auf Zurück. Zusammenfassung/Anmerkungen: Der aktuelle rote Umschlag von WeChat unterstützt keine manuelle Rücksendung. Wenn wir den roten Umschlag erhalten, wird er nach 24 Stunden zurückgesandt, sofern wir ihn nicht annehmen.

1. Suchen Sie das WeChat-Applet: 2. Klicken Sie, um nach [Tencent Report Acceptance Center] zu suchen. 3. Klicken Sie auf die Option Internetbetrug. 4. Geben Sie relevante Informationen und Screenshots ein. Anweisungen für den roten WeChat-Umschlag: 1. Wenn der rote WeChat-Umschlag nicht innerhalb von 24 Stunden abgeholt wird, wird er direkt zurückgesandt. 2. Rote WeChat-Umschläge werden von anderen gesammelt und können von Ihnen nicht zurückgegeben werden.

WeChat ist eine mobile Anwendung, die soziale Netzwerke, Zahlungen, Einkäufe und andere Funktionen integriert und bei den Benutzern sehr beliebt ist. Unter anderem haben die roten WeChat-Umschläge als Teil der Zahlungsfunktion aufgrund ihrer Bequemlichkeit und ihres Spaßes die Gunst der meisten Benutzer gewonnen. Allerdings kann es manchmal vorkommen, dass der falsche rote Umschlag verschickt wird. Obwohl es manchmal etwas mühsam ist, rote WeChat-Umschläge zurückzusenden, sollten Sie bei Verwendung roter WeChat-Umschläge die Informationen sorgfältig überprüfen, um sicherzustellen, dass jede Sendung korrekt ist. Wie kann ich den roten WeChat-Umschlag zurücksenden? So handhaben Sie die Rückgabe roter WeChat-Umschläge: Die Rückgabemethode roter WeChat-Umschläge hängt hauptsächlich davon ab, ob der rote Umschlag angekommen ist. Wenn der rote Umschlag nicht eingegangen ist, gibt es folgende Vorgehensweisen: Situation 1: Wenn die Gegenpartei den roten Umschlag nicht erhalten hat, können Sie direkt mit der anderen Partei kommunizieren, sie darüber informieren, dass der falsche rote Umschlag gesendet wurde, und Bitten Sie die andere Partei, es nicht zu erhalten. mehr als 24 Stunden

1. Tencent Butler herunterladen 2. Tencent Mobile Butler finden: [Utility] – [Mehr]. 3. Klicken Sie dann auf [Roter Umschlag-Wecker]. 4. Wenn Sie die Optionen für WeChat und QQ sehen, klicken Sie unten auf eine Schaltfläche, um sie zu öffnen. 5. Anschließend können Sie die Benutzeroberfläche nach dem Öffnen sehen oder auf die Schaltfläche „Einstellungen“ in der oberen rechten Ecke klicken, um sie festzulegen. 6. Sie können akustische Erinnerungen oder Vibrationserinnerungen auswählen und alle einstellen.

1. Zuerst öffnen wir WeChat und klicken auf das Suchfeld. 2. Suchen Sie nach WeChat Pay 3. Klicken Sie zum Betreten. 4. Beide Parteien erhalten hier Aufforderungen zur Rückerstattung des roten WeChat-Umschlags.

Als funktionsreiche soziale Anwendung bietet WeChat den Menschen nicht nur eine bequeme Möglichkeit zur Kommunikation, sondern sorgt durch die einzigartige Funktion des roten Umschlags auch für noch mehr Spaß. Durch die Einstellung des WeChat-Benachrichtigungstons für den roten Umschlag wissen Benutzer sofort, wenn sie einen roten Umschlag erhalten, was für Vorfreude und Überraschung sorgt. Die Einstellung des WeChat-Aufforderungstons für den roten Umschlag macht jedes Mal, wenn Sie einen roten Umschlag erhalten, voller Vorfreude und Spaß. Die Einstellungsmethode für den WeChat-Benachrichtigungston für rote Umschläge hängt hauptsächlich von Ihrem Mobiltelefonsystem und der WeChat-Version ab. Werfen wir einen Blick auf die Einrichtungsschritte für Android- und Apple-Systeme. Wie stelle ich den WeChat-Benachrichtigungston für den roten Umschlag ein? Methode 1 zum Festlegen des Aufforderungstons für den roten WeChat-Umschlag: 1. Öffnen Sie die WeChat-Anwendung, klicken Sie auf die Option [Ich] in der unteren Navigationsleiste, rufen Sie die Seite [Ich] auf und klicken Sie dann auf [Einstellungen]. 2. Auf der Einstellungsseite

Sie können bis zu 200 rote Umschläge auf WeChat versenden. Einzelheiten: Der Gesamtbetrag der roten Umschläge, die pro Tag an jeden Benutzer gesendet werden, darf 1.000 Yuan nicht überschreiten. Obwohl es einige Einschränkungen gibt, sind rote WeChat-Umschläge immer noch eine sehr praktische und beliebte Zahlungsmethode. Ob während des chinesischen Neujahrs oder zu anderen besonderen Anlässen, die roten Umschläge von WeChat bringen den Menschen mehr Spaß und Überraschungen.
