Bird
Raised Fist0
DSA Rustprogramming~5 mins

Fractional Knapsack Problem in DSA Rust - 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 use a greedy approach for the Fractional Knapsack Problem?
Because taking the item with the highest value per weight first always leads to the optimal solution when fractions are allowed.
Click to reveal answer
beginner
What is the main difference between the 0/1 Knapsack and Fractional Knapsack problems?
In 0/1 Knapsack, you must take the whole item or leave it. In Fractional Knapsack, you can take any fraction of an item.
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: value_per_weight = value / weight.
Click to reveal answer
intermediate
What is the time complexity of the greedy solution for the Fractional Knapsack Problem?
O(n log n) because we sort the items by their value per weight ratio before selecting them.
Click to reveal answer
In the Fractional Knapsack Problem, what is the best strategy to maximize value?
APick the heaviest items first
BPick items with the highest value per weight first
CPick items with the lowest value first
DPick items randomly
Can you take part of an item in the Fractional Knapsack Problem?
AOnly if the item weight is less than the knapsack capacity
BNo, only whole items can be taken
CYes, fractions of items are allowed
DOnly if the item value is high
What is the main step before selecting items in the Fractional Knapsack algorithm?
ASort items by value per weight ratio
BSort items by weight
CSort items by value
DNo sorting needed
What happens if the knapsack capacity is reached while taking an item fraction?
ATake only the fraction that fits
BSkip the item completely
CRemove previously taken items
DIncrease knapsack capacity
What is the time complexity of sorting items in the Fractional Knapsack Problem?
AO(n^2)
BO(n)
CO(log n)
DO(n log n)
Explain how the greedy algorithm solves the Fractional Knapsack Problem step-by-step.
Think about choosing items that give the most value for each unit of weight.
You got /6 concepts.
    Describe the difference between 0/1 Knapsack and Fractional Knapsack problems and why greedy works only for one.
    Focus on the ability to take parts of items.
    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. Minimize total weight by selecting whole items only
      C. Maximize number of items regardless of weight
      D. Select items randomly without considering value or weight

      Solution

      1. Step 1: Understand problem objective

        The fractional knapsack problem aims to maximize the total value of items placed in a knapsack without exceeding its weight capacity.
      2. Step 2: Recognize fractional selection

        Unlike the 0/1 knapsack, it allows taking fractions of items to fill the knapsack optimally.
      3. Final Answer:

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

        Goal = maximize value with fractions [OK]
      Hint: Remember: fractional means partial items allowed [OK]
      Common Mistakes:
      • Thinking only whole items can be taken
      • Confusing with minimizing weight
      • Ignoring value-to-weight ratio
      2. Which Rust code snippet correctly defines a struct to represent an item with weight and value for the fractional knapsack?
      easy
      A. struct Item { weight: usize, value: bool }
      B. struct Item { weight: f64, value: f64 }
      C. struct Item { weight: String, value: String }
      D. struct Item(weight: i32, value: i32);

      Solution

      1. Step 1: Identify correct struct syntax

        Rust structs use curly braces with field names and types, e.g., struct Item { weight: f64, value: f64 }.
      2. Step 2: Check field types for fractional knapsack

        Weights and values can be fractional, so f64 (floating-point) is appropriate.
      3. Final Answer:

        struct Item { weight: f64, value: f64 } -> Option B
      4. Quick Check:

        Correct struct syntax with f64 fields [OK]
      Hint: Use f64 for fractional weights and values [OK]
      Common Mistakes:
      • Using tuple struct syntax incorrectly
      • Using integer or wrong types for fractional values
      • Using incompatible types like String or bool
      3. What is the output of this Rust code snippet that calculates maximum value for fractional knapsack?
      struct Item { weight: f64, value: f64 }
      
      fn fractional_knapsack(items: &mut Vec<Item>, capacity: f64) -> f64 {
          items.sort_by(|a, b| (b.value / b.weight).partial_cmp(&(a.value / a.weight)).unwrap());
          let mut total_value = 0.0;
          let mut remaining = capacity;
          for item in items.iter() {
              if item.weight <= remaining {
                  total_value += item.value;
                  remaining -= item.weight;
              } else {
                  total_value += item.value * (remaining / item.weight);
                  break;
              }
          }
          total_value
      }
      
      fn main() {
          let mut items = vec![
              Item { weight: 10.0, value: 60.0 },
              Item { weight: 20.0, value: 100.0 },
              Item { weight: 30.0, value: 120.0 },
          ];
          let capacity = 50.0;
          let max_value = fractional_knapsack(&mut items, capacity);
          println!("{:.2}", max_value);
      }
      medium
      A. 180.00
      B. 220.00
      C. 200.00
      D. 240.00

      Solution

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

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

        Add Item1 fully (weight 10, value 60), remaining 40.
        Add Item2 fully (weight 20, value 100), remaining 20.
        Add fraction of Item3: fraction = 20/30 = 2/3, value = 120 * 2/3 = 80.
        Total value = 60 + 100 + 80 = 240.
      3. Final Answer:

        240.00 -> Option D
      4. Quick Check:

        Sum values with fractions = 240.00 [OK]
      Hint: Sort by value/weight ratio, fill capacity greedily [OK]
      Common Mistakes:
      • Not sorting items by ratio
      • Taking whole items only
      • Incorrect fraction calculation
      4. Identify the bug in this Rust function for fractional knapsack:
      fn fractional_knapsack(items: &mut Vec<Item>, capacity: f64) -> f64 {
          items.sort_by(|a, b| (a.value / a.weight).partial_cmp(&(b.value / b.weight)).unwrap());
          let mut total_value = 0.0;
          let mut remaining = capacity;
          for item in items.iter() {
              if item.weight <= remaining {
                  total_value += item.value;
                  remaining -= item.weight;
              } else {
                  total_value += item.value * (remaining / item.weight);
                  break;
              }
          }
          total_value
      }
      medium
      A. Sorting order is ascending, should be descending by value/weight
      B. Using iter() instead of into_iter() causes ownership error
      C. Incorrect calculation of fractional value inside else block
      D. Missing return statement at the end of function

      Solution

      1. Step 1: Check sorting comparator

        The code sorts by (a.value / a.weight).partial_cmp(&(b.value / b.weight)), which sorts ascending by ratio.
      2. Step 2: Correct sorting order for greedy approach

        Fractional knapsack requires descending order by value/weight ratio to pick highest value items first.
      3. Final Answer:

        Sorting order is ascending, should be descending by value/weight -> Option A
      4. Quick Check:

        Sort descending by ratio for max value [OK]
      Hint: Sort descending by value/weight ratio, not ascending [OK]
      Common Mistakes:
      • Sorting ascending instead of descending
      • Confusing iter() and into_iter() ownership
      • Miscomputing fractional value
      5. Given items with weights and values:
      [(5, 30), (10, 40), (15, 45)] and knapsack capacity 20, what is the maximum value using fractional knapsack?
      hard
      A. 70
      B. 80
      C. 85
      D. 75

      Solution

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

        Ratios: 30/5=6, 40/10=4, 45/15=3.
        Sorted order: (5,30), (10,40), (15,45).
      2. Step 2: Fill knapsack capacity 20 greedily

        Take full (5,30), remaining 15, total value 30.
        Take full (10,40), remaining 5, total value 70.
        Take fraction of (15,45): fraction = 5/15 = 1/3, value = 45 * 1/3 = 15.
        Total value = 70 + 15 = 85.
      3. Step 3: Verify options

        85 is 85, matching calculation.
      4. Final Answer:

        85 -> Option C
      5. Quick Check:

        Greedy fill with fractions = 85 [OK]
      Hint: Sort by ratio, fill capacity fully, then fractionally [OK]
      Common Mistakes:
      • Not sorting by ratio
      • Taking items in wrong order
      • Incorrect fraction calculation
      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