Interviews Questions, Algorithms, Aptitude, C Interview Program, C Theory Question, Aptitude Tricks, Test Series,

Showing posts with label KnapSack. Show all posts
Showing posts with label KnapSack. Show all posts

Wednesday, 27 March 2019

KnapSack Problem

ALGORITHM Knapsack(i, j)

//Implements the memory function method for the knapsack problem
//Input: A nonnegative integerindicating the number of the first
// items being considered and a nonnegative integer indicating
 the knapsack capacity

//Output: The value of an optimal feasible subset of the firstitems
//Note: Uses as global variables input arrays
W eights[1..n], V alues[1..n],
//and table [0..n, 0..W] whose entries are initialized with -1’s except for
//row 0 and column 0 initialized with 0’s



if [i, j0

if j < Weights[i]
value ← Knapsack(i 1, j)


else 
value ← max(Knapsack(i 1, j),


Values[iKnapsack(i 1, j Weights[i]))

[i, j← value


return [i, j] 

C program:

#include<stdio.h>
int high=0,low=0,ma=0;
int max(int a, int b)
 { return (a > b)? a : b; }


int knapSack(int W, int wt[], int val[], int n)

{
   int i, w;

   int K[n+1][W+1];


   for (i = 0; i <= n; i++)

  {

  for (w = 0; w <= W; w++)

  {

    if (i==0 || w==0)

            K[i][w] = 0;

        else if (wt[i-1] <= w)
             {
                 K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]],  K[i-1][w]);
            }
           else{

 K[i][w] = K[i-1][w];
  }
 if(K[i][w]>ma)
               {
                   ma=K[i][w];
                   high=i;
               }

  }
  }


  return K[n][W];

}


int main()

{

   int i,a,n, val[20], wt[20], W;


    printf("Enter number of items:");

  scanf("%d", &n);

   for(i = 0;i < n; ++i)
{
printf("Enter value  of items %d:\n",i+1);
        scanf("%d", &val[i]);
printf("Enter weight  of items %d:\n",i+1);
scanf("%d",&wt[i]);
    }


printf("Enter size of knapsack:");

 scanf("%d", &W);
printf("-------------------------\n");
printf("|Item no| value  |Weight|\n");
 for(i=0;i<n;i++)
 {
printf("|%d      |%d       |%d     |\n",i+1,val[i],wt[i]);

 }
printf("-------------------------\n");

int value=knapSack(W, wt, val, n);
a=value-val[high];
    printf("the total valued gained in knapSack=%d\n", value);
 for(i = 0;i < n; ++i)
{
 if(a==val[i])
 {
     low=i;
break;
  }
}
    printf("%d %d",high,low+1);
      return 0;

}


Output:

Enter number of items:4
Enter value  of items 1:
20
Enter weight  of items 1:
2
Enter value  of items 2:
30
Enter weight  of items 2:
3
Enter value  of items 3:
40
Enter weight  of items 3:
4
Enter value  of items 4:
50
Enter weight  of items 4:
5
Enter size of knapsack:5
-------------------------
|Item no| value  |Weight|
|1      |20       |2     |
|2      |30       |3     |
|3      |40       |4     |
|4      |50       |5     |
-------------------------
the total valued gained in knapSack=50
2 1