นี่คือความคิดเห็น (ยาว!) ในการทำงานที่ดี @vqv ได้โพสต์ในหัวข้อนี้ มันมีจุดมุ่งหมายเพื่อให้ได้คำตอบที่ชัดเจน เขาทำงานอย่างหนักเพื่อลดความซับซ้อนของพจนานุกรม สิ่งที่เหลืออยู่ก็คือการใช้ประโยชน์อย่างเต็มที่ ผลของเขาชี้ให้เห็นว่าการแก้ปัญหาแรงเดรัจฉานเป็นไปได้ ที่สุดรวมทั้งไวด์การ์ดด้วยกันมากที่สุดมีคำที่สามารถสร้างด้วย 7 ตัวอักษรและดูเหมือนว่าน้อยกว่า 1/10000 ของพวกเขา - พูดประมาณล้าน - จะไม่รวมบางส่วนที่ถูกต้อง คำ. 277=10,460,353,203
ขั้นตอนแรกคือการเพิ่มพจนานุกรมน้อยที่สุดด้วยอักขระตัวแทน "," 22 ตัวอักษรปรากฏในคำสองตัวอักษร (ทั้งหมดยกเว้น c, q, v, z) รวมไวด์การ์ดเข้ากับตัวอักษรเหล่านั้น 22 ตัวและเพิ่มเข้าไปในพจนานุกรม: {a ?, b ?, d ?, ... , y?} ได้เข้ามาแล้วในทำนองเดียวกันเราสามารถตรวจสอบคำสามตัวอักษรน้อยที่สุดทำให้เกิดคำเพิ่มเติมบางคำ เพื่อปรากฏในพจนานุกรม สุดท้ายเราเพิ่ม "??" ไปที่พจนานุกรม หลังจากลบการทำซ้ำที่เป็นผลลัพธ์จะมีคำน้อยที่สุด 342 คำ
วิธีที่สง่างามเพื่อดำเนินการต่อ - หนึ่งที่ใช้เป็นจำนวนเงินที่น้อยมากของการเข้ารหัสแน่นอน - คือการดูปัญหานี้เป็นพีชคณิตหนึ่ง คำที่ถือว่าเป็นชุดตัวอักษรที่ไม่มีการเรียงลำดับเป็นเพียงชื่อเดียว ยกตัวอย่างเช่น "ทะเลาะวิวาท" คือ monomialตัน ดังนั้นพจนานุกรมจึงเป็นชุดสะสมของ monomials ดูเหมือนว่าaps2t
{a2,ab,ad,...,ozψ,wxψ,ψ2}
(เพื่อหลีกเลี่ยงความสับสนฉันได้เขียนสำหรับอักขระไวด์การ์ด)ψ
ชั้นวางมีคำที่ถูกต้องถ้าหากคำนั้นแบ่งชั้นวางเท่านั้น
นามธรรมที่ทรงพลังกว่า แต่มีพลังอย่างมากในการพูดแบบนี้ก็คือพจนานุกรมสร้างอุดมคติของในพหุนามแหวนและชั้นวางที่ใช้ได้ คำกลายเป็นศูนย์ในแหวนหารความฉลาดในขณะที่ชั้นวางไม่มีคำที่ถูกต้องยังคงไม่ใช่ศูนย์ในความฉลาด หากเราสร้างผลรวมของชั้นวางทั้งหมดในและคำนวณในวงแหวนผลหารนี้จำนวนของชั้นวางที่ไม่มีคำเท่ากับจำนวนของชื่อย่อที่แตกต่างกันในความฉลาดR = Z [ a , b , … , z , ψ ] R / I RIR=Z[a,b,…,z,ψ]R/IR
นอกจากนี้ผลรวมของชั้นวางทั้งหมดในตรงไปตรงมาเพื่อแสดง ให้เป็นผลรวมของตัวอักษรทั้งหมดในตัวอักษร มีหนึ่ง monomial สำหรับแต่ละชั้นวาง (ในฐานะโบนัสที่เพิ่มเข้ามาสัมประสิทธิ์ของมันจะนับจำนวนวิธีที่แต่ละชั้นสามารถสร้างขึ้นได้ทำให้เราสามารถคำนวณความน่าจะเป็นของมันได้หากต้องการ)α = + B + ⋯ + Z + ψ α 7Rα = a + b + ⋯ + z+ ψα7
เป็นตัวอย่างง่ายๆ (เพื่อดูวิธีการทำงาน) สมมติว่า (a) เราไม่ใช้สัญลักษณ์แทนและ (b) ตัวอักษรทั้งหมดจาก "a" ถึง "x" ถือเป็นคำ ดังนั้นชั้นวางเท่านั้นที่เป็นไปได้ซึ่งคำไม่สามารถสร้างได้จะต้องประกอบด้วย y's และ z ทั้งหมด เราคำนวณ modulo อุดมคติที่สร้างขึ้นโดยทีละขั้นตอนดังนั้น: { 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+ zพอควรผม≡ ( y+ z) ( a + b + ⋯ + y+ z) ≡ ( y+ z)2พอควรผม≡ ( y+ z)6( a + b + ⋯ + y+ z) ≡ ( y+ z)7พอควรผม.
เราสามารถอ่านโอกาสที่จะได้แร็คที่ไม่ใช่คำจากคำตอบสุดท้าย : สัมประสิทธิ์แต่ละตัวนับวิธีที่ชั้นวางที่เกี่ยวข้องสามารถวาดได้ ตัวอย่างเช่นมีวิธี 21 (จาก 26 ^ 7 ที่เป็นไปได้) ในการวาด 2 y และ 5 z's เพราะสัมประสิทธิ์เท่ากับ 21y 2 z 5Y7+ 7 ปี6Z+ 21 ปี5Z2+ 35 ปี4Z3+ 35 ปี3Z4+ 21 ปี2Z5+ 7 ปีZ6+ z7Y2Z5
จากการคำนวณเบื้องต้นมันชัดเจนว่านี่คือคำตอบที่ถูกต้อง ประเด็นทั้งหมดคือกระบวนการนี้ทำงานโดยไม่คำนึงถึงเนื้อหาของพจนานุกรม
โปรดสังเกตว่าการลดพลังงานโมดูล่าแบบอุดมคติในแต่ละขั้นตอนจะช่วยลดการคำนวณได้อย่างไร: นั่นเป็นวิธีลัดที่เปิดเผยโดยวิธีนี้ (สิ้นสุดตัวอย่าง)
ระบบพีชคณิตพหุนามดำเนินการคำนวณเหล่านี้ ตัวอย่างเช่นนี่คือรหัส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]
(พจนานุกรมสามารถสร้างได้อย่างตรงไปตรงมาจาก min.dict ของ @ vqv; ฉันใส่บรรทัดที่นี่เพื่อแสดงว่าสั้นพอที่จะระบุโดยตรงหากคุณต้องการ)
ผลลัพธ์ - ซึ่งใช้เวลาในการคำนวณสิบนาที - คือ 577958 ( NBในข้อความก่อนหน้านี้ฉันทำผิดเล็กน้อยในการเตรียมพจนานุกรมและได้รับ 577940 ฉันได้แก้ไขข้อความเพื่อสะท้อนสิ่งที่ฉันหวังตอนนี้ ผลลัพธ์ที่ถูกต้อง!) น้อยกว่าหนึ่งล้านหรือน้อยกว่าที่ฉันคาดไว้ แต่มีขนาดเท่ากัน
ในการคำนวณโอกาสในการได้รับชั้นวางดังกล่าวเราจำเป็นต้องคำนึงถึงจำนวนวิธีที่สามารถดึงชั้นวางได้ ขณะที่เราเห็นในตัวอย่างนี้เท่ากับค่าสัมประสิทธิ์ใน 7 โอกาสของการวาดภาพบางชั้นดังกล่าวเป็นผลรวมของค่าสัมประสิทธิ์เหล่านี้พบได้ง่ายโดยการตั้งค่าตัวอักษรทั้งหมดเท่ากับ 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% ซึ่งเป็นคำตอบที่แน่นอน (แม้ว่าจะใช้โมเดลโดยประมาณ, การวาดภาพพร้อมการแทนที่) เมื่อมองย้อนกลับไปมันต้องใช้สี่บรรทัดในการป้อนข้อมูล (ตัวอักษรพจนานุกรมและความถี่ของตัวอักษร) และมีเพียงสามบรรทัดเท่านั้นที่จะทำงาน: อธิบายวิธีการใช้พลังต่อไปของ moduloใช้พลังงานอันดับที่ 7 ซ้ำและทดแทน ความน่าจะเป็นสำหรับตัวอักษรIαผม