[Đâ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/8mà 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 nvà gọi nó là A. Bây giờ nối với Agiá trị đầu tiên của nó. Đó là A[1] = A[n+1]nếu lập chỉ mục từ 1. Abâ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 ncó ncá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à Bvà 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 Avà Bcó 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à 0và 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=1và đư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 = 64trong Python . Phiên bản 1 của Mitch Schwartzn = 106trong Python . Phiên bản ngày 11 tháng 6 năm 2015 bởi Mitch Schwartzn = 151trong C ++ . Câu trả lời của cảng Mitch Schwartz bởi kirbyfan64sosn = 165trong 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 = 945trong 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 = 1228trong 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 = 2761trong 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 = 3250trong 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 |tailphải tránh điều khiển di chuyển trên đầu.


