Mathematica, 159 100 87 86 85 ไบต์
n=3;1-Mean@Sign[##&@@Norm/@({1,0,0,-1}~t~n.Partition[#,2,1,1])&/@{1,-1}~(t=Tuples)~n]
หากต้องการเปลี่ยน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
อันสุดท้ายใช้เวลา 231 วินาทีและรันไทม์นั้นอธิบายอย่างน่ากลัว
คำอธิบาย
อย่างที่ฉันบอกว่ามันเป็นเดรัจฉานกำลัง โดยพื้นฐานแล้วฉันแค่แจงเป็นไปได้ทั้งหมดAและคำนวณผลิตภัณฑ์ทั้งสองจุดสำหรับทุกคู่ที่เป็นไปได้แล้วหาส่วนของคู่ที่ให้ผลB {0, 0}คอมมิเนทีฟของ Mathematica และฟังก์ชันพีชคณิตเชิงเส้นค่อนข้างมีประโยชน์ในการตีกอล์ฟ:
{1,-1}~(t=Tuples)~n
นี้สร้าง n ทุก tuples มี1หรือเช่นเป็นไปได้ทั้งหมด-1 Aสำหรับn = 3นั่นคือ:
{{1, 1, 1},
{1, 1, -1},
{1, -1, 1},
{1, -1, -1},
{-1, 1, 1},
{-1, 1, -1},
{-1, -1, 1},
{-1, -1, -1}}
ในการคำนวณBเราทำแบบเดียวกัน:
{1,0,0,-1}~t~n
โดยการทำซ้ำ0เราซ้ำแต่ละ tuple สำหรับแต่ละ0มันมีจึงทำให้0เป็นสองเท่าน่าจะเป็นหรือ1 -1อีกครั้งใช้n = 3เป็นตัวอย่าง:
{{-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}}
ตอนนี้สำหรับแต่ละที่เป็นไปได้Aที่เราต้องการผลิตภัณฑ์ที่จุดของแต่ละคนที่เป็นไปได้Bทั้งที่มีและA[1 .. n] A[2 .. n+1]เช่นถ้าในปัจจุบันของเราAคือ{1, 1, -1}เราต้องการสินค้าที่มีจุดที่มีทั้งและ{1, 1, -1} {1, -1, 1}เนื่องจากทั้งหมดของเราBอยู่ในแถวของเมทริกซ์อย่างสะดวกสบายแล้วเราจึงต้องการให้ทั้งสองรายการย่อยAเป็นคอลัมน์ของเมทริกซ์อื่นเพื่อให้เราสามารถคำนวณผลคูณแบบจุดแบบง่ายระหว่างพวกมันได้ แต่ transposing {{1, 1, -1}, {1, -1, 1}}เพียงแค่ให้{{1, 1}, {1, -1}, {-1, 1}}ซึ่งเป็นเพียงรายชื่อของทั้ง 2 องค์ประกอบ sublists Aวงจรของ นั่นคือสิ่งที่ทำ:
Partition[#,2,1,1]
ดังนั้นเราคำนวณและนำดอทโปรดัคกับรายการของBเรา เนื่องจากขณะนี้เราได้รับรายชื่อที่ซ้อนกัน (เพราะแต่ละที่เป็นไปได้Aที่อัตราผลตอบแทนเวกเตอร์ที่แยกต่างหาก) ##&@@เราแผ่ผู้ที่มี
หากต้องการค้นหาว่าคู่{x, y}คือ{0, 0}เราคำนวณSign[Norm[{x,y}]] ที่จะช่วยให้Norm √(x²+y²)นี้จะช่วยให้หรือ01
ในที่สุดเนื่องจากตอนนี้เราแค่อยากรู้เศษส่วนของ1s ในรายการ0s และ1s ทั้งหมดที่เราต้องการคือค่าเฉลี่ยเลขคณิตของรายการ อย่างไรก็ตามสิ่งนี้ให้ความน่าจะเป็นของทั้งสองจุดอย่างน้อยหนึ่งผลิตภัณฑ์ที่ไม่ใช่ศูนย์ดังนั้นเราจึงลบมันออก1เพื่อให้ได้ผลลัพธ์ที่ต้องการ
nจะเป็นประโยชน์ นอกจากนี้อาจเป็นตัวอย่างที่ชัดเจนของ A, B และผลิตภัณฑ์ภายในทั้งสองอาจช่วยได้