นี่ไม่ใช่การคำนวณที่ง่าย แต่สามารถทำได้มีให้ไม่ใหญ่เกินไป (หมายเลขนี้นับสถานะที่เป็นไปได้ที่คุณต้องติดตามขณะรวบรวมคูปอง)( m+kk)
เรามาเริ่มต้นด้วยการจำลองสถานการณ์เพื่อหาคำตอบ ที่นี่ฉันรวบรวมตัวเลข LEGO หนึ่งล้านครั้ง เส้นสีดำในเนื้อเรื่องนี้ติดตามความถี่ของจำนวนการซื้อที่จำเป็นในการรวบรวมตัวเลขต่าง ๆ อย่างน้อยสามในสิบ
แถบสีเทาเป็นช่วงความมั่นใจ 95% แบบสองด้านโดยประมาณสำหรับแต่ละการนับ ภายใต้มันทั้งหมดเป็นเส้นโค้งสีแดง: นี่คือค่าที่แท้จริง
n = 12k = 3m = 10xผม00xผม11xผม22xผม33ผมJk = 0k = tΠkj = 0xผมJJ
ผม0ผม0/ nผม1/ n
xผม00xผม11xผม22xผม33→ 1n( ฉัน0xผม0- 10xผม1+ 11xผม22xผม33+ ⋯ + i3xผม00xผม11xผม2- 12xผม33) .
( x1Dx0+ x2Dx1+ x3Dx2+ x3Dx3) / nx120= xn0พี( n+kk)Πkj = 0xผมJJพีผม3≥ t( m + 1 ) ( n + kk)
6 n k = 21610- 17
n = 12;
threshold = 10;
k = 3;
(* Draw one object randomly from an urn with `n` of them *)
draw[p_] :=
Expand[Sum[Subscript[x, i] D[#, Subscript[x, i - 1]], {i, 1, k}] +
Subscript[x, k] D[#, Subscript[x, k]] & @ p];
(* Find the chance that we have collected at least `k` each of `threshold` objects *)
f[p_] := Sum[
Coefficient[p, Subscript[x, k]^t] /.
Table[Subscript[x, i] -> 1, {i, 0, k - 1}], {t, threshold, n}]
(* Compute the chances for a long series of draws *)
q = f /@ NestList[draw[#]/n &, Subscript[x, 0]^n, 6 n k];
ผลลัพธ์ซึ่งใช้เวลาประมาณสองวินาทีในการคำนวณ (เร็วกว่าการจำลอง!) คืออาร์เรย์ของความน่าจะเป็นที่จัดทำดัชนีตามจำนวนการจับ นี่คือพล็อตของความแตกต่างซึ่งเป็นความน่าจะเป็นที่จะสิ้นสุดการซื้อของคุณเป็นฟังก์ชั่นการนับ:
ตัวเลขเหล่านี้เป็นตัวเลขที่ใช้ในการวาดเส้นโค้งพื้นหลังสีแดงอย่างแม่นยำในรูปแรก (การทดสอบไคสแควร์บ่งชี้ว่าการจำลองไม่แตกต่างจากการคำนวณนี้อย่างมีนัยสำคัญ)
1−q50.7619549386733