매쓰, 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
-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
을 다른 행렬의 열로 원하므로 그 사이에 간단한 내적을 계산할 수 있습니다. 그러나 조옮김은 {{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²)
0
1
마지막으로, s와 s의 1
목록에서 0
s 의 분수를 알고 싶기 때문에 목록의 1
산술 평균 만 있으면됩니다. 그러나 이것은 적어도 하나의 내적이 0이 아닌 확률을 산출하므로 1
원하는 결과를 얻기 위해 빼기합니다 .
n
가 도움이 될 것입니다. 또한 A, B 및 두 가지 내부 제품의 명시 적 예가 도움이 될 수 있습니다.