Toán học, 159 100 87 86 85 byte
n=3;1-Mean@Sign[##&@@Norm/@({1,0,0,-1}~t~n.Partition[#,2,1,1])&/@{1,-1}~(t=Tuples)~n]
Để thay đổi n
chỉ cần thay đổi định nghĩa biến ở đầu.
Vì nó vũ phu nên nó khá chậm, nhưng đây là tám kết quả đầu tiên:
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
Lần cuối cùng đã mất 231 giây và thời gian chạy là theo cấp số nhân khủng khiếp.
Giải trình
Như tôi đã nói đó là sức mạnh vũ phu. Về cơ bản, tôi chỉ liệt kê tất cả những gì có thể A
và B
, tính hai sản phẩm chấm cho mỗi cặp có thể và sau đó tìm phần nhỏ của các cặp mang lại {0, 0}
. Các tổ hợp của Mathicala và các hàm đại số tuyến tính khá hữu ích trong việc chơi gôn này:
{1,-1}~(t=Tuples)~n
Điều này tạo ra tất cả các n-tup chứa 1
hoặc -1
, tức là tất cả có thể A
. Vì n = 3
đó là:
{{1, 1, 1},
{1, 1, -1},
{1, -1, 1},
{1, -1, -1},
{-1, 1, 1},
{-1, 1, -1},
{-1, -1, 1},
{-1, -1, -1}}
Để tính toán B
chúng tôi làm gần như giống nhau:
{1,0,0,-1}~t~n
Bằng cách lặp lại 0
, chúng tôi nhân đôi từng bộ dữ liệu cho mỗi bộ 0
chứa, do đó 0
có khả năng gấp đôi 1
hoặc -1
. Một lần nữa sử dụng n = 3
làm ví dụ:
{{-1, -1, -1},
{-1, -1, 0}, {-1, -1, 0},
{-1, -1, 1},
{-1, 0, -1}, {-1, 0, -1},
{-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{-1, 0, 1}, {-1, 0, 1},
{-1, 1, -1},
{-1, 1, 0}, {-1, 1, 0},
{-1, 1, 1},
{0, -1, -1}, {0, -1, -1},
{0, -1, 0}, {0, -1, 0}, {0, -1, 0}, {0, -1, 0},
{0, -1, 1}, {0, -1, 1},
{0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1},
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
{0, 0, 1}, {0, 0, 1}, {0, 0, 1}, {0, 0, 1},
{0, 1, -1}, {0, 1, -1},
{0, 1, 0}, {0, 1, 0}, {0, 1, 0}, {0, 1, 0},
{0, 1, 1}, {0, 1, 1},
{1, -1, -1},
{1, -1, 0}, {1, -1, 0},
{1, -1, 1},
{1, 0, -1}, {1, 0, -1},
{1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 0, 0},
{1, 0, 1}, {1, 0, 1},
{1, 1, -1},
{1, 1, 0}, {1, 1, 0},
{1, 1, 1}}
Bây giờ, đối với mỗi khả năng A
, chúng tôi muốn sản phẩm chấm của từng loại có thể B
, cả với A[1 .. n]
và A[2 .. n+1]
. Ví dụ: nếu hiện tại của chúng tôi A
là {1, 1, -1}
, chúng tôi muốn sản phẩm chấm có cả {1, 1, -1}
và với {1, -1, 1}
. Vì tất cả chúng ta B
đều đã thuận tiện các hàng của một ma trận, chúng tôi muốn hai danh sách con A
dưới dạng cột của một ma trận khác, để chúng tôi có thể tính toán một sản phẩm chấm đơn giản giữa chúng. Nhưng chuyển vị {{1, 1, -1}, {1, -1, 1}}
chỉ đơn giản là đưa ra {{1, 1}, {1, -1}, {-1, 1}}
một danh sách tất cả các danh sách con theo chu kỳ 2 phần tử của A
. Đó là những gì nó làm:
Partition[#,2,1,1]
Vì vậy, chúng tôi tính toán điều đó và lấy sản phẩm chấm với danh sách của chúng tôi B
. Vì bây giờ chúng ta có được một danh sách lồng nhau (vì mỗi cái có thể A
mang lại một vectơ riêng), chúng ta làm phẳng những cái đó với ##&@@
.
Để tìm hiểu xem một cặp {x, y}
là {0, 0}
chúng tôi tính toán Sign[Norm[{x,y}]]
nơi Norm
cho √(x²+y²)
. Điều này cho 0
hay 1
.
Cuối cùng, vì bây giờ chúng tôi chỉ muốn biết các phân số của 1
s trong danh sách 0
s và 1
s tất cả những gì chúng tôi cần là trung bình số học của danh sách. Tuy nhiên, điều này mang lại xác suất của cả hai ít nhất một sản phẩm chấm là khác không, vì vậy chúng tôi trừ nó 1
để có kết quả mong muốn.
n
sẽ hữu ích. Cũng có thể một ví dụ rõ ràng về A, B và hai sản phẩm bên trong có thể giúp ích.