ในฐานะที่เป็นโครงการที่สนุกฉันได้ทำงานเกี่ยวกับการใช้ 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}
มีวิธีที่จะทำให้ดัชนีหลุดพ้นจากการเรียงลำดับแบบนี้หรือไม่?