सुडोकू पहेली का कुशल एन्कोडिंग


16

किसी भी मनमाने 9x9 ग्रिड को निर्दिष्ट करने के लिए प्रत्येक वर्ग की स्थिति और मूल्य देने की आवश्यकता होती है। इसके लिए एक भोली एन्कोडिंग 81 xxx3 = 972 बिट्स के लिए 81 (x, y, मान) ट्रिपल दे सकती है, प्रत्येक x, y और मान के लिए 4 बिट्स (1-9 = 9 मान = 4 बिट्स) की आवश्यकता होती है। प्रत्येक वर्ग की संख्या के आधार पर, कोई व्यक्ति 7 बिट तक स्थितीय जानकारी को कम कर सकता है, प्रत्येक वर्ग के लिए थोड़ा हटकर और कुल 891 बिट्स। एक पूर्वनिर्धारित आदेश को निर्दिष्ट करके, एक अधिक 324 बिट्स के लिए प्रत्येक मूल्य के लिए केवल 4 बिट्स के लिए इसे और अधिक कम कर सकता है। हालांकि, एक सुडोकू में लापता संख्या हो सकती है। यह उन संख्याओं की संख्या को कम करने की क्षमता प्रदान करता है जिन्हें निर्दिष्ट किया जाना है, लेकिन पदों को इंगित करने के लिए अतिरिक्त बिट्स की आवश्यकता हो सकती है। (स्थिति, मान) के हमारे 11-बिट एन्कोडिंग का उपयोग करके, हम 11 के साथ n सुराग के साथ एक पहेली निर्दिष्ट कर सकते हैं11n बिट्स, उदाहरण के लिए एक न्यूनतम (17) पहेली में 187 बिट्स की आवश्यकता होती है। मैंने अभी तक सोचा सबसे अच्छा एन्कोडिंग प्रत्येक स्थान के लिए एक बिट का उपयोग करने के लिए इंगित करने के लिए है कि क्या यह भरा है और, यदि हां, तो निम्न 4 बिट्स संख्या को सांकेतिक शब्दों में बदलना है। इसके लिए81+4n बिट्स, न्यूनतम पहेली के लिए 149 (n=17 ) की आवश्यकता होती है। क्या एक अधिक कुशल एन्कोडिंग है, अधिमानतः प्रत्येक वैध सुडोकू सेटअप के डेटाबेस के बिना? ( एन × एन पहेलीसेएक सामान्यn कोसंबोधित करने के लिए बोनस अंक)N×N

यह सिर्फ मेरे लिए हुआ है कि बहुत सी पहेलियाँ दूसरे का रोटेशन होगी, या अंकों का एक सरल क्रमचय होगा। शायद यह आवश्यक बिट्स को कम करने में मदद कर सकता है।

विकिपीडिया के अनुसार ,

क्लासिक 9 × 9 सुडोकू समाधान ग्रिड की संख्या 6,670,903,752,021,072,936,960 (OEIS में अनुक्रम A107739) या लगभग 6.67×1021

अगर मैंने अपना गणित सही किया ( ), जो लुकअप टेबल के लिए 73 (72.498) बिट्स की जानकारी के लिए आता है।ln(6,670,903,752,021,072,936,960)ln(2)

परंतु:

अनिवार्य रूप से विभिन्न समाधानों की संख्या, जब समरूपता जैसे रोटेशन, प्रतिबिंब, क्रमचय और रीलेबिलिंग को ध्यान में रखा जाता है, को केवल 5,472,730,538 [15] (OEIS में अनुक्रम A109741) दिखाया गया था।

यह 33 (32.35) बिट्स देता है, इसलिए यह संभव है कि यह इंगित करने का एक चतुर तरीका कि कौन सा उपयोग करने की अनुमति पूर्ण 73 बिट्स के नीचे मिल सकती है।


1
हा, मैंने शुरू में समस्या के बारे में बिना सोचे समझे कुछ सामान पोस्ट किया था। मैंने इसे डिलीट कर दिया है। बड़ा अच्छा सवाल!
पैट्रिक87

क्या आप हमें याद दिला सकते हैं कि कितनी सुडोकू पहेलियाँ हैं, इसलिए हम जानते हैं कि इन आसानी से डिकोड करने योग्य एन्कोडिंग और एक क्रूर बल गणना के बीच की खाई कितनी चौड़ी है?
गिल्स एसओ- बुराई को रोकना '

आपको सभी ग्रिड को एनकोड करने में सक्षम होने की आवश्यकता है , इसलिए आपको 73 बिट्स (निश्चित-लंबाई एन्कोडिंग मानते हुए) की आवश्यकता है। "किस क्रमांक का उपयोग करने का संकेत देने का कोई चतुर तरीका" इससे आपको मदद मिलेगी। 6.67×1021
svick

@sick एक सूचना सिद्धांत के दृष्टिकोण से, मुझे लगता है कि आपको सही होना चाहिए, लेकिन मैं यह पता नहीं लगा सकता कि अतिरिक्त बिट कहां से आ रहे हैं। कर रहे हैं क्रमपरिवर्तन, जो 19 बिट्स है, दर्पण और घुमाव के लिए प्लस 3, इसलिए अद्वितीय पहेली के लिए 22 प्लस 33, 55 बनाता है; अन्य 18 कहाँ से आते हैं? 9!
केविन

जवाबों:


5

क्या एक अधिक कुशल एन्कोडिंग है, अधिमानतः प्रत्येक वैध सुडोकू सेटअप के डेटाबेस के बिना?

