Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Fractional Knapsack Problem in DSA Javascript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Fractional Knapsack Problem?
It is a problem where you have a knapsack with a weight limit and items with weights and values. You can take fractions of items to maximize the total value without exceeding the weight limit.
Click to reveal answer
beginner
Why can we take fractions of items in the Fractional Knapsack Problem but not in the 0/1 Knapsack Problem?
Because the problem allows splitting items into smaller parts, so you can take any fraction of an item. In 0/1 Knapsack, items must be taken whole or not at all.
Click to reveal answer
intermediate
What is the main strategy used to solve the Fractional Knapsack Problem?
Use a greedy approach: sort items by value per weight (value/weight) in descending order, then take as much as possible from the highest ratio items until the knapsack is full.
Click to reveal answer
beginner
How do you calculate the value per weight ratio for an item?
Divide the item's value by its weight: ratio = value / weight. This helps decide which items to pick first.
Click to reveal answer
intermediate
What is the time complexity of the Fractional Knapsack Problem solution using the greedy approach?
O(n log n) because sorting the items by their value/weight ratio takes O(n log n), and then selecting items takes O(n).
Click to reveal answer
In the Fractional Knapsack Problem, what do you sort the items by?
AValue per weight ratio in descending order
BWeight in ascending order
CValue in ascending order
DWeight per value ratio in descending order
Can you take a part of an item in the Fractional Knapsack Problem?
AYes, you can take any fraction
BNo, items must be taken whole
COnly half of an item
DOnly if the item weight is less than the knapsack capacity
What is the main difference between Fractional Knapsack and 0/1 Knapsack?
ABoth allow splitting items
BFractional allows splitting items; 0/1 does not
C0/1 allows splitting items; Fractional does not
DNeither allows splitting items
What is the greedy choice in the Fractional Knapsack Problem?
APick the heaviest items first
BPick items randomly
CPick items with the lowest value first
DPick items with the highest value per weight first
What is the time complexity of the Fractional Knapsack solution?
AO(n)
BO(n^2)
CO(n log n)
DO(log n)
Explain how the greedy approach solves the Fractional Knapsack Problem step-by-step.
Think about how to maximize value by picking the best items first.
You got /6 concepts.
    Describe the difference between Fractional Knapsack and 0/1 Knapsack problems.
    Focus on item selection rules and solution methods.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main goal of the Fractional Knapsack Problem?
      easy
      A. Maximize total value by taking fractions of items within weight limit
      B. Maximize total weight without considering value
      C. Select only whole items to maximize value
      D. Minimize the number of items selected

      Solution

      1. Step 1: Understand the problem goal

        The fractional knapsack problem allows taking parts of items to maximize total value within a weight limit.
      2. Step 2: Compare options

        Maximize total value by taking fractions of items within weight limit correctly states maximizing value by taking fractions. Others ignore fractions or value maximization.
      3. Final Answer:

        Maximize total value by taking fractions of items within weight limit -> Option A
      4. Quick Check:

        Fractional knapsack = maximize value with fractions [OK]
      Hint: Remember: fractions allowed to maximize value [OK]
      Common Mistakes:
      • Thinking only whole items can be taken
      • Ignoring value and focusing on weight
      • Confusing with 0/1 knapsack problem
      2. Which of the following JavaScript code snippets correctly sorts items by value-to-weight ratio for the fractional knapsack?
      easy
      A. items.sort((a, b) => (b.value / b.weight) - (a.value / a.weight));
      B. items.sort((a, b) => (a.weight / a.value) - (b.weight / b.value));
      C. items.sort((a, b) => a.value - b.value);
      D. items.sort((a, b) => a.weight - b.weight);

      Solution

      1. Step 1: Identify sorting criteria

        We must sort items by descending value-to-weight ratio (value/weight) to pick best items first.
      2. Step 2: Check each code snippet

        items.sort((a, b) => (b.value / b.weight) - (a.value / a.weight)); sorts descending by (value/weight). Others sort incorrectly by inverse or by value or weight alone.
      3. Final Answer:

        items.sort((a, b) => (b.value / b.weight) - (a.value / a.weight)); -> Option A
      4. Quick Check:

        Sort by descending value/weight ratio [OK]
      Hint: Sort items by (value/weight) descending [OK]
      Common Mistakes:
      • Sorting by weight or value alone
      • Sorting ascending instead of descending
      • Using inverse ratio (weight/value)
      3. What is the output of the following JavaScript code?
      const items = [
        {value: 60, weight: 10},
        {value: 100, weight: 20},
        {value: 120, weight: 30}
      ];
      const capacity = 50;
      
      function fractionalKnapsack(items, capacity) {
        items.sort((a, b) => (b.value / b.weight) - (a.value / a.weight));
        let totalValue = 0;
        let remaining = capacity;
        for (const item of items) {
          if (item.weight <= remaining) {
            totalValue += item.value;
            remaining -= item.weight;
          } else {
            totalValue += item.value * (remaining / item.weight);
            break;
          }
        }
        return totalValue;
      }
      
      console.log(fractionalKnapsack(items, capacity));
      medium
      A. 220
      B. 240
      C. 180
      D. 200

      Solution

      1. Step 1: Sort items by value/weight ratio

        Ratios: 60/10=6, 100/20=5, 120/30=4. Sorted order: item1, item2, item3.
      2. Step 2: Add items until capacity 50

        Take item1 fully (weight 10, value 60), remaining 40.
        Take item2 fully (weight 20, value 100), remaining 20.
        Take fraction of item3: (20/30)*120 = 80.
        Total value = 60 + 100 + 80 = 240.
      3. Final Answer:

        240 -> Option B
      4. Quick Check:

        Sum values with fractions = 240 [OK]
      Hint: Sort by ratio, take full items, then fraction [OK]
      Common Mistakes:
      • Not sorting by ratio correctly
      • Taking items without fractions
      • Miscomputing fraction value
      4. Find the error in this fractional knapsack code snippet:
      function fractionalKnapsack(items, capacity) {
        items.sort((a, b) => (a.value / a.weight) - (b.value / b.weight));
        let totalValue = 0;
        let remaining = capacity;
        for (const item of items) {
          if (item.weight <= remaining) {
            totalValue += item.value;
            remaining -= item.weight;
          } else {
            totalValue += item.value * (remaining / item.weight);
            break;
          }
        }
        return totalValue;
      }
      medium
      A. Incorrect fraction calculation formula
      B. Using 'let' instead of 'const' for totalValue
      C. Missing return statement
      D. Sorting is ascending; should be descending by value/weight ratio

      Solution

      1. Step 1: Analyze sorting order

        The code sorts items ascending by value/weight ratio, but we need descending to pick best items first.
      2. Step 2: Check other parts

        Return statement exists, fraction formula is correct, 'let' is appropriate for totalValue.
      3. Final Answer:

        Sorting is ascending; should be descending by value/weight ratio -> Option D
      4. Quick Check:

        Sort descending by ratio to maximize value [OK]
      Hint: Sort descending by value/weight ratio [OK]
      Common Mistakes:
      • Sorting ascending instead of descending
      • Ignoring fraction calculation correctness
      • Confusing variable declarations
      5. Given items with values and weights:
      items = [
        {value: 40, weight: 2},
        {value: 100, weight: 20},
        {value: 50, weight: 10},
        {value: 60, weight: 12}
      ];
      capacity = 30;

      What is the maximum total value achievable using the fractional knapsack approach?
      hard
      A. 190
      B. 160
      C. 180
      D. 200

      Solution

      1. Step 1: Calculate value/weight ratios and sort descending

        Ratios:
        Item1: 40/2=20
        Item2: 100/20=5
        Item3: 50/10=5
        Item4: 60/12=5
        Sorted order: Item1, then Items 2,3,4 (equal ratio 5).
      2. Step 2: Pick items until capacity 30

        Take Item1 fully: weight 2, value 40, remaining 28.
        Next, take Item2 fully: weight 20, value 100, remaining 8.
        Then take fraction of Item3: fraction = 8/10 = 0.8, value = 50 * 0.8 = 40.
        Total value = 40 + 100 + 40 = 180.
      3. Step 3: Check if taking Item4 fraction is better

        Item4 has same ratio as Item3, but we already used remaining capacity on Item3 fraction.
        So total value remains 180.
      4. Final Answer:

        180 -> Option C
      5. Quick Check:

        Sum values with fractions = 180 [OK]
      Hint: Pick highest ratio items first, then fractions [OK]
      Common Mistakes:
      • Ignoring highest ratio item first
      • Not taking fractions correctly
      • Adding values without considering capacity
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard