[ALGO] Water jugs problem

Suppose that you are given 'n' red and 'n' blue water jugs, all of different shapes and sizes. All red jugs hold different amounts of water, as do the blue ones. For every red jug, there is a blue jug that holds the same amount of water & vice versa.

How can you find the grouping of the jugs into pairs of red & blue jugs that hold the same amount of water, in the minimum number of comparisons.

Operations allowed
  1. always compare between a red and a blue jar (no two reds, no two blues)
  2. fill water in red / blue jug
  3. pour from red jug to blue (& vice versa). This will help compare the capacity of the jugs.
Source : Introduction to Algorithms (by Cormen..., Problem 8-4)


Madan Kumar said...

A simple solution similar to quick sort will do.

Take a red jar. Pour water into blue jars and categorize the blue jars into 3.

Category 1: Volume(Blue) < Volume(Red)
Category 2: Volume(Blue) = Volume(Red)
Category 3: Volume(Blue) > Volume(Red)

There is going to be only one blue jar matching red one.

Now take another red jar. find out whether this one is larger or smaller to the earlier one (by pouring water).

In case the newer red jar is smaller, try to find the match only with the smaller blue jars. Vice versa for larger.


Niko said...

How would you propose we find out whether the newer red jar is larger or smaller than the previous one if you cannot pour water from one red jar into another?

Niko said...

Ah, I see.. Since the first red = first blue we just compare the next red to the first blue to determine whether its larger or smaller than the earlier one. Got it, thanks!