Probability Lab hoạt động

Nghịch lý sinh nhật

Birthday Problem — Nghịch lý sinh nhật

Đã chạy được. Mục này có công cụ tính toán thật trên nền tảng, không phải mô tả lộ trình.

Nghịch lý sinh nhật Lý thuyết chính xác đặt cạnh mô phỏng

Bài toán kinh điển cho thấy trực giác về xác suất sai ở đâu, và vì sao tấn công va chạm hash chỉ tốn √N phép thử.

Xác suất trùng (lý thuyết) 50.7297%
Mô phỏng 50.7700%
Sai lệch +0.0403%
Cần bao nhiêu người cho 50% 23
Kết luận Mô phỏng khớp lý thuyết
① Tham số
2200

Xác suất trùng theo cỡ nhóm: mô phỏng và lý thuyết

Mô phỏngLý thuyết
Xác suất trùng theo cỡ nhóm: mô phỏng và lý thuyết0.56860.35880.1489-0.060921471013161922

Đường mô phỏng dựng từ vị trí xảy ra trùng đầu tiên của 20,000 lượt, nên nó là 20,000 lượt ĐÓ đọc theo mọi cỡ nhóm chứ không phải chạy lại. Hai đường bám nhau trong khoảng ±0.71% là đúng như sai số Monte Carlo cho phép.

Diễn giải nhanh

Mô phỏng 50.7700% so với lý thuyết 50.7297% (lệch 0.1σ)

Sai số Monte Carlo của 20,000 lượt là ±0.3535%. Nằm trong 3σ nghĩa là chênh lệch chỉ do số lượt hữu hạn, không phải do công thức hay bộ sinh số sai.

Chỉ cần 23 người là xác suất trùng vượt 50%

Với 365 ngày trong năm. Quy luật xấp xỉ là √(2·365·ln2) ≈ 22 — tăng theo CĂN của số ngày, nên năm dài gấp 4 lần cũng chỉ cần gấp đôi số người.

Nhóm 23 người có 253 cặp, không phải 22

Đây là toàn bộ nghịch lý. Trực giác đếm số cặp có MÌNH; bài toán đếm mọi cặp, và số đó tăng theo bình phương.

Xác suất ở nhóm 23 người là 50.73%

Trong mật mã học đây là cận trên của an toàn: hàm băm b bit bị tìm ra va chạm sau khoảng 2^(b/2) phép thử, nên SHA-1 160 bit chỉ còn 80 bit sức chống va chạm.

Khi nào con số này sai: Trực giác sai ở đây vì người ta nghĩ về 'ai đó trùng VỚI TÔI' (chỉ 22 cặp) trong khi bài toán hỏi 'có cặp nào trùng' (253 cặp). Số cặp tăng theo bình phương, và đó là toàn bộ nghịch lý.

Chi tiết

Số cặp có thể 253
Số lượt mô phỏng 20,000
Với 23 người 50.73%
Với 50 người 97.04%
Ứng dụng thật Tấn công sinh nhật trong mật mã học: tìm va chạm hash chỉ cần khoảng √N phép thử, không phải N

Xác suất trùng theo cỡ nhóm: mô phỏng và lý thuyết

Mô phỏngLý thuyết
Xác suất trùng theo cỡ nhóm: mô phỏng và lý thuyết0.56860.35880.1489-0.060921471013161922

Đường mô phỏng dựng từ vị trí xảy ra trùng đầu tiên của 20,000 lượt, nên nó là 20,000 lượt ĐÓ đọc theo mọi cỡ nhóm chứ không phải chạy lại. Hai đường bám nhau trong khoảng ±0.71% là đúng như sai số Monte Carlo cho phép.

Đường lý thuyết mở rộng và mốc 50%

Xác suất trùngMốc 50%
Đường lý thuyết mở rộng và mốc 50%1.1130.70250.2916-0.119319172533414957

Cùng công thức, quét tới nhóm 60 người. Đường cắt mốc 50% ở 23 người — con số nhỏ đến mức phản trực giác vì số cặp tăng theo bình phương: nhóm 23 người đã có 253 cặp.

Toàn bộ chỉ số

Số cặp có thể 253
Số lượt mô phỏng 20,000
Với 23 người 50.73%
Với 50 người 97.04%
Ứng dụng thật Tấn công sinh nhật trong mật mã học: tìm va chạm hash chỉ cần khoảng √N phép thử, không phải N

