จำนวนบิตขั้นต่ำที่ต้องใช้ในการจัดเก็บตัวต่อซูโดกุคืออะไร?


28

หมายเหตุ: นี่เป็นเรื่องเกี่ยวกับปริศนาซูโดกุขนาด 9x9 มาตรฐาน วิธีการแก้ปัญหามีเพียงเพื่อสนับสนุนการแก้ไขปริศนาตามกฎหมาย ดังนั้นโซลูชันไม่จำเป็นต้องสนับสนุนเซลล์ว่างและสามารถพึ่งพาคุณสมบัติของปริศนาซูโดกุที่ได้รับการแก้ไข

ฉันสงสัยในสิ่งนี้ แต่ฉันไม่สามารถนึกคำตอบที่ฉันพอใจได้ โซลูชันไร้เดียงสาจะใช้หนึ่งไบต์สำหรับแต่ละเซลล์ (81 เซลล์) รวม 648 บิต วิธีแก้ปัญหาที่ซับซ้อนมากขึ้นจะเก็บปริศนาซูโดกุทั้งหมดไว้ในเลขฐาน 9 (หนึ่งหลักต่อเซลล์) และต้องการlog2(981))=257บิต

แต่มันก็ยังสามารถปรับปรุงได้เช่นถ้าคุณรู้ว่า 8 จาก 9 หมายเลขใน 3xgr ย่อยคุณสามารถอนุมานเล็กน้อยที่ 9 คุณสามารถดำเนินการต่อความคิดเหล่านี้ไปยังจุดที่คำถามนี้เดือดลงไปถึงซูโดกุที่ได้รับการแก้ไขที่ไม่ซ้ำกันจำนวนเท่าใด? ตอนนี้คุณสามารถใช้ตารางการค้นหาขนาดใหญ่ที่แมปเลขฐานสองแต่ละตัวกับปริศนาซูโดกุ แต่นั่นไม่ใช่วิธีแก้ปัญหาที่ใช้งานได้

ดังนั้นคำถามของฉัน:

หากไม่ใช้ตารางการค้นหาจำนวนบิตขั้นต่ำที่ต้องใช้ในการจัดเก็บตัวต่อซูโดกุคืออะไรและใช้อัลกอริทึมแบบใด


3
มีความแตกต่างเชิงคุณภาพระหว่างการออกหมายเลข 9 ในแบบ 3x3 แถวหรือคอลัมน์และเพียงแค่เก็บซูโดกุขนาดเล็กที่สุดด้วยช่องว่างที่มีวิธีแก้ปัญหาเฉพาะนั้นหรือไม่? "ไม่จำเป็นต้องสนับสนุนเซลล์ว่าง" เป็นปลาเฮอริ่งแดงเล็กน้อยถ้าจำเป็นต้องแก้ปัญหาที่เหมาะสม
Wooble

19
เนื่องจากมีซูโดกุที่แก้ไขแล้ว 6.67 × 10 ^ 21 (“ QSCGZ” 2003; Felgenhauer และ Jarvis 2005) และ log_2 (6.67 × 10 ^ 21) = 72.4 …ขอบเขตที่ต่ำกว่าคือ 73 บิต (แม้ว่าคุณจะใช้การค้นหาตารางขนาดใหญ่) . หากคุณไม่จำเป็นต้องแยกแยะวิธีแก้ปัญหาที่เหมือนกันในแง่ของความสมมาตรขอบเขตล่างนี้จะไม่ถูกนำมาใช้
Tsuyoshi Ito

9
คำถามนี้จะทำให้การแข่งขันเขียนโปรแกรมที่ดี
Peter Shor

1
ขอบเขตล่างแบบอะนาล็อกสำหรับโซลูชันที่เหมือนกันโดยพื้นฐานคือ 33 บิต
ชาร์ลส์

3
ทำไมคุณต้องค้นหาตาราง? คุณสามารถระบุการแก้ปัญหาของ Sudoku ทีละตัวจนกว่าจะถึงจำนวนที่ต้องการ
Zirui Wang

คำตอบ:


19

