매쓰, 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처음에 변수 정의를 변경하십시오.
그것은 무차별 적 인 힘이므로 상당히 느리지 만 처음 8 가지 결과는 다음과 같습니다.
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-튜플을 생성 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, 우리는 포함 된 각각의 튜플을 복제 0함으로써 또는 0가능성의 두 배 를 만든다 . 다시 예제로 사용 :1-1n = 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을 다른 행렬의 열로 원하므로 그 사이에 간단한 내적을 계산할 수 있습니다. 그러나 조옮김은 {{1, 1, -1}, {1, -1, 1}}단순히 {{1, 1}, {1, -1}, {-1, 1}}2 개의 모든 순환 하위 목록의 목록을 제공합니다 A. 이것이하는 일입니다.
Partition[#,2,1,1]
그래서 우리는 그것을 계산하고 우리의 목록과 함께 내적을 취합니다 B. 우리는 이제 중첩 목록을 얻습니다 (가능한 각 A벡터가 별도의 벡터를 생성하기 때문에 ) ##&@@.
쌍인지 알아 내기 위해 우리 {x, y}는 어디서 제공 {0, 0}하는지 계산 합니다 . 이것은 또는을 제공합니다 .Sign[Norm[{x,y}]]Norm√(x²+y²)01
마지막으로, s와 s의 1목록에서 0s 의 분수를 알고 싶기 때문에 목록의 1산술 평균 만 있으면됩니다. 그러나 이것은 적어도 하나의 내적이 0이 아닌 확률을 산출하므로 1원하는 결과를 얻기 위해 빼기합니다 .
n가 도움이 될 것입니다. 또한 A, B 및 두 가지 내부 제품의 명시 적 예가 도움이 될 수 있습니다.