কম্পিউটার টিউটোরিয়াল

রড কাটিং (Rod Cutting)


একটি দৈর্ঘ্য n এর রড দেওয়া আছে। আরেকটি টেবিলও দেওয়া আছে যেখানে প্রতিটি আকারের জন্য আলাদা মূল্য রয়েছে। রড কাট করে বাজারে বিক্রি করে সর্বোচ্চ লাভ নির্ণয় করতে হবে।

রডের বিভিন্ন অবস্থানে কাট দিয়ে এবং কাটার পর মূল্য তুলনা করে সেরা মূল্য পাওয়া যায়।

f(n) দৈর্ঘ্য n এর রড কাট করে সর্বোচ্চ সম্ভাব্য মূল্য রিটার্ন করবে। আমরা সহজে ফাংশন f(n) এভাবে লিখতে পারি:

f(n) := price[i] + f(n – i – 1) থেকে সর্বোচ্চ মান, যেখানে i হল 0 থেকে (n – 1) পর্যন্ত।

ইনপুট এবং আউটপুট

ইনপুট:

বিভিন্ন দৈর্ঘ্যের মূল্য, এবং রডের দৈর্ঘ্য। এখানে দৈর্ঘ্য ৮।

রড কাটিং (Rod Cutting)

আউটপুট:

বিক্রি করার পর সর্বোচ্চ লাভ ২২।

রডকে ২ এবং ৬ দৈর্ঘ্যে কাটুন। লাভ ৫ + ১৭ = ২২

অ্যালগরিদম

rodCutting(price, n)

ইনপুট: মূল্য তালিকা, তালিকায় মোট কতটি ভিন্ন মূল্য আছে।

আউটপুট: রড কাট করে সর্বোচ্চ লাভ।

শুরু 
  profit নামক অ্যারে সংজ্ঞায়িত করুন আকার n + 1 
  profit[0] := 0 
  i := 1 থেকে n পর্যন্ত, করুন 
    maxProfit := - ∞ 
    j := 0 থেকে i-1 পর্যন্ত, করুন 
      maxProfit := maxProfit এবং (price[j] + profit[i-j-1]) এর মধ্যে সর্বোচ্চ 
    শেষ 
    profit[i] := maxProfit 
  শেষ 
  maxProfit ফেরত দিন 
শেষ

উদাহরণ

#include <iostream> using namespace std; int max(int a, int b) {   return (a > b)? a : b; } int rodCutting(int price[], int n) {   //price এবং n দৈর্ঘ্য থেকে সর্বোচ্চ লাভ খুঁজুন   int profit[n+1];   profit[0] = 0;   int maxProfit;   for (int i = 1; i<=n; i++) {     maxProfit = INT_MIN;     //প্রাথমিকভাবে নেতিবাচক অসীম সেট করুন     for (int j = 0; j < i; j++)       maxProfit = max(maxProfit, price[j] + profit[i-j-1]);     profit[i] = maxProfit;   }   return maxProfit; } int main() {   int priceList[] = {1, 5, 8, 9, 10, 17, 17, 20};   int rodLength = 8;   cout << "Maximum Price: "<< rodCutting(priceList, rodLength); }

আউটপুট

সর্বোচ্চ মূল্য: ২২

  1. রড কাটিং (Rod Cutting)

  2. বাবল সর্ট (Bubble Sort)

  3. C#-এ Enum (Enumeration) বেসিক ব্যবহার

  4. রড কাটিং সমস্যার পাইথন প্রোগ্রাম