ในบรรทัดเดียวกับคำตอบของเฟืองวงล้อถ้าคุณเติมเซลล์ที่ไม่ติดดาวลงในเมทริกซ์ต่อไปนี้กล่อง 3x3 ต่อครั้งให้เลือกกล่องถัดไปเสมอเพื่อเติมให้เป็นหนึ่งที่แชร์แถวหรือคอลัมน์ด้วยกล่องที่คุณ คุณได้รับรูปแบบดังต่อไปนี้สำหรับจำนวนตัวเลือกต่อขั้นตอน (กรอกในกล่องกลางด้านบนก่อนกล่องด้านขวาบนถัดไป ฯลฯ )

ในแต่ละกล่อง 3x3 หลังจากกล่องแรกเมื่อคุณกรอกข้อมูลลงในหนึ่งแถวหรือคอลัมน์ของกล่องแล้วตัวเลขหกหลักที่เหลืออยู่สามหลักจะถูกแปลเป็นแถวเดียว เลือกตำแหน่งของพวกเขาก่อนจากนั้นจึงเติมเซลล์ที่เหลืออีกสามเซลล์ (ดังนั้นลำดับที่แท้จริงของเซลล์ที่จะเติมอาจแตกต่างกันไปขึ้นอยู่กับสิ่งที่คุณรู้อยู่แล้ว แต่จำนวนตัวเลือกไม่มากไปกว่าที่ฉันเคยแสดงไว้)

หลังจากที่คุณเติมเซลล์เหล่านี้แล้วดาวทุกดวงจะถูกกำหนด

* * * 9 8 7 6 5 4
* * * 6 5 4 3 3 2
* * * 3 2 1 3 2 1

6 5 4 * * * 6 3 3
3 3 2 * * * 5 3 2
3 2 1 * * * 4 2 1

6 3 3 6 5 4 * * *
5 3 2 3 3 2 * * *
4 2 1 3 2 1 * * *

หากฉันคำนวณอย่างถูกต้องจะให้ 87 บิต มีการประหยัดเพิ่มเติมที่ต้องมีในบล็อก 3x3 สุดท้ายตามข้อคิดเห็นโดย Peter Shor: ค่าทุกค่าจะถูกแปลเป็นหนึ่งในสี่เซลล์และทุกแถวมีอย่างน้อยหนึ่งเซลล์ที่มีค่าที่เป็นไปได้เพียงสี่ตัวเท่านั้นดังนั้นปัจจัยในนั้น บล็อกควรเริ่มต้นด้วย 4 ไม่ใช่ 6 แต่ฉันไม่เข้าใจปัจจัยที่เหลือในคำตอบของ Shor


4
คุณสามารถลดจำนวนตัวเลือกเมื่อคุณกรอกข้อมูลลงในกล่อง 3x3 ที่หกเช่นกัน กล่องนี้กลายเป็น 4,3,2 / 3,2,1 / 2,1,1 รวม 83 บิตถ้าฉันคำนวณมันถูกต้อง
Peter Shor

@Peter - ไม่ หมายเลข 3 ทางด้านขวาอาจเหมือนกับหมายเลขด้านบน คุณไม่รู้ว่าทั้งหมดนั้นแตกต่างกันหรือไม่ หมายเลขเฉพาะที่มั่นใจได้มากที่สุดคือ 3 ดังนั้นกล่องแรกจะเลือกจากหกรายการ (สถานที่แห่งนี้เป็นหนึ่งตัวอย่างที่มันเป็นความจริงสำหรับคนอื่น ๆ มากเกินไป..)
โฮแกน

@ David - ตามความเห็นของฉันต่อ Peter ฉันไม่คิดว่าตัวเลขของคุณผิด ในกล่องที่สองคุณมี6 5 4 4 3 2 3 2 1ฉันเชื่อว่ามันจะต้อง6 5 4 6 5 4 3 2 1เป็นกรณีที่เลวร้ายที่สุด
โฮแกน