Cách dùng

  1. Điền tham số ở cột trái. Mọi ô đã có sẵn giá trị ví dụ chạy được, nên bạn có thể bấm Tính ngay trước rồi sửa sau.
  2. Đọc thẻ số ở trên cùng, rồi mục Diễn giải nhanh để biết con số đó nói gì.
  3. Đọc dòng “Khi nào con số này sai” trước khi dùng kết quả để quyết định — đó là giả định vỡ đầu tiên.
Giới hạn chung. Công cụ này tính đúng công thức của nó trên dữ liệu bạn đưa vào. Nó không kiểm tra dữ liệu của bạn có phù hợp với giả định của phương pháp hay không — phần đó vẫn là việc của người dùng, và mục “sai ở đâu” bên dưới trang liệt kê các chỗ hỏng thường gặp.

Nghịch lý sinh nhật là gì

Nghịch lý sinh nhật hỏi cần bao nhiêu người để xác suất có ít nhất hai người trùng ngày sinh vượt 50%. Đáp án 23 người gây bất ngờ vì trực giác đếm số người, trong khi cái thực sự tăng là số cặp — 23 người tạo ra 253 cặp. Đây là mô hình gốc của bài toán đụng độ hàm băm và trùng khoá ngẫu nhiên trong hệ thống thật.

Làm thế nào

  1. Tính xác suất bù: mọi người đều khác ngày sinh.
  2. P(khác hết) = 365/365 × 364/365 × … × (365−n+1)/365.
  3. Xác suất cần tìm là 1 trừ giá trị trên.
  4. Xấp xỉ nhanh: P ≈ 1 − exp(−n(n−1)/(2·365)).
  5. Tổng quát hoá sang N khả năng bất kỳ để áp cho bài toán đụng độ hàm băm hoặc trùng mã đơn hàng.

Cần dữ liệu gì

Số người n và số khả năng N

Đo bằng chỉ số nào

n để P vượt 50% 23 người với 365 ngày
Số cặp C(n,2) đại lượng thực sự điều khiển kết quả
√N quy mô mẫu gây đụng độ với N khả năng

Sai ở đâu

Phần quan trọng nhất của trang này. Một phương pháp được mô tả mà không nói chỗ nó hỏng là phiên bản quảng cáo của phương pháp đó.

! Nhầm với câu hỏi khác hẳn: xác suất có người trùng ngày sinh với riêng bạn cần tới 253 người, vì lúc đó chỉ còn n−1 cặp.
! Giả định ngày sinh phân bố đều — thực tế có mùa sinh, khiến xác suất trùng còn cao hơn tính toán lý thuyết.

Câu hỏi thường gặp

Nghịch lý sinh nhật là gì?

Nghịch lý sinh nhật hỏi cần bao nhiêu người để xác suất có ít nhất hai người trùng ngày sinh vượt 50%. Đáp án 23 người gây bất ngờ vì trực giác đếm số người, trong khi cái thực sự tăng là số cặp — 23 người tạo ra 253 cặp. Đây là mô hình gốc của bài toán đụng độ hàm băm và trùng khoá ngẫu nhiên trong hệ thống thật.

Nghịch lý sinh nhật được làm như thế nào?

1. Tính xác suất bù: mọi người đều khác ngày sinh. 2. P(khác hết) = 365/365 × 364/365 × … × (365−n+1)/365. 3. Xác suất cần tìm là 1 trừ giá trị trên. 4. Xấp xỉ nhanh: P ≈ 1 − exp(−n(n−1)/(2·365)). 5. Tổng quát hoá sang N khả năng bất kỳ để áp cho bài toán đụng độ hàm băm hoặc trùng mã đơn hàng.

Nghịch lý sinh nhật hay sai ở đâu?

Nhầm với câu hỏi khác hẳn: xác suất có người trùng ngày sinh với riêng bạn cần tới 253 người, vì lúc đó chỉ còn n−1 cặp. Giả định ngày sinh phân bố đều — thực tế có mùa sinh, khiến xác suất trùng còn cao hơn tính toán lý thuyết.

Đo nghịch lý sinh nhật bằng chỉ số nào?

n để P vượt 50% — 23 người với 365 ngày; Số cặp C(n,2) — đại lượng thực sự điều khiển kết quả; √N — quy mô mẫu gây đụng độ với N khả năng.

Nghịch lý sinh nhật trên QuantHub đã dùng được chưa?

Đã chạy được: công cụ tính toán thật trên nền tảng này.

Chủ đề khác trong Probability

Toàn bộ Probability
Coin & Dice Cards & Poker Gambler's Ruin Random Walk Bayes Updater Markov Chain Reports API