মডিউল ১৮_৪ঃ Knapsack Top Down Approach ইমপ্লিমেন্টেশনসহ
এতক্ষন আমরা Knapsack problem টিকে recursion দিয়ে সমাধান করেছি, এখন এই প্রব্লেমটির সমাধানকে আরো optimization করতে গেলে আমরা Memoization করে থাকি, এই Memoization পার্টটি হচ্ছে DP approach।
এখন আমরা recursive call করার আগেই চেক করে নিচ্ছি যে আমাদের 2D array এর মধ্যে আগে থেকে n, W এর অপশনটি store করা আছে কিনা।
যদি থাকে তাহলে সেই অপশনটি আবার বের না করে 2D array থাকা অপশনটি return করে দিয়েছি।
যদি র 2D array এর মধ্যে আগে থেকে n, W এর অপশনটি store না থাকে। তাহলে আগের মত recursive call করে op বের করেছি , এখন return করার আগে 2D array এর n,W index এ এখন বের করা অপশনটিকে store করেছি, এরপর সেই অপশনটিকে return করেছি।
এইভাবে Memoization করে আমাদের কোডটির time complexity অনেক কমে যায়।
উপরের চিত্রে visualize করা input টিতে Memoization ছাড়া করলে এইভাবে এতগুলো কল হয়ে থাকে।
এরপর Memoization করলে time complexity অনেক কমে যায়। উপরে কালো মার্ক করা n,W কে নতুন করে আবার বের করতে হয় নি, কারন সেইগুলো আগে বের করা হয়েছিল এবং সেইটিকে 2D array তে store করায়, সেইটি আবার নতুন করে বের করতে হয় নি।