이것은 @vqv가이 글에 올린 멋진 작품에 대한 (긴!) 주석입니다. 명확한 답을 얻는 것을 목표로합니다. 그는 사전을 단순화하기 위해 열심히 노력했습니다. 남아있는 것은 그것을 최대한 활용하는 것입니다. 그의 결과는 무차별 대입 솔루션이 실현 가능 하다는 것을 암시합니다 . 와일드 카드를 포함하여 결국 7 개의 문자로 만들 수 있는 최대 단어가 있으며 그 중 1/10000 미만 (약 백만 개)으로 표시됩니다. 유효한 단어를 포함시키지 마십시오. 277= 10 , 460 , 353 , 203
첫 번째 단계는 와일드 카드 문자 "?"로 최소 사전을 보강하는 것입니다. 22 개의 글자가 두 글자로 표시됩니다 (c, q, v, z 제외). 22 개의 문자에 와일드 카드를 연결하여 사전에 추가합니다 : {a ?, b ?, d ?, ..., y?}가 이제 입력되었습니다. 마찬가지로 최소 3 글자 단어를 검사하여 추가 단어를 생성 할 수 있습니다. 사전에 나타납니다. 마지막으로 "??"를 추가합니다 사전에. 반복되는 결과를 제거한 후 최소 342 개의 단어가 포함됩니다.
아주 적은 양의 인코딩을 실제로 사용하는 우아한 방법은 이 문제를 대수적으로 보는 것 입니다. 정렬되지 않은 문자 집합으로 간주되는 단어는 단지 일식입니다. 예를 들어, "spats"는 단수 입니다. 따라서 사전은 모노 미아 모음입니다. 마치P는 S2티
{a2,ab,ad,...,ozψ,wxψ,ψ2}
(혼동을 피하기 위해 와일드 카드 문자에 를 썼습니다 ).ψ
해당 단어가 랙을 나누는 경우에만 유효한 단어가 랙에 포함됩니다.
더 추상적이지만 매우 강력한 방법은 사전 이 다항식 링 R = Z [ a , b , … , z , ψ ] 에서 이상적인 을 생성하고 유효한 단어가있는 랙이 몫에서 0이된다는 것입니다. 링 R은 / 나는 , 반면에 올바른 단어가없는 랙 몫에 제로 남아있다. 우리가 R 에서 모든 랙의 합을 형성 하고이 몫 고리에서 계산하면 단어가없는 랙의 수는 몫의 고유 한 모노 수의 수와 같습니다.IR=Z[a,b,…,z,ψ]R/IR
또한 의 모든 랙의 합계 는 간단합니다. α = a + b + ⋯ + z + ψ를 알파벳의 모든 문자의 합 이라고합시다 . α 7 에는 각 랙마다 하나의 모노가 포함되어 있습니다. (추가 보너스로서, 계수는 각 랙을 구성 할 수있는 방법의 수를 계산하여 원하는 경우 확률을 계산할 수 있습니다.)Rα=a+b+⋯+z+ψα7
간단한 예 (이것이 어떻게 작동하는지보기 위해), (a) 와일드 카드를 사용하지 않고 (b) "a"에서 "x"까지의 모든 문자를 단어로 간주한다고 가정하십시오. 그런 다음 단어를 만들 수없는 가능한 랙은 모두 y와 z로 구성되어야합니다. 우리는 한 번에 한 단계 씩 { a , b , c , … , x }에 의해 생성 된 이상을 모듈로 계산합니다 .α=(a+b+c+⋯+x+y+z)7{a,b,c,…,x}
α0α1α2⋯α7=1=a+b+c+⋯+x+y+z≡y+zmodI≡(y+z)(a+b+⋯+y+z)≡(y+z)2modI≡(y+z)6(a+b+⋯+y+z)≡(y+z)7modI.
우리는 최종 답변에서 비 워드 랙을 얻는 기회를 읽을 수 : 각 계수는 해당 랙을 그리는 방법을 계산합니다. 예를 들어, y의 계수 때문에 2 개의 y와 5 개의 z를 그리는 21 가지 방법 (26 ^ 7 개 중) 이 있습니다.와이7+ 7 년6지+21y5z2+35y4z3+35y3z4+21y2z5+7yz6+z7 21과 같습니다.y2z5
기초 계산에서 이것이 정답이라는 것이 분명합니다. 요점은이 절차가 사전의 내용에 관계없이 작동한다는 것입니다.
각 단계에서 이상적인 전력 모듈로 감소가 계산을 줄이는 방법에 주목하십시오. 이것이 바로이 접근법에 의해 드러난 바로 가기입니다. (예시)
다항식 대수 시스템은 이러한 계산을 구현합니다 . 예를 들어 Mathematica 코드는 다음과 같습니다.
alphabet = a + b + c + d + e + f + g + h + i + j + k + l + m + n + o +
p + q + r + s + t + u + v + w + x + y + z + \[Psi];
dictionary = {a^2, a b, a d, a e, ..., w z \[Psi], \[Psi]^2};
next[pp_] := PolynomialMod[pp alphabet, dictionary];
nonwords = Nest[next, 1, 7];
Length[nonwords]
(사전은 @vqv의 min.dict에서 간단하게 구성 할 수 있습니다. 원하는 경우 직접 지정할 수있을 정도로 짧다는 것을 나타내는 줄을 여기에 넣습니다.)
10 분의 계산 시간이 걸리는 출력은 577958입니다. ( NB 이 메시지의 이전 버전에서 나는 사전을 준비하는 데 약간의 실수를했고 577940을 얻었습니다. 나는 현재 원하는 것을 반영하도록 텍스트를 편집했습니다. 정확한 결과!) 예상했던 백만 개 정도의 작은 값이지만 같은 크기입니다.
그러한 랙을 얻을 가능성 을 계산하려면 랙을 그릴 수있는 방법의 수를 고려해야합니다. 예제에서 보았 듯이 이것은 계수가 것과 같습니다 . 도면의 기회 일부 이러한 랙은 1과 동일 쉽게 모든 문자를 설정하여 볼 모든 계수의 합이다 :α7
nonwords /. (# -> 1) & /@ (List @@ alphabet)
정답은 1066056120으로, 유효한 단어를 만들 수없는 랙을 그릴 때 10.1914 %의 확률을 제공합니다 (모든 문자가 똑같이 가능할 경우).
글자의 확률이 다를 경우 각 글자를 그릴 가능성으로 바꾸십시오.
tiles = {9, 2, 2, 4, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6,
4, 2, 2, 1, 2, 1, 2};
chances = tiles / (Plus @@ tiles);
nonwords /. (Transpose[{List @@ alphabet, chances}] /. {a_, b_} -> a -> b)
출력은 1.079877553303 %이며 정확한 답변입니다 ( 대체 모델을 사용 하더라도 교체 하여 그리기 ). 다시 찾고, 그것은 일을하기 위해 데이터 (알파벳, 사전 및 알파벳 주파수) 만 세 줄을 입력 할 네 줄을했다 :의 다음 동력 인출하는 방법에 대해 설명 모듈 I를 , 재귀 7 전원을, 그리고 대체 글자의 확률.αI