আমি একটি অ্যালগরিদম বাস্তবায়ন করছি যা বেশ গণনামূলকভাবে জটিল হতে চলেছে এবং আমি অপ্রয়োজনীয় কাজ করছি না তা নিশ্চিত করার চেষ্টা করতে চাই।
একটি এনএক্সএনএক্সএন কিউবিক ল্যাটিস রয়েছে, উদাহরণস্বরূপ যদি এন = 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)।
এই ল্যাটিসটি থেকে আমি পুনরাবৃত্তভাবে সমস্ত সেট মি পয়েন্ট তৈরি করব, এরকম কিছু:
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);
}
এরপরে একে খালি সেট_পো_পয়েন্ট দিয়ে শুরু করে বলা যেতে পারে।
সমস্যার প্রকৃতিটি হ'ল আমার আসলে মি পয়েন্টগুলির প্রতিটি অনুক্রমের প্রয়োজন হয় না , কেবল কিউবের প্রাকৃতিক প্রতিসাম্যের অধীনে অনন্য।
উদাহরণস্বরূপ, একটি 2x2x2 কিউব নিন এবং ধরুন আমরা 1 পয়েন্টের সমস্ত সেট চাই। উপরের বেসিক অ্যালগরিদমের অধীনে 1 পয়েন্টের 8 টি আলাদা সেট রয়েছে।
তবে কিউবের প্রতিসাম্য ব্যবহার করে আমরা এটিকে 1 পয়েন্টের 1 অনন্য সেটকে হ্রাস করতে পারি, যেহেতু মূল 8 টি সমস্ত কিউবের প্রতিসাম্যের অধীনে সমান (তারা এই ক্ষেত্রে সমস্ত 'কোণ')।
যদি ঘনক্ষেত্রটি 2x2x2 এবং মি = 2 হয় তবে বেসিক অ্যালগরিদমে 28 টি সেট রয়েছে তবে এটি প্রতিসমের অধীনে মাত্র 3 এ চলেছে (যেমন {(0,0,0), (1,0,0)}, {(0 , 0,0), (1,1,0)}, {(0,0,0), (1,1,1)})
স্পষ্টতই 3 সেট পয়েন্টগুলিতে গণনা করা 28 এর চেয়ে অনেক ভাল, সুতরাং আমার প্রশ্নটি হল আমি ইতিমধ্যে উত্পন্ন উত্সের প্রতিসাম্য সমতুল্য পয়েন্টগুলির সেট তৈরি না করে কীভাবে যাব? বা যদি এটি সম্ভব না হয় তবে আমি কীভাবে কমপক্ষে সেটগুলির সংখ্যা কিছুটা কমিয়ে আনব।
(দ্রষ্টব্য - যদি মি = 1 এটি তুলনামূলকভাবে সহজ হয় - কেবল সীমানায় কিছুটা ঝাঁকুনির সাথে অন্য শীর্ষগুলির চেয়ে যে পয়েন্টগুলি (0,0,0) এর নিকটবর্তী হয় কেবল তা বেছে নিন m এটি এম> 1 এর জন্য এটি পায় একটি বাস্তব সমস্যা হতে)