จัดทำดัชนีในฐานข้อมูลรูปแบบ - โซลูชันคิวบ์ของ Optimal Rubik ของ Korf


11

ในฐานะที่เป็นโครงการที่สนุกฉันได้ทำงานเกี่ยวกับการใช้ C # ของ Richard Korf - การค้นหาโซลูชันที่เหมาะสมที่สุดกับ Cube ของ Rubik โดยใช้ฐานข้อมูลรูปแบบ

https://www.cs.princeton.edu/courses/archive/fall06/cos402/papers/korfrubik.pdf

ฉันใช้งานได้จริงฉันแค่พยายามปรับปรุงวิธีแก้ปัญหาของฉัน

สิ่งหนึ่งที่ Korf จ้องมองในกระดาษของเขาคือวิธีที่เขาเก็บและจัดทำดัชนีลงในฐานข้อมูลรูปแบบ ฉันคิดว่าเราต้องการใช้ตัวอย่างของลูกบาศก์รูบิคเพื่อสร้างดัชนีเป็นอาร์เรย์

คำถามของฉันเกี่ยวกับวิธีที่ดีที่สุดในการสร้างดัชนีนี้

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

ฉันเชื่อว่า Korf และ Shultz อธิบายวิธีที่ดีกว่าในการกำหนดดัชนีของคิวบ์ในกระดาษ 2548 ของพวกเขาที่เรียกว่า "การค้นหาแบบกว้างขนาดใหญ่ - การค้นหาครั้งแรก"

https://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf

บทความนี้อธิบายถึงอัลกอริทึมในการสร้างดัชนีโดยอ้างอิงจากการเรียงลำดับพจนานุกรมของการเปลี่ยนแปลง โดยทั่วไปคุณสามารถหาการเปลี่ยนแปลง {1, 2, 3} และคิดว่ามันเล็กที่สุดโดยมีดัชนีเป็น 0 {1, 3, 2} อยู่ติดกับดัชนี 1 และอื่น ๆ

ฉันรู้สึกว่าฉันควรจะสามารถใช้อัลกอริทึมนี้กับคิวบ์ของรูบิคเพื่อรับดัชนีภายในฐานข้อมูลรูปแบบ แต่ฉันมีเวลายากที่จะหาวิธีที่มันจะทำงานในทางปฏิบัติ

เช่นเดียวกับฐานข้อมูลรูปแบบมุมที่มีคิวบ์ของรูบิคทั้งหมดที่ถอดสติ๊กเกอร์ขอบออกแล้ว มี 88,179,840 ก้อนในชุดนี้ มุมใด ๆ บนลูกบาศก์รูบิคสามารถอยู่ในสถานะใดสถานะหนึ่งใน 24 รัฐ สถานะของคิวบ์มุมที่ 8 สามารถคำนวณได้ตามอีก 7 ดังนั้นคิวบ์ที่มุมของฐานข้อมูลรูปแบบเท่านั้นที่แต่ละค่ามี 7 ค่าระหว่าง 0 ถึง 23

เช่น {0, 3, 6, 9, 12, 15, 18, 21} กำหนดคิวบ์ "ที่แก้ไขแล้ว" โดยลบสติ๊กเกอร์ขอบทั้งหมด

ถ้าฉันหมุนด้านหน้าไป 90 องศาการเรียงสับเปลี่ยนอาจเป็น: {0, 3, 11, 23, 12, 15, 8, 20}

มีวิธีที่จะทำให้ดัชนีหลุดพ้นจากการเรียงลำดับแบบนี้หรือไม่?


คุณอาจจะพบว่าสิ่งนี้น่าสนใจ
Tom van der Zanden

! ที่น่าสนใจ คุณบอกว่าเขา "จ้องมอง" สิ่งที่อยู่ในกระดาษ มันจะเป็นการดีกว่าถ้าจะเจาะจงเจาะจงมากขึ้นในส่วนที่ไม่ใช่ คุณยังบอกว่าคุณใช้งานได้ การใช้การทำดัชนีเริ่มต้นของคุณคืออะไร? นี่เป็นโครงการโรงเรียนหรือไม่ แนะนำเพิ่มเติมวิทยาการคอมพิวเตอร์แชทกับมัน เช่นการเขียนบล็อกเกี่ยวกับมันหรือการเปิดซอร์สโค้ดจะมีประโยชน์ต่อผู้อื่นและนำไปสู่รายละเอียดเพิ่มเติม นอกจากนี้ยังมีกระดาษที่ดูเหมือนจะไม่ได้หมายถึงฟังก์ชั่นคร่ำเครียดใด ๆ ...
vzn

ผมนำมาใช้อัลกอริทึมของ Korf: github.com/benbotto/rubiks-cube-cracker ฉันก็พบว่าการจัดทำดัชนีเป็นเรื่องยากดังนั้นฉันจึงเขียนบทความเกี่ยวกับมันในสื่อ: Medium.com/@benjamin.botto/ …
avejidah

คำตอบ:


6

(pi,oi)(p0,,p7)(0,,7)oi{0,1,2}o7o0,,o68!37=88179840{0,,23}(pi,oi)(p0,,p7)o0,,o637p+o8!o+p


สวัสดี Yuval ขอบคุณสำหรับความคิดเห็น สำหรับฉัน 0 ถึง 23 เป็นวิธีที่ฉันระบุตำแหน่ง / ทิศทางที่ไม่ซ้ำกันที่ลูกบาศก์มุมสามารถอยู่ใน 8 ตำแหน่งครั้งที่ 3 การวางแนวต่อตำแหน่ง = 24 โชคดีที่ฉันสามารถแยกค่านี้ออกเป็น tuples ตำแหน่ง / ทิศทางที่แยกต่างหาก คำตอบของคุณนำฉันไปสู่โค้ดนี้ซึ่งเป็นการใช้งานอัลกอริทึมที่คุณกำลังอธิบาย github.com/brownan/Rubiks-Cube-Solver/blob/master/cornertable.c ฉันจะต้องทำงานเพื่อทำให้เรื่องนี้เป็นเรื่องธรรมดามากขึ้น (เพื่อให้ฉันสามารถจัดการรูปแบบที่แตกต่างจาก "มุมเท่านั้น") แต่ตอนนี้ ฉันกำลังติดตามขอบคุณ!
Cosmosis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.