ฉันใช้อัลกอริทึมซึ่งค่อนข้างซับซ้อนในการคำนวณและต้องการพยายามทำให้แน่ใจว่าฉันไม่ได้ทำงานที่ไม่จำเป็น
มีโครงตาข่ายลูกบาศก์ nxnxn เช่นถ้า n = 2 ประกอบด้วย (0,0,0), (0,1,0), (1,0,0), (1,1,0), (0, 1,1), (0,0,1), (1,0,1), (1,1,1)
จากขัดแตะนี้ฉันจะสร้างจุด m ซ้ำซ้ำทุกอย่างเช่น:
solve(set_of_points) {
if set_of_points.size = m, finish
do some useful computation here
for each point in lattice not in set_of_points:
solve(set_of_points + new_point);
}
ซึ่งสามารถเรียกได้ว่าเริ่มต้นด้วย set_of_point ที่ว่างเปล่า
ลักษณะของปัญหาที่เกิดขึ้นเป็นเช่นนั้นฉันไม่จริงต้องทุกการเปลี่ยนแปลงของจุดเมตรเพียงแค่คนที่เป็นเอกลักษณ์ภายใต้ symmetries ธรรมชาติของลูกบาศก์
ตัวอย่างเช่นใช้ 2x2x2 cube และสมมติว่าเราต้องการชุด 1 จุด ภายใต้อัลกอริทึมพื้นฐานด้านบนมี 8 ชุดที่แตกต่างกัน 1 จุด
อย่างไรก็ตามการใช้สมมาตรของลูกบาศก์เราสามารถลดชุดนี้ลงเหลือ 1 ชุดจาก 1 คะแนนเนื่องจาก 8 ต้นฉบับทั้งหมดนั้นเทียบเท่ากันภายใต้สมมาตรของคิวบ์ (ซึ่งเป็น 'มุม' ในกรณีนี้)
หากคิวบ์คือ 2x2x2 และ m = 2 จะมี 28 ชุดในอัลกอริทึมพื้นฐาน แต่จะลดลงเหลือเพียง 3 ภายใต้สมมาตร (เช่น {(0,0,0), (1,0,0)}, {(0 , 0,0), (1,1,0)}, {(0,0,0), (1,1,1)})
เห็นได้ชัดว่าการคำนวณคะแนน 3 ชุดดีกว่า 28 ดังนั้นคำถามของฉันคือฉันจะไม่สร้างชุดคะแนนที่มีความสมมาตรเทียบเท่ากับชุดที่สร้างขึ้นแล้วได้อย่างไร หรือถ้าเป็นไปไม่ได้อย่างน้อยฉันจะสามารถลดจำนวนชุดลงได้เล็กน้อย
(หมายเหตุ - ถ้า m = 1 สิ่งนี้ค่อนข้างง่าย - เพียงแค่เลือกจุดที่ใกล้เคียงกับ (0,0,0) มากกว่าจุดยอดอื่นใด ๆ โดยมีความยุ่งเหยิงเล็กน้อยที่ขอบเขตสำหรับ m> 1 ที่สิ่งนี้ได้รับ เป็นปัญหาจริง)