[Đây là một câu hỏi đối tác để tính toán xác suất chính xác ]
Nhiệm vụ này là về viết mã để tính xác suất chính xác và nhanh chóng . Đầu ra phải là một xác suất chính xác được viết dưới dạng phân số ở dạng giảm nhất. Đó là nó không bao giờ nên đầu ra 4/8
mà là 1/2
.
Đối với một số số nguyên dương n
, hãy xem xét một chuỗi ngẫu nhiên đồng nhất có độ dài 1s và -1 n
và gọi nó là A. Bây giờ nối với A
giá trị đầu tiên của nó. Đó là A[1] = A[n+1]
nếu lập chỉ mục từ 1. A
bây giờ có độ dài n+1
. Bây giờ cũng xem xét một chuỗi độ dài ngẫu nhiên thứ hai n
có n
các giá trị đầu tiên là -1, 0 hoặc 1 với xác suất 1 / 4,1 / 2, 1/4 mỗi và gọi nó là B.
Bây giờ hãy xem xét sản phẩm bên trong của A[1,...,n]
và B
và sản phẩm bên trong của A[2,...,n+1]
và B
.
Ví dụ, xem xét n=3
. Các giá trị có thể cho A
và B
có thể là A = [-1,1,1,-1]
và B=[0,1,-1]
. Trong trường hợp này, hai sản phẩm bên trong là 0
và 2
.
Mã của bạn phải xuất xác suất rằng cả hai sản phẩm bên trong đều bằng không.
Sao chép bảng do Martin Büttner sản xuất, chúng tôi có các kết quả mẫu sau.
n P(n)
1 1/2
2 3/8
3 7/32
4 89/512
5 269/2048
6 903/8192
7 3035/32768
8 169801/2097152
Ngôn ngữ và thư viện
Bạn có thể sử dụng bất kỳ ngôn ngữ và thư viện có sẵn miễn phí nào bạn muốn. Tôi phải có khả năng chạy mã của bạn, vì vậy vui lòng bao gồm một lời giải thích đầy đủ về cách chạy / biên dịch mã của bạn trong linux nếu có thể.
Nhiệm vụ
Mã của bạn phải bắt đầu bằng n=1
và đưa ra đầu ra chính xác cho mỗi n tăng trên một dòng riêng biệt. Nó sẽ dừng lại sau 10 giây.
Điểm số
Điểm số chỉ đơn giản là mức cao nhất n
đạt được trước khi mã của bạn dừng sau 10 giây khi chạy trên máy tính của tôi. Nếu có hòa, người chiến thắng sẽ là người giành được điểm số cao nhất nhanh nhất.
Bảng mục
n = 64
trong Python . Phiên bản 1 của Mitch Schwartzn = 106
trong Python . Phiên bản ngày 11 tháng 6 năm 2015 bởi Mitch Schwartzn = 151
trong C ++ . Câu trả lời của cảng Mitch Schwartz bởi kirbyfan64sosn = 165
trong Python . Phiên bản ngày 11 tháng 6 năm 2015 phiên bản "cắt tỉa" của Mitch Schwartz vớiN_MAX = 165
.n = 945
trong Python by Min_25 bằng cách sử dụng một công thức chính xác. Kinh ngạc!n = 1228
trong Python của Mitch Schwartz sử dụng một công thức chính xác khác (dựa trên câu trả lời trước đó của Min_25).n = 2761
trong Python của Mitch Schwartz bằng cách sử dụng triển khai nhanh hơn cùng một công thức chính xác.n = 3250
trong Python sử dụng Pypy của Mitch Schwartz bằng cách sử dụng tương tự. Điểm này cầnpypy MitchSchwartz-faster.py |tail
phải tránh điều khiển di chuyển trên đầu.