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

সি-তে ০-১ ন্যাপস্যাক সমস্যা (0-1 Knapsack Problem)


ন্যাপস্যাক হল একটি ব্যাগ। ন্যাপস্যাক সমস্যাটি আইটেমের মান অনুযায়ী ব্যাগে আইটেম রাখতে নিয়ে কাজ করে যাতে মোট মান সর্বাধিক হয়। ০-১ ন্যাপস্যাকে আপনি হয় আইটেমটি পুরোপুরি রাখবেন অথবা ফেলবেন, আংশিক রাখা যায় না।

নমুনা সমস্যা

আইটেমের মান = {20, 25, 40} আইটেমের ওজন = {25, 20, 30} ব্যাগের ক্ষমতা = 50

ওজন বিতরণ

25,20 {1,2} 20,30 {2,3} {1,3} ব্যবহার করলে ওজন লিমিট přek্রম করবে। {1,2}: ওজন=45, মান=45 {2,3}: ওজন=50, মান=65

সর্বোচ্চ মান ৬৫, তাই আইটেম ২ এবং ৩ ন্যাপস্যাকে রাখব।

০-১ ন্যাপস্যাক প্রোগ্রাম

#include<stdio.h> int max(int a, int b) {    if(a>b){       return a;    } else {       return b;    } } int knapsack(int W, int wt[], int val[], int n) {    int i, w;    int knap[n+1][W+1];    for (i = 0; i <= n; i++) {       for (w = 0; w <= W; w++) {          if (i==0 || w==0)             knap[i][w] = 0;          else if (wt[i-1] <= w)             knap[i][w] = max(val[i-1] + knap[i-1][w-wt[i-1]], knap[i-1][w]);          else             knap[i][w] = knap[i-1][w];       }    }    return knap[n][W]; } int main() {    int val[] = {20, 25, 40};    int wt[] = {25, 20, 30};    int W = 50;    int n = sizeof(val)/sizeof(val[0]);    printf("The solution is: %d", knapsack(W, wt, val, n));    return 0; }

আউটপুট

The solution is: 65

  1. ব্যাকট্র্যাকিং (Backtracking) পরিচিতি

  2. C প্রোগ্রাম: অ্যারে রেঞ্জের গুণফল মডুলো P-এ

  3. সি প্রোগ্রামে ০-১ বিএফএস (বাইনারি ওয়েট গ্রাফে শর্টেস্ট পাথ)

  4. ০-১ ন্যাপস্যাক সমস্যার পাইথন প্রোগ্রাম