โฮแกนไม่เห็นส่วนในคำตอบของฉันเกี่ยวกับ "เมื่อคุณกรอกข้อมูลลงในหนึ่งแถวหรือคอลัมน์ของกล่องคุณสามารถเลือกแถวหรือคอลัมน์ถัดไปเพื่อเติมให้เป็นหนึ่งในที่มีค่าที่เป็นไปได้มากที่สุดสี่ "
David Eppstein

@David - ให้ป้ายกำกับ 3 x 3s 1,1 1,2 1,3 ไปทางซ้ายไปขวาบนลงล่าง ให้ lable the Squares A - ฉันจะจากซ้ายไปขวาบนลงล่าง ตำแหน่ง D ใน 1,3 รู้ 3 ตัวเลขใน 3x3 เป็น (A, B, C) และรู้ 3 ตัวเลขใน 1,2 (D, E, F) แต่ไม่รู้ว่าตัวเลขทั้ง 6 นั้นแตกต่างกันหรือไม่ พวกเขาอาจเป็นตัวเลข 3 ตัวเดียวกันจากกล่อง 3,1 และ 2,1 จึงมีตัวเลือกสูงสุด 6 ตัว
โฮแกน

13

ไปกับคำตอบของ @ peter ต่อไปนี้เป็นรายการที่มีความเป็นไปได้ที่แย่ที่สุดสำหรับแต่ละเซลล์ในขณะที่คุณกรอกข้อมูลโดยเริ่มจากด้านบนซ้าย

9   8   7       6   5   4       3   2   1
6   5   4       6   5   4       3   2   1
3   2   1       3   2   1       3   2   1

6   6   3       6   5   4       3   2   1
5   5   2       5   5   3       3   2   1
4   4   1       4   2   1       3   2   1

3   3   3       3   3   3       1   1   1
2   2   2       2   2   2       1   1   1
1   1   1       1   1   1       1   1   1

สิ่งนี้ทำให้มีความเป็นไปได้ 4,24559E + 29 หรือ 99 บิต

แก้ไข: ลืมว่าตารางสุดท้ายจะถูกกำหนดโดยผู้อื่นทั้งหมดอย่างเต็มที่


ดีมาก!! ให้ฉันเพิ่มว่ามันไม่ชัดเจนสำหรับฉันว่าคุณสามารถบรรลุความเป็นไปได้ที่เลวร้ายที่สุดสำหรับโซลูชั่น Sudoku จริง ๆ (โดยเฉพาะถ้าคุณใช้อัลกอริทึมที่ซับซ้อนซึ่งใช้เทคนิค Sudoku เพื่อ จำกัด ขอบเขตความเป็นไปได้ที่ตัวเลขในเซลล์ )
Peter Shor

@ peter แต่คุณต้องเพิ่มการ จำกัด เหล่านั้นใน en และถอดรหัสและฉันรู้ว่าถ้าคุณต้องเลือกอย่างใดอย่างหนึ่งและไม่แก้ไขลำดับ (วิธีที่ง่ายที่สุด แต่ไม่ดีที่สุดจริงๆ) คุณต้องเพิ่มสิ่งนั้นลงในการเข้ารหัสด้วย
ratchet freak

ไม่ถ้าคุณใช้อัลกอริทึมเดียวกันในการหาเซลล์ที่ดีที่สุดในขั้นตอนการถอดรหัสและมันจะให้เซลล์เดียวกัน (เนื่องจากทำงานบนข้อมูลเดียวกัน) ดังนั้นขั้นตอนการถอดรหัสและจะถูกซิงโครไนซ์ และคุณไม่จำเป็นต้องเพิ่มคำสั่งในการเข้ารหัส แนวคิดนี้ยังทำให้อัลกอริทึมการบีบอัดข้อมูล LZW ทำงานได้
Peter Shor

ฉันคิดว่าบิตขั้นต่ำที่ต้องใช้ในการจัดเก็บตัวต่อซูโดกุที่ถูกต้องนั้นไม่ใช่ฟังก์ชั่นที่คำนวณได้ (Kolmogorov) อย่างไรก็ตาม 103 บิตโดย Peter / ratchet ดูเหมือนว่าจะเป็นขอบเขตที่ดี
Marzio De Biasi

