Bird
Raised Fist0
DSA Pythonprogramming~10 mins

Fractional Knapsack Problem in DSA Python - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to calculate the value-to-weight ratio for each item.

DSA Python
ratio = items[i][[1]] / items[i][1]
Drag options to blanks, or click blank then click option'
A3
B1
C2
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Using weight index instead of value index for numerator.
2fill in blank
medium

Complete the code to sort items by their value-to-weight ratio in descending order.

DSA Python
items.sort(key=lambda x: x[0] / x[[1]], reverse=True)
Drag options to blanks, or click blank then click option'
A2
B0
C1
D3
Attempts:
3 left
💡 Hint
Common Mistakes
Sorting by value instead of ratio.
Using wrong index for weight.
3fill in blank
hard

Fix the error in the loop condition to stop when knapsack is full or all items are processed.

DSA Python
while W > 0 and [1] < n:
Drag options to blanks, or click blank then click option'
Ai
BW
Cvalue
Dweight
Attempts:
3 left
💡 Hint
Common Mistakes
Using W or value instead of loop index in condition.
4fill in blank
hard

Fill both blanks to add the full item value if it fits, else add fractional value.

DSA Python
if items[i][1] <= W:
    total_value += items[i][[1]]
    W -= items[i][[2]]
Drag options to blanks, or click blank then click option'
A0
B1
C2
D3
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping value and weight indices.
5fill in blank
hard

Fill all three blanks to add fractional value when item weight exceeds remaining capacity.

DSA Python
fraction = W / items[i][[1]]
total_value += items[i][0] * [2]
W -= W * [3]
Drag options to blanks, or click blank then click option'
A1
Bfraction
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong index for weight.
Not multiplying value by fraction.

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 taken, allowing fractions of items to fit within the weight limit.
  2. Step 2: Compare options

    Only Maximize total value by taking fractions of items within weight limit correctly describes maximizing value with fractional items. Others describe incorrect goals.
  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 value maximization with weight minimization
  • Ignoring the fractional part of items
2. Which of the following Python code snippets correctly sorts items by value-to-weight ratio for the fractional knapsack?
easy
A. items.sort(key=lambda x: x[0]/x[1], reverse=True)
B. items.sort(key=lambda x: x[1]/x[0], reverse=True)
C. items.sort(key=lambda x: x[1]+x[0], reverse=True)
D. items.sort(key=lambda x: x[0]-x[1], reverse=True)

Solution

  1. Step 1: Identify ratio for sorting

    Value-to-weight ratio is value divided by weight, so ratio = x[1]/x[0].
  2. Step 2: Check sorting code

    items.sort(key=lambda x: x[1]/x[0], reverse=True) sorts items by this ratio descending, which is correct for fractional knapsack.
  3. Final Answer:

    items.sort(key=lambda x: x[1]/x[0], reverse=True) -> Option B
  4. Quick Check:

    Sort by value/weight descending [OK]
Hint: Sort by value divided by weight, descending [OK]
Common Mistakes:
  • Reversing numerator and denominator
  • Sorting by sum or difference instead of ratio
  • Not using reverse=True for descending order
3. What is the output of this code snippet for fractional knapsack?
items = [(10, 60), (20, 100), (30, 120)]
capacity = 50
items.sort(key=lambda x: x[1]/x[0], reverse=True)
total_value = 0
for w, v in items:
    if capacity >= w:
        capacity -= w
        total_value += v
    else:
        total_value += v * (capacity / w)
        break
print(round(total_value, 2))
medium
A. 240.00
B. 220.00
C. 180.00
D. 200.00

Solution

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

    Ratios: (60/10)=6, (100/20)=5, (120/30)=4. Sorted order: (10,60), (20,100), (30,120).
  2. Step 2: Add items until capacity is full

    Take full 10 weight: value=60, capacity=40 left.
    Take full 20 weight: value=60+100=160, capacity=20 left.
    Take fraction of last item: fraction=20/30=2/3, value=160 + 120*(2/3)=160 + 80=240.
    But code prints rounded total_value after break, so total_value=240.
  3. Final Answer:

    240.00 -> Option A
  4. Quick Check:

    Sum values with fractions = 240.00 [OK]
Hint: Add full items first, then fraction of last item [OK]
Common Mistakes:
  • Not sorting items by ratio
  • Adding fractions incorrectly
  • Rounding errors
4. Find the error in this fractional knapsack code snippet:
def fractional_knapsack(items, capacity):
    items.sort(key=lambda x: x[0]/x[1], reverse=True)
    total_value = 0
    for w, v in items:
        if capacity >= w:
            capacity -= w
            total_value += v
        else:
            total_value += v * (capacity / w)
            break
    return total_value

print(fractional_knapsack([(10, 60), (20, 100), (30, 120)], 50))
medium
A. Function returns total_value before loop
B. Loop variables w and v are swapped
C. Capacity is not updated after taking fraction
D. Sorting ratio is reversed; should be value/weight, not weight/value

Solution

  1. Step 1: Check sorting key

    Sorting uses x[0]/x[1] which is weight/value, but ratio should be value/weight (x[1]/x[0]).
  2. Step 2: Verify other parts

    Loop variables and capacity update are correct; function returns after loop.
  3. Final Answer:

    Sorting ratio is reversed; should be value/weight, not weight/value -> Option D
  4. Quick Check:

    Sort by value/weight, not weight/value [OK]
Hint: Sort by value divided by weight, not the other way [OK]
Common Mistakes:
  • Using weight/value instead of value/weight for sorting
  • Swapping weight and value in loop
  • Not updating capacity after fraction
5. Given items with weights and values: [(5, 30), (10, 40), (15, 45)], and capacity 20, what is the maximum value achievable using fractional knapsack?
hard
A. 70.0
B. 75.0
C. 85.0
D. 80.0

Solution

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

    Ratios: (30/5)=6, (40/10)=4, (45/15)=3.
    Sorted order: (5,30), (10,40), (15,45).
  2. Step 2: Add items until capacity full

    Take full 5 weight: value=30, capacity=15 left.
    Take full 10 weight: value=30+40=70, capacity=5 left.
    Take fraction of last item: fraction=5/15=1/3, value=70 + 45*(1/3)=70 + 15=85.
  3. Final Answer:

    85.0 -> Option C
  4. Quick Check:

    Sum values with fractions = 85.0 [OK]
Hint: Take full items by ratio, then fraction last to fill capacity [OK]
Common Mistakes:
  • Not sorting by ratio
  • Taking items in wrong order
  • Calculating fraction incorrectly
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