हाँ। मैं एक शर्त के आधार पर 6 या 9 बिट्स में अपने न्यूनतम पहेली के 149-बिट एन्कोडिंग में सुधार करने के लिए एन्कोडिंग के बारे में सोच सकता हूं । यह एक डेटाबेस या अन्य समाधानों या आंशिक बोर्डों के किसी भी रजिस्टर के बिना है। ये रहा:9×9

सबसे पहले, आप बोर्ड में कम से कम संख्या में दिखावे के साथ एक नंबर मी को एनकोड करने के लिए बिट्स का उपयोग करते हैं। अगले 4 बिट्स वास्तविक समय next के एनकोडिंग होते हैं, जो एम प्रकट होता है। अगले 7 बिट्स जिसमें पदों में से प्रत्येक सांकेतिक शब्दों में बदलना मीटर प्रकट होता है।4m4m7m

निम्नलिखित बिट्स यह बताते हैं कि झंडे हैं शेष पदों एक संख्या है या नहीं (आप बस स्थान, जिनमें छोड़ मीटर है)। जब भी इन बिट्स में से एक है , तो अगले 3 बिट्स से संकेत मिलता है जो संख्या यह (आदेश दिया सेट में है { 1 , ... , 9 } बिना मीटर )। उदाहरण के लिए, यदि m = 4 और 3 बिट हैं , तो बोर्ड पर संबंधित स्थिति में संख्या 5 वें (0 से गिनती) सेट { 1 , 2 , 3 , में है।81m1{1,,9}mm=4101 , इसलिए यह 6 है । नंबर j < m को बाइनरी में j - 1 के रूप में एन्कोड किया जाएगा, जबकि नंबर j > m को j - 2 के रूप में एनकोड किया जाएगा। जब से हम पहले से ही लिखा था पदों, केवल 3 ( n - ) बिट्स इस चरण में बोर्ड के बाकी एन्कोड करने के लिए जोड़ दिया जाएगा।{1,2,3,5,6,7,8,9}6j<mj1j>mj23(n)

इस प्रकार, बिट्स की कुल संख्या एक बोर्ड इस प्रक्रिया का उपयोग कर सांकेतिक शब्दों में बदलना करने के लिए आवश्यक है

B=4+4+7+(81)+3(n)=89+3+3n.

के लिए है, हम ध्यान दें कि (सामान्य रूप में 0 या 1 हो सकता है n / 9 )। इस प्रकार, बी 140 या 143 हो सकता है यह इस बात पर निर्भर करता है कि कोई संख्या बोर्ड पर दिखाई नहीं दे रही है।n=17n/9B

यह इंगित करने योग्य है कि केविन का समाधान सामान्य मामले में बेहतर है। केवल के लिए सबसे अधिक 149 बिट्स पर इस एन्कोडिंग का उपयोग करता , या के लिए n = 20 कि प्रदान की = 0 । कम से कम यह कैसे तथ्य यह है कि का लाभ लेने के पर एक सामान्य विचार से पता चलता एन = 9 बहुत करीब है 2 लोग इन 2 एन (जिसका अर्थ है कि हम करने के लिए "खो स्मृति" करते हैं मूल्य प्रति 4 बिट्स का उपयोग करके, के बाद से 4 बिट्स की अनुमति देते हैं हमें एन = 16 नंबर भी व्यक्त करना है ।n{17,18,19}n=20=0N=92log2NN=16


उदाहरण। सुराग के साथ निम्नलिखित बोर्ड पर विचार करें ।n=17

.  .  .   .  .  .   .  1  .
4  .  .   .  .  .   .  .  .
.  2  .   .  .  .   .  .  .

.  .  .   .  5  .   4  .  7
.  .  8   .  .  .   3  .  .
.  .  1   .  9  .   .  .  .

3  .  .   4  .  .   2  .  .
.  5  .   1  .  .   .  .  .
.  .  .   8  .  6   .  .  .

यहां, बोर्ड पर कोई संख्या दिखाई नहीं देती है, और संख्या 6, 7 और 9 केवल एक बार दिखाई देते हैं। हम ( ) और = 1 ( ) लेते हैं । पदों को बाएं से दाएं और फिर ऊपर से नीचे की ओर पढ़ना, एम 36 की स्थिति में दिखाई देता है ( )। इस प्रकार, हमारे एन्कोडिंग के साथ शुरू होता है ।m=70111=10001m360100100011100010100100

इसके बाद, हम सात की जरूरत 0है, एक 1और नंबर के 3 बिट कूटबन्धन , तो एक एक के बाद और 3 बिट कूटबन्धन 4 , आदि ( )। आखिरकार, हम उस स्थिति को छोड़ देंगे जहां m = 7 है, और हम 8 को (जैसे कि 1 , 2 , 3 , 4 , 5 , 6 , 8 , 9 ) और 9 को सूची में 6 वें नंबर की गिनती के रूप में एन्कोड करेंगे । पूर्ण एन्कोडिंग इस प्रकार है:10140000000100101100m=71101,2,3,4,5,6,8,9111

// m=7, l=1 and its position on the board.
011100010100100
// Numbers 1 and 4 at the beginning. Note that 1 is encoded 000, and 4 is 011.
0000000100001011
// Numbers 2 and 5.
0000000001001000000000001100
// Numbers 4 and 8. We skip the appearance of 7 and encode 8 as 110.
010110001110
// 3, 1 and 9. 9 is encoded as 111.
00010100000100001111
// 3, 4, 2, 5, 1, 8, 6 and the last empty cells.
0000101000101100100100011000100000000000111001101000

पूर्ण एन्कोडिंग है 01110001010010000000001001010110000000001001000000000001100010110001110000101000001000011110000101000101100100100011000100000000000111001101000, और पाठक उस स्ट्रिंग की लंबाई की जांच कर सकता है वास्तव में 143 :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.