Mathematica, 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]
Untuk mengubah, ncukup ubah definisi variabel di awal.
Karena ini kekuatan kasar, ini cukup lambat, tetapi inilah delapan hasil pertama:
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
Yang terakhir sudah mengambil 231 detik dan runtime sangat eksponensial.
Penjelasan
Seperti yang saya katakan itu brute force. Pada dasarnya, saya hanya menghitung semua yang mungkin Adan B, menghitung dua produk titik untuk setiap pasangan yang memungkinkan dan kemudian menemukan sebagian kecil dari pasangan yang menghasilkan {0, 0}. Combinatorics dan fungsi aljabar linear matematika cukup membantu dalam bermain golf ini:
{1,-1}~(t=Tuples)~n
Ini menghasilkan semua n-tupel yang mengandung 1atau -1, yaitu semua yang mungkin A. Untuk n = 3itu adalah:
{{1, 1, 1},
{1, 1, -1},
{1, -1, 1},
{1, -1, -1},
{-1, 1, 1},
{-1, 1, -1},
{-1, -1, 1},
{-1, -1, -1}}
Untuk menghitung, Bkami melakukan hal yang hampir sama:
{1,0,0,-1}~t~n
Dengan mengulangi 0, kami duplikat setiap tupel untuk setiap 0mengandung, sehingga membuat 0dua kali lebih mungkin sebagai 1atau -1. Sekali lagi menggunakan n = 3sebagai contoh:
{{-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}}
Sekarang, untuk setiap kemungkinan A, kami ingin produk titik dari masing-masing yang mungkin B, baik dengan A[1 .. n]dan A[2 .. n+1]. Misalnya jika saat ini kami Aadalah {1, 1, -1}, kami ingin dot produk dengan baik {1, 1, -1}dan dengan {1, -1, 1}. Karena semua kita Bsudah dengan nyaman baris dari matriks, kami ingin dua sublists Asebagai kolom dari matriks lain, sehingga kami dapat menghitung produk titik sederhana di antara mereka. Tetapi transposing {{1, 1, -1}, {1, -1, 1}}hanya memberikan {{1, 1}, {1, -1}, {-1, 1}}yang hanya daftar semua sub-siklik 2-elemen dari A. Itulah yang dilakukan:
Partition[#,2,1,1]
Jadi kami menghitungnya dan mengambil produk titik dengan daftar kami B. Karena sekarang kami mendapatkan daftar bersarang (karena setiap kemungkinan Amenghasilkan vektor terpisah), kami meratakannya dengan ##&@@.
Untuk mengetahui apakah suatu pasangan {x, y}adalah {0, 0}kita menghitung di Sign[Norm[{x,y}]] mana Normmemberi √(x²+y²). Ini memberi 0atau 1.
Akhirnya, karena kita sekarang hanya ingin mengetahui fraksi 1s dalam daftar 0s dan 1s semua yang kita butuhkan adalah rata-rata aritmatika dari daftar. Namun, ini menghasilkan probabilitas kedua produk setidaknya satu titik menjadi nol, jadi kami kurangi dari itu 1untuk mendapatkan hasil yang diinginkan.
nakan sangat membantu. Mungkin juga contoh eksplisit dari A, B dan dua produk dalam mungkin membantu.