मैं एक एल्गोरिथ्म लागू कर रहा हूं जो काफी कम्प्यूटेशनल रूप से जटिल होने वाला है, और यह सुनिश्चित करने की कोशिश करना चाहता हूं कि मैं अनावश्यक काम नहीं कर रहा हूं।
एक 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 से शुरू किया जा सकता है।
समस्या की प्रकृति ऐसी है कि मुझे वास्तव में मीटर के प्रत्येक क्रमांक की आवश्यकता नहीं है , बस वे जो क्यूब के प्राकृतिक समरूपता के तहत अद्वितीय हैं।
उदाहरण के लिए, 2x2x2 घन लें और मान लें कि हम 1 अंक के सभी सेट चाहते हैं। ऊपर दिए गए बुनियादी एल्गोरिथ्म के तहत, 1 बिंदु के 8 अलग-अलग सेट हैं।
हालांकि, क्यूब के समरूपता का उपयोग करके हम इसे 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 के लिए है जो यह हो जाता है) वास्तविक समस्या होना)