Trước đây tôi đã hỏi một câu hỏi về cách tính xác suất nhanh chóng và chính xác. Tuy nhiên, rõ ràng là quá dễ dàng khi một giải pháp dạng kín được đưa ra! Đây là một phiên bản khó hơn.
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ố 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
một bản sao của chính nó. Đó là A[1] = A[n+1]
nếu lập chỉ mục từ 1, A[2] = A[n+2]
v.v. A
bây giờ có chiều dài 2n
. 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 các sản phẩm bên trong B
với A[1+j,...,n+j]
cho khác nhau j =0,1,2,...
.
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 đầu tiên bên trong là 0
và 2
.
Bài tập
Đối với mỗi j
, bắt đầu bằng j=1
, mã của bạn sẽ đưa ra xác suất rằng tất cả các j+1
sản phẩm bên trong đầu tiên đều bằng không cho mỗi n=j,...,50
.
Sao chép bảng do Martin Büttner sản xuất để j=1
chúng tôi 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
Ghi bàn
Điểm của bạn là lớn nhất j
mà mã của bạn hoàn thành sau 1 phút trên máy tính của tôi. Để làm rõ một chút, mỗi người j
được một phút. Lưu ý rằng mã lập trình động trong câu hỏi được liên kết trước đó sẽ thực hiện điều này một cách dễ dàng j=1
.
Máy cắt cà vạt
Nếu hai mục có cùng j
số điểm thì mục thắng sẽ là mục đạt được mức cao nhất n
trong một phút trên máy của tôi cho điều đó j
. Nếu hai mục tốt nhất bằng nhau trên tiêu chí này thì người chiến thắng sẽ là câu trả lời được gửi đầu tiên.
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ể.
Máy của tôi Thời gian sẽ được chạy trên máy của tôi. Đây là bản cài đặt Ubuntu tiêu chuẩn trên Bộ xử lý tám lõi AMD FX-8350. Điều này cũng có nghĩa là tôi cần để có thể chạy mã của bạn.
Giành chiến thắng
j=2
trong Python của Mitch Schwartz.j=2
trong Python bởi frageum. Hiện tại mục nhập nhanh nhất.