2
@Vor: ในทางเทคนิคเครื่องจักรทัวริงที่ส่งออกจำนวนบิตที่ถูกต้องเมื่อได้รับปริศนาซูโดกุเป็นอินพุตมี จำกัด เนื่องจากชุดอินพุตมี จำกัด ดังนั้น "จำนวนบิตที่จำเป็นในการอธิบายปริศนานี้" คือ "เล็กน้อย" คำนวณได้ ฉันกำลังบอกว่าเราสามารถหาเครื่องทัวริงได้อย่างชัดเจน (ตามหลักการแล้วการคำนวณอาจใช้เวลานานเกินไป) เพราะมันไม่ยากกว่าการคำนวณคำนำหน้า จำกัด ของหมายเลขโอเมก้า
Aaron Sterling

5

คุณไม่จำเป็นต้องใช้ตารางการค้นหาแบบเต็มเพื่อให้ได้การบีบอัดที่ดีที่สุด ฉันเชื่อว่าคอมพิวเตอร์สมัยใหม่ที่ใช้ตารางการค้นหาที่สมเหตุสมผลมากสามารถนับจำนวนSudokus ที่มีข้อ จำกัดซึ่งเป็น Sudokus ที่มีตัวเลขบางตัวอยู่แล้ว ใช้สิ่งนี้คือวิธีที่คุณเข้ารหัส (การถอดรหัสคล้ายกัน)

แก้ไขคำสั่งของสี่เหลี่ยม สมมติว่าตัวเลขในตารางแรกคือ 1 ใส่N 1จะเป็นจำนวน Sudokus ที่มีตารางแรกคือน้อยกว่า 1 ตอนนี้ให้d 2เป็นจำนวนของจตุรัสที่สอง ใส่N 2ให้เท่ากับจำนวน Sudokus ที่ช่องแรกคือd 1และช่องที่สองน้อยกว่าd 2d1N1d1d2N2d1d2 2และอื่น ๆ จำนวนการเข้ารหัสคือฉันN=iNi

วิธีการเข้ารหัสนี้เรียกว่าการเข้ารหัสแบบทวินามในวรรณคดี มันควรจะช่วยให้คุณสามารถคำนวณดัชนีของ Sudoku ที่ได้รับและในทางกลับกันได้อย่างมีประสิทธิภาพ (ในความเป็นจริง) จากนั้นคุณจะต้องใช้เพียงบิตตามที่กล่าวถึงข้างต้น (ซึ่งหมายความว่าคุณสามารถเข้ารหัสหลาย ๆ บิตด้วยจำนวนบิตเฉลี่ยนั้น)72.4

แก้ไข: หน้า Wikipedia เกี่ยวกับคณิตศาสตร์ของ Sudokuช่วยให้เราชี้แจงภาพได้ นอกจากนี้ยังเป็นประโยชน์เป็นตารางรวบรวมโดยเอ็ดรัสเซล

