你為什麼要模擬這個問題而不是用封閉的形式來解決這個問題?有乙個相當不錯的近似值,既快速又容易編寫**:import math
return 1 - math.exp(-num_people * (num_people - 1) / (2 * 365.0))
您還可以實現乙個非常好的「精確」解決方案(在引號中,因為在轉換為float時會丟失一些保真度):
^$做乙個模擬,你可以做這樣的事情。我使用列表而不是集合,因為可能性很小,這樣可以避免使用集合所做的額外工作: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
0.40580512747932584
>>> closed_form_exact_birthday_collision_probability(20)
0.41143838358058
>>> birthday_collision_simulation(20, 100000)
0.41108
當然,這麼多次執行的模擬更接近實際的41.1%,計算起來要慢得多。我會選擇乙個封閉形式的解決方案,這取決於它需要多精確。在
python 正則匹配生日
import re line 出生於2001年6月1日 line 出生於2001年06月01日 line 出生於2001年6月 line 出生於2001 06 01 line 出生於2001 06 01 line 出生於2001 06 line 出生於2001 6 1 line 出生於2001 6 ...
python 生日悖論概率計算。
生日悖論指如果乙個房間裡有23 或以上人,那麼至少有兩個人生日相同的 概率大於50 編寫程式,輸出在不同隨機樣本數量下,23 個人中至少兩個人生日相同的概率。from random import randint def list birth list birth for i in range 23 ...
python 生日悖論概率計算。
生日悖論指如果乙個房間裡有23 或以上人,那麼至少有兩個人生日相同的 概率大於50 編寫程式,輸出在不同隨機樣本數量下,23 個人中至少兩個人生日相同的概率。from random import randint def list birth list birth for i in range 23 ...