python生日_Python设置生日
你为什么要模拟这个问题而不是用封闭的形式来解决这个问题?有一个相当不错的近似值,既快速又容易编写代码:import mathdef closed_form_approx_birthday_collision_probability(num_people):return 1 - math.exp(-num_people * (num_people - 1) / (2 * 365.0))您还可以实现一
你为什么要模拟这个问题而不是用封闭的形式来解决这个问题?有一个相当不错的近似值,既快速又容易编写代码:import math
def closed_form_approx_birthday_collision_probability(num_people):
return 1 - math.exp(-num_people * (num_people - 1) / (2 * 365.0))
您还可以实现一个非常好的“精确”解决方案(在引号中,因为在转换为float时会丢失一些保真度):
^{pr2}$
做一个模拟,你可以做这样的事情。我使用列表而不是集合,因为可能性很小,这样可以避免使用集合所做的额外工作:import random
def birthday_collision_simulate_once(num_people):
s = [False] * 365
for _ in range(num_people):
birthday = random.randint(0, 364)
if s[birthday]:
return True
else:
s[birthday] = True
return False
def birthday_collision_simulation(num_people, runs):
collisions = 0
for _ in range(runs):
if birthday_collision_simulate_once(num_people):
collisions += 1
return collisions / float(runs)>>> closed_form_approx_birthday_collision_probability(20)
0.40580512747932584
>>> closed_form_exact_birthday_collision_probability(20)
0.41143838358058
>>> birthday_collision_simulation(20, 100000)
0.41108
当然,这么多次运行的模拟更接近实际的41.1%,计算起来要慢得多。我会选择一个封闭形式的解决方案,这取决于它需要多精确。在

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)