一个关于红包的问题引发的python算法初体验

有个初学python的小伙伴,在群里问我关于实现抢红包的算法的问题,于是就有了以下对话

这里,这位同学的思路是这样的:

每次抢到的金额 = 随机区间 ( 0.01, 剩余金额 )

为什么我这样说呢?我们来举个栗子:

假设10个人抢100元的红包:

第一个人随机的范围是(0.01,100),平均是50元,假如第一个人抢到了50元,

第二个人随机的范围是(0.01,50),平均是25元,如果这个人抢到了25元,那往下推的话,就会发现第三个人的范围是(0.01,25)……

越往后金额越低,我们写段代码来看看

我们的思路是这样的:

剩余红包金额为M,剩余人数为N,那么有如下公式:

每次抢到的金额 = 随机区间 (0.01, M / N X 2)

这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。

举个栗子:

假设有10个人,红包总额100元。

100/10X2 = 20, 所以第一个人的随机范围是(0.01,20 ),平均可以抢到10元。

假设第一个人随机到10元,那么剩余金额是100-10 =90 元。

90/9X2 = 20, 所以第二个人的随机范围同样是(0.01,20 ),平均可以抢到10元。

假设第二个人随机到10元,那么剩余金额是90-10 =80 元。

80/8X2 = 20, 所以第三个人的随机范围同样是(0.01,20 ),平均可以抢到10元。

以此类推,每一次随机范围的均值是相等的。

我们来写代码实现一下:

大致思路如下:

先将红包m分成n份,然后随机n次取出红包

这里有2个地方需要注意:

出现重复的处理办法

尽可能的降低时间和空间的复杂度

这里就不写代码了,大家有兴趣可以去研究下哦!

这里要说明下,微信或者QQ的红包规则很可能就是最后一种方式,当然没有见过代码也说不准,大家有兴趣可以找找相关资料的!

欢迎大家来和我一起研究算法,研究python,交流学习哦!

原文发布于微信公众号 - 云飞学python(P542110741)

原文发表时间:2018-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法工程师

Java 机器学习库Smile实战(二)AdaBoost

1. AdaBoost算法简介 Boost 算法系列的起源来自于PAC Learnability(PAC 可学习性)。这套理论主要研究的是什么时候一个问题是可...

3366
来自专栏AI2ML人工智能to机器学习

矩阵分解 (加法篇)

类比的看, 我们知道整数的分解可以利用乘法也可以利用加法。譬如我们玩过的游戏24点, 就是利用加法进行分解和整合。 这种分解很重要的是计算上的便利性!

951
来自专栏灯塔大数据

每周学点大数据 | No.16平面图直径

No.16期 平面图直径 小可:好的,关于图的基本内容我听懂了。 Mr. 王:很好,图能够对很多现实问题进行数学抽象,方便通过计算机的手段进行抽象。而平面图指...

3264
来自专栏利炳根的专栏

学习笔记 TF059 :自然语言处理、智能聊天机器人

自然语言处理,语音处理、文本处理。语音识别(speech recognition),让计算机能够“听懂”人类语音,语音的文字信息“提取”。

8262
来自专栏机器学习算法与Python学习

n-gram文法中数据稀疏问题解决方案之一:Good-Turing平滑

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 统计语言模型中,N元语法模型不可避免...

3814
来自专栏AI科技评论

ACL论文 | 深度学习大神新作,神经网络的自然语言翻译应用

在 8月7日在德国柏林召开的2016 计算语言学(ACL)大会上,学者Thang Luong、Kyunghyun Cho 和 Christopher D. Ma...

3655
来自专栏专知

【论文笔记】基于实体、属性和关系的知识表示学习

2453
来自专栏语言、知识与人工智能

游戏文本关键词提取工作的尝试和探索

如何将合适的游戏文本打上正确的关键词标签,并将内容推送给恰当的用户成为一个重要的课题。

1.5K5
来自专栏Python小屋

计算Fibonacci数列第n项的第8种方法(数学推导与Python实现)

感谢山东工商学院学院厉玉蓉老师提供的完美数学推导,我在重写和整理时略加修改,比如变量替换时她喜欢用字母z,而我喜欢用x,哈哈。当然,还有另外几个小地方^_^ 本...

3165
来自专栏深度学习自然语言处理

pyTorch基础入门练习

import导入 import torch#基本的torch函数 import torch.autograd as autograd#自动求导 import t...

39910

扫码关注云+社区

领取腾讯云代金券