यह एक अच्छा (लंबी!) टिप्पणी है @vqv ने इस सूत्र में पोस्ट किया है। इसका उद्देश्य निश्चित उत्तर प्राप्त करना है। उन्होंने डिक्शनरी को सरल बनाने का कठिन काम किया है। जो कुछ बचता है, उसका पूरा-पूरा फायदा उठाना है। उनके परिणामों से पता चलता है कि एक जानवर बल समाधान संभव है । आखिरकार, वाइल्डकार्ड सहित, ज्यादातर शब्द हैं, जो 7 अक्षरों के साथ बना सकते हैं, और यह 1/10000 से कम की तरह दिखता है - कहते हैं, एक मिलियन के आसपास - कुछ मान्य को शामिल करने में विफल रहेगा शब्द। 277=10,460,353,203
पहला कदम वाइल्डकार्ड वर्ण के साथ न्यूनतम शब्दकोश को बढ़ाना है, "?"। 22 अक्षर दो-अक्षर के शब्दों में प्रकट होते हैं (सभी लेकिन c, q, v, z)। उन 22 अक्षरों में वाइल्डकार्ड को शामिल करें और इन्हें शब्दकोश में जोड़ें: {a;? B ?, d ?, ..., y?} अब अंदर हैं। इसी तरह हम न्यूनतम तीन अक्षरों वाले शब्दों का निरीक्षण कर सकते हैं, जिससे कुछ अतिरिक्त शब्द बन सकते हैं। शब्दकोश में दिखाई देने के लिए। अंत में, हम "??" जोड़ते हैं शब्दकोश में। पुनरावृत्ति को हटाने के परिणामस्वरूप, इसमें 342 न्यूनतम शब्द शामिल हैं।
आगे बढ़ने का एक सुंदर तरीका - वह जो वास्तव में एन्कोडिंग की बहुत कम मात्रा का उपयोग करता है - इस समस्या को बीजगणितीय के रूप में देखना है । अक्षरों के अनियंत्रित सेट के रूप में माना जाने वाला शब्द, केवल एक मोनोमियल है। उदाहरण के लिए, "स्पैट्स" मोनोमियल । शब्दकोश इसलिए मोनोमियल का एक संग्रह है। ऐसा लग रहा हैaps2t
{a2,ab,ad,...,ozψ,wxψ,ψ2}
(जहां, भ्रम से बचने के लिए, मैंने वाइल्डकार्ड वर्ण के लिए लिखा है )।ψ
एक रैक में एक वैध शब्द होता है अगर और केवल अगर वह शब्द रैक को विभाजित करता है।
एक और अधिक सार है, लेकिन अत्यंत शक्तिशाली, जिस तरह से यह कहना है कि शब्दकोश एक आदर्श उत्पन्न करता है बहुपद रिंग में और जो मान्य साथ रैक भागफल रिंग में शब्द शून्य हो जाते हैं , जबकि मान्य शब्दों के बिना रैक भागफल में नॉनजरो बने रहते हैं। यदि हम में सभी रैक का योग बनाते हैं और इस भागफल की अंगूठी में गणना करते हैं, तो शब्दों के बिना रैक की संख्या भागफल में अलग-अलग मोनोमियल की संख्या के बराबर होती है।आर = जेड [ एक , ख , ... , जेड , ψ ] आर / मैं आरIR=Z[a,b,…,z,ψ]R/IR
इसके अलावा, में सभी रैक का योग व्यक्त करने के लिए सीधा है। आज्ञा दें वर्णमाला के सभी अक्षरों का योग हो। में प्रत्येक रैक के लिए एक मोनोमियल है। (एक अतिरिक्त बोनस के रूप में, इसके गुणांक प्रत्येक रैक को बनाने के तरीकों की संख्या की गणना करते हैं, अगर हम चाहें तो इसकी संभावना की गणना करने की अनुमति देते हैं।)अल्फा = एक + ख + ⋯ + z + ψ अल्फा 7Rα=a+b+⋯+z+ψα7
एक साधारण उदाहरण के रूप में (यह देखने के लिए कि यह कैसे काम करता है), मान लीजिए (ए) हम वाइल्डकार्ड और (बी) का उपयोग नहीं करते हैं "x" के माध्यम से सभी अक्षरों को शब्द माना जाता है। तब केवल संभावित रैक जिसमें से शब्द नहीं बन सकते, पूरी तरह से y और z के होते हैं। हम modulo को आदर्श रूप से द्वारा उत्पन्न करते हैं , एक बार में एक कदम, इस प्रकार: { एक , ख , ग , ... , एक्स }α=(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.
हम अंतिम उत्तर से गैर-शब्द रैक होने की संभावना को पढ़ सकते हैं : प्रत्येक गुणांक उन तरीकों को गिनाता है जिसमें संबंधित रैक को खींचा जा सकता है। उदाहरण के लिए, 2 y और 5 z को खींचने के लिए 21 (26 ^ 7 संभावित में से) तरीके हैं क्योंकि का गुणांक 21 के बराबर है।y7+7y6z+21y5z2+35y4z3+35y3z4+21y2z5+7yz6+z7y2z5
प्रारंभिक गणना से, यह स्पष्ट है कि यह सही उत्तर है। पूरे बिंदु यह है कि यह प्रक्रिया शब्दकोश की सामग्री की परवाह किए बिना काम करती है।
ध्यान दें कि प्रत्येक चरण में आदर्श को शक्ति मोड्यूल को कम करने से गणना कम हो जाती है: इस दृष्टिकोण से पता चला शॉर्टकट। (उदाहरण का अंत।)
बहुपद बीजगणित प्रणालियां इन गणनाओं को लागू करती हैं । उदाहरण के लिए, यहाँ गणित कोड है:
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 से सीधे तरीके से किया जा सकता है; मैंने यह दर्शाने के लिए यहां एक पंक्ति लगाई है कि यह सीधे तौर पर निर्दिष्ट करने के लिए पर्याप्त है जो आपको पसंद आए।)
आउटपुट - जो दस मिनट की गणना करता है - 577958 है। ( एनबी इस संदेश के पहले संस्करण में मैंने शब्दकोश तैयार करने में एक छोटी सी गलती की थी और 577940 प्राप्त किया था। मैंने अब जो उम्मीद की है उसे प्रतिबिंबित करने के लिए पाठ संपादित किया है। सही परिणाम!) लाख से थोड़ा कम या तो मुझे उम्मीद थी, लेकिन परिमाण के समान आदेश।
इस तरह के रैक को प्राप्त करने के अवसर की गणना करने के लिए , हमें उन तरीकों की संख्या के बारे में ध्यान देने की आवश्यकता है जिनमें रैक को खींचा जा सकता है। जैसा कि हमने उदाहरण में देखा, यह इसके गुणांक in बराबर है । कुछ ऐसे रैक खींचने का मौका इन सभी गुणांकों का योग है, जो आसानी से सभी अक्षरों को 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% है, सटीक उत्तर (एक अनुमानित मॉडल का उपयोग करते हुए, प्रतिस्थापन के साथ ड्राइंग )। पीछे मुड़कर देखें, तो डेटा दर्ज करने के लिए चार लाइनें लगीं (वर्णमाला, शब्दकोश, और वर्णमाला आवृत्तियां) और काम करने के लिए केवल तीन लाइनें: वर्णन करें कि अगली शक्ति of modulo को कैसे लें, 7 वीं शक्ति को पुनरावर्ती और स्थानापन्न करें पत्रों के लिए संभावनाएं।αI