ปรากฎว่าถ้าคุณพิจารณาเฉพาะสามแถวบนสุดนั้นจะมีการพิจารณาการกำหนดค่าที่แตกต่างกันเพียง 44 รายการเท่านั้น ในตารางคุณสามารถค้นหาจำนวนทั้งหมดของการกำหนดค่าที่เทียบเท่ากับการกำหนดใด ๆ (สมมติว่าแถวบนสุดคือ 123456789) และจำนวนความสำเร็จทั้งหมดของแต่ละรายการ ให้ Sudoku นี่คือวิธีที่เราคำนวณเลขลำดับ:

  1. ทำให้การกำหนดค่าเป็นปกติเพื่อให้แถวบนสุดเป็น 123456789
  2. ค้นหาว่าเป็นของการกำหนดค่าที่แตกต่าง 44 รายการ บทความ Wikipedia ให้อัลกอริทึมสำหรับสิ่งนั้น ตารางแสดงรายการจำนวนคลาสที่เทียบเท่าสำหรับการกำหนดค่าแต่ละรายการรวมถึงจำนวนความสำเร็จ
  3. กำหนดหมายเลขลำดับของการกำหนดค่าของแถวสามอันดับแรกภายในคลาสที่เทียบเท่า สิ่งนี้สามารถทำได้สองวิธี: การใช้รายการของคลาสสมมูลทั้งหมด (มีทั้งหมด 36288 ในคลาสสมมูลทั้งหมด) หรือโดยการค้นหาวิธีการแจกแจงทั้งหมดอย่างรวดเร็ว
  4. ทำให้บรรทัดที่เหลือเป็นปกติด้วยการจัดเรียงแถวที่ 4-6 และ 7-9 ตามคอลัมน์แรกแล้วเรียงลำดับบล็อกสองแถวเหล่านี้ในลักษณะที่ไม่มีกฎเกณฑ์ สิ่งนี้จะลดจำนวนความสำเร็จของตัวประกอบ 72
  5. ระบุความสำเร็จทั้งหมดที่มีคอลัมน์แรกเหมือนกัน มีประมาณของพวกเขาสำหรับแต่ละชั้นเทียบเท่าดังนั้นไม่ควรใช้เวลานานเกินไป การแลกเปลี่ยนบางอย่างเป็นไปได้ที่นี่เช่นกัน220
  6. ให้เป็นคลาสสมมูล, jเป็นเลขลำดับของการกำหนดค่าของสามแถวบนภายในคลาสสมมูล, kเป็นเลขลำดับของความสมบูรณ์ มีสองอาร์เรย์C i , D i (ซึ่งสามารถคำนวณได้จากตารางของ Ed Russell) เช่นC i + j D i + kเป็นเลขลำดับของ Soduko ถึง9 ! 72สมมาตรพิจารณาแล้ว จากนั้นคุณสามารถคำนวณเลขลำดับจริงijkCi,DiCi+jDi+k9!72

ขั้นตอนนี้สามารถย้อนกลับได้และจะสร้าง Sudoku จากเลขลำดับ โปรดทราบว่าการแจงนับ Sudoku ลดลงเหลือเพียงไม่กี่นาที (ในปี 2549 ดูหน้าพูดคุยของบทความ Wikipedia) หรือน้อยกว่าดังนั้นฉันคาดว่าในคอมพิวเตอร์สมัยใหม่วิธีนี้จะใช้งานได้จริงและใช้เวลาไม่กี่วินาทีหรือน้อยกว่า


2
เป็นไปได้หรือไม่ที่จะนับรวมการแก้ปัญหาของซูโดกุอย่างมีประสิทธิภาพ? มันคือ # P-complete ถ้าคุณพูดคุยเรื่องขนาดและคุณอนุญาตให้มีช่องว่างในที่ที่กำหนด
Tsuyoshi Ito

2
ดังที่ฉันได้กล่าวถึงในคำตอบของฉันการเข้ารหัสทางเลขคณิตจะทำให้การบีบอัดข้อมูลใกล้เคียงที่สุดสำหรับสถานการณ์นี้
Peter Shor

1
คุณอาจพูดถูก แต่การอ้างสิทธิ์ของคุณหมายความว่าจำนวนของกริดซูโดกุ (6.67 × 10 ^ 21) นั้นง่ายต่อการคำนวณบนคอมพิวเตอร์ที่ทันสมัย เป็นไปได้ที่จะคำนวณ แต่มันง่ายหรือไม่
Tsuyoshi Ito

2
ฉันได้ความประทับใจนั้นจากหนึ่งในเอกสารที่อธิบายวิธีการคำนวณ คุณสามารถคำนวณข้อมูล "ที่หนักกว่า" บางอย่างในการประมวลผลล่วงหน้าและเก็บไว้ในตารางที่มีขนาดพอเหมาะ - ความเร็วที่เพิ่มขึ้นสามารถทำได้อย่างน่าทึ่ง เท่าที่ฉันจำได้มันใช้เวลาเพียงไม่กี่ชั่วโมงและเมื่อหลายปีก่อน ตอนนี้สมมติว่าคุณใช้ตารางเพื่อให้เร็วขึ้น 1,000 เท่า ยิ่งไปกว่านั้นในแต่ละขั้นตอนตัวเลขจะลดลงอย่างทวีคูณดังนั้นงานส่วนใหญ่จึงอาจมีสมาธิในระยะแรก
Yuval Filmus

1
@tsuyoshi ฉันเชื่อว่ามีบางรุ่น / ส่วนขยายของ BDD ที่ทำให้การคำนวณค่อนข้างตรงไปตรงมา - ฉันต้องทำการขุดเล็กน้อยสำหรับมัน แต่ฉันรู้ว่าพวกมันถูกใช้สำหรับปัญหาการนับ combinatorial ที่ค่อนข้างซับซ้อน
Steven Stadnicki

4

นี่คืออัลกอริทึมที่ฉันสงสัยว่าจะให้การเข้ารหัสที่ดีทีเดียว คุณมีซูโดกุสำเร็จรูปที่คุณต้องการบีบอัดและสมมติว่าคุณได้เข้ารหัสเซลล์บางส่วนแล้วดังนั้นจึงมีซูโดกุบางส่วน (ไม่จำเป็นต้องมีวิธีแก้ปัญหาเฉพาะ) ที่มีเซลล์บางส่วนบรรจุอยู่

ใช้อัลกอริทึมคงที่เพื่อนับจำนวนที่สามารถวางลงในเซลล์ว่างทุกเซลล์ ค้นหาเซลล์ lexicographically แรกที่จำนวนน้อยที่สุดของตัวเลขที่แตกต่างกันและการเข้ารหัสที่หนึ่งในตัวเลขเหล่านี้เข้าไปในนั้น (ดังนั้นถ้าเซลล์สามารถมี 3, 7, หรือ 9 เท่านั้น 3 ถูกเข้ารหัสโดย "0 ", 7 โดย" 1 "และ 9 โดย" 2 ") เข้ารหัสลำดับผลลัพธ์ที่เกิดขึ้นโดยใช้การเข้ารหัสทางคณิตศาสตร์ (ซึ่งคำนึงถึงจำนวนตัวเลขที่เป็นไปได้ที่เซลล์สามารถมีได้)

ฉันไม่ทราบว่าจะเรียงลำดับเลขฐานสองได้นานแค่ไหน แต่ฉันคิดว่ามันค่อนข้างสั้นโดยเฉพาะถ้าอัลกอริทึมของคุณสำหรับการนับจำนวนตัวเลขที่สามารถวางลงในเซลล์นั้นมีความซับซ้อนพอสมควร

หากคุณมีอัลกอริทึมที่ดีซึ่งประเมินความน่าจะเป็นของแต่ละเซลล์ที่มีตัวเลขที่กำหนดคุณสามารถทำได้ดีกว่า


3

Any comments and criticisms welcome

An approach from compressed sensing seems to provide a range from 69.96bits to 171.72bits:

1.)Storing the puzzle implies storing the solution (information theoretically).

2.)The hardest sudoku puzzle seems to have t(α)α2 entries for some t(α) that depends on α (For example, t(3) =2.44444 to 3). http://www.usatoday.com/news/offbeat/2006-11-06-sudoku_x.htm

Hence, we have a vector P of length α4 that have atmost t(α)α2 non-zero entries.

3.) Take M, a β×α4 matrix with β2t(α)α2 and which has any 2t(α)α2 columns independent and with entries in {0,±1}. This matrix is fixed for all instances of the puzzle. β=kt(α)α2 for some fixed k suffices from UUP.

4.) Find V=MP. This has β integers which on average is bounded by |α2| since entries of M are random with entries in {0,±1}.

5.) Storing V needs βlogα2=2kt(α)α2logα bits.

In your case, α=3 and t(α) =3 and 2kt(α)α2logα=69.96kbits to 85.86k bits. k=2, the minumum required provides roughly 139.92bits to 171.72bits roughly as a lower bound for the average case.

Note that I have hand-waived some assumptions such as sizes of entries of MP and number of entries one has on average in the puzzle.

A.)Of course, it mightbe possible to reduce k from 2 since in sudoku the position of the sparse entries are not that mutually independent. Each entry on an average t(α)1 entries each in its row, column and sub-box. That is given, that some entries are present in a sub-box or column or row, one can find the odds of entries being present in the same row, column or sub-box.

B.) Each row, column or sub-box is assumed to have on an average t(α) non-zero entries with no-repeating alphabet. This means some types of vectors with t(α) non-zero entries will never occur, thereby reducing the search space of solutions. This could also reduce k. For instance, fixing t(α) entries in a sub-box, a row and a column would reduce the search space from α4Ct(α)α2 to α4(3α21)Ct(α)α23t(α).

A comment: May be a multi-user arbitrarily correlated Slepian-Wolf model will help make the entries independent while still respecting the atmost t(α)α2 non-zero entries criterion. However, if one could use it, one need not have gone through the compressed sensing route. So applicability of Slepian-Wolf might be hard.

C.)From an error correction analogy, an even significant reduction may be possible, since in higher dimensions, there could be gaps between the half-the-minimum-distance radii hamming balls around code points with a possibility to correct greater errors. This also should lead to reduction of k.

D.) V itself can be entropy compressed. If the entries of V are quite similar in sizes, then can we assume that the difference between any two of the entries is atmost O((Vmax))=O(|α2|)? Then if encoding the differences between the entries suffices, this itself will remove the factor 2 in βlogα2=2kt(α)α2logα.

It would be interesting to see if 2k can be made equal or less than 2 using A.), B.), C.) and D.). This would be better than 89 bits (which is the best so far in other answers) and for the best case better than the absolute minimum for all puzzles which is around 73bits.


1

This is to report an implementation of completed-sudoku compact encoding (similar to suggestion by Zurui Wang 9/14/11).

The input is the top row and 1st 3 digits of the 2nd row. These are reduced to 1-9! and 1-120 and combined to <= 4.4x10^7. These are used as givens to count lexicographically all the partial sukokus of 30 digits up to the matching sequence. Then the final count up to the entire 81 digits is done the same way. These 3 sequences are stored as 32-bit integers of max 26 bits, so can be compressed further. The entire process takes about 3 minutes, with the 1st 30 digits taking most of the time. The decoding is similar--except matching counts instead of sudokus.

Coming soon--Revision includes 1st 3 digits of 2nd row in enumeration of 30 digit completions (2nd 32-bit code), comparisons with Jarvis enumeration (Jscott, 3/1615)


1
FYI: If you created two accounts and would like to merge them, see cstheory.stackexchange.com/help/merging-accounts
D.W.

0

I would go with the following simple analysis:

Each value could be stored in 4 bits (ranges from 1-9, these three bits even allow for 0-16)

If we considered to store the WHOLE solution (not optimal), having 9×9=81 values. 3 bits each = 243 bits.

However, as the rules that the solved sudoku has to follow, storing every bit is in fact redundant. However, since the order is important, you need to store the first 8 values in each row (thus determining the 9th value), for 8 rows (thus determining the last row). This reduces the sudoku to 8×8 for 3 bits, 192 bits (24 bytes).

I guess I could reduce it to:

b=log2(v)(n1)

where

v = range of values (I've seen 0-5 sudokus a lot)

n = number of rows / columns

Edit: Neo Style: I know Latex.


-2

That number is different for each Sudoku. One of the rules for Sudoku is that it has exactly one solution.

So if you look at an example, that's the minimum amount of data that you must store.

If you work from the opposite side, you can remove digit by digit and run a solver on the result to see if it still has exactly one solution. If so, you can delete another digit. If not, you must restore this digit and try another. If you can't, you have found a minimum.

Since most puzzles start mostly empty, a run length encoding will probably yield good results.


This greedy approach not necessarily achieves the minimum, perhaps you need to select carefully which digit to remove in each step.
Diego de Estrada

It's just an example. Google for "sudoku puzzle generators" to get more sophisticated ones.
Aaron Digulla

5
I really don't see why you would expect this to perform particularly well. This just seems to be gut feeling rather than an answer.
Joe Fitzsimons
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.