একটি ভেক্টর পার্টিশন একটি ভেক্টরকে বিভিন্ন ভেক্টরকে এমন একটি ধারাবাহিকভাবে বিভক্ত করছে যে তাদের যোগফলটি আসল। এখানে কয়েকটি বিভাজন রয়েছে:
[3, 1, 2] = [3, 1, 2]
[3, 1, 2] = [0, 0, 1] + [0, 0, 1] + [0, 1, 0] + [1, 0, 0] + [2, 0, 0]
[3, 1, 2] = [1, 1, 2] + [2, 0, 0]
এখানে ভেক্টর সংযোজন উপাদান অনুসারে সম্পন্ন করা হয়। একটি বৈধ পার্টিশনে নেতিবাচক পূর্ণ সংখ্যার কোনও ভেক্টর বা অল-শূন্য ভেক্টর থাকে না।
এখন চ্যালেঞ্জটি হ'ল এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি লক্ষ্য ভেক্টর প্রদত্ত সমস্ত সম্ভাব্য ভেক্টর পার্টিশন তৈরি করে। এটি তুলনামূলকভাবে সহজ শোনায় ...
... তবে একটি মোচড় আছে। যদি ইনপুট ভেক্টরটির আকার L থাকে এবং এটি তৈরি করে সবচেয়ে বড় পার্টিশনটিতে M উপাদান থাকে তবে আপনি O (L * M) মেমরির চেয়ে বেশি ব্যবহার করতে পারবেন না।
আপনি ধরে নিতে পারেন যে কোনও পূর্ণসংখ্যক O (1) মেমরি ব্যবহার করে। এর অর্থ হ'ল পার্টিশনগুলি তৈরি করার সময় আপনাকে অবশ্যই আউটপুট করতে হবে। তার উপরে, আপনাকে অবশ্যই প্রতিটি বিভাজন ঠিক একবার আউটপুট করতে হবে। উদাহরণস্বরূপ, এগুলি একই পার্টিশন:
[3, 1, 2] = [3, 0, 2] + [0, 1, 0]
[3, 1, 2] = [0, 1, 0] + [3, 0, 2]
আপনি যদি উভয়ই আউটপুট দিতে থাকেন তবে আপনার উত্তরটি অবৈধ।
এর জন্য সমস্ত পার্টিশন [3, 2]
:
[3, 2]
[0, 1] + [3, 1]
[0, 1] + [0, 1] + [3, 0]
[0, 1] + [0, 1] + [1, 0] + [2, 0]
[0, 1] + [0, 1] + [1, 0] + [1, 0] + [1, 0]
[0, 1] + [1, 0] + [2, 1]
[0, 1] + [1, 0] + [1, 0] + [1, 1]
[0, 1] + [1, 1] + [2, 0]
[0, 2] + [3, 0]
[0, 2] + [1, 0] + [2, 0]
[0, 2] + [1, 0] + [1, 0] + [1, 0]
[1, 0] + [2, 2]
[1, 0] + [1, 0] + [1, 2]
[1, 0] + [1, 1] + [1, 1]
[1, 1] + [2, 1]
[1, 2] + [2, 0]
আপনার উত্তরটি পরীক্ষা করতে এটি চালিয়ে যান [3, 2, 5, 2]
। এটিতে 17939 পার্টিশন তৈরি করা উচিত, যার সবগুলিই যোগফল [3, 2, 5, 2]
, এবং সেগুলি অনন্য (
বাইটস মধ্যে সংক্ষিপ্ত কোড।