Greedy Algorithm for Egyptian Fraction

In early Egypt, people used to use only unit fraction (in the form of (1/n)) to represent the decimal numbers.


The fraction was always written in the form 1/n , where the numerator is always 1 and denominator is a positive number. All other fractions were represented as the summation of the unit fractions. For example, 3/4 = 1/2 1/4.


Given a positive fraction, write it in the form of summation of unit fractions.


Example:
2/3 = 1/2 1/6
6/14 = 1/3 1/11 1/231
12/13 = 1/2 1/3 1/12 1/156

Greedy Solution:


For a given number of the form ‘nr/dr’ where dr > nr, first find the greatest possible unit fraction, then call the function recursively for the remaining part.


For example, consider 6/14. First find ceiling of 14/6, i.e., 3. The first unit fraction becomes 1/3.


The remaining fraction is 6/14 – 1/3 = 4/42. Now repeat the same algorithm for 4/42. The ceiling of 42/4 is 11. So the next unit fraction is 1/11.


Now we are left with 4/42 – 1/11 = 1/231. This is a unit fraction itself. So we stop the recursion. We stop when the result is a unit fraction.


6/14 = 1/3 1/11 1/231


class Egyptian Fraction
{
static void printEgyptian(int nr, int dr)
{
if (0 == nr || 0 == dr)
return;

// IF nr IS MULTIPLE OF nr. THEN NOT A FRACTION
if (nr % dr == 0)
{
System.out.print(nr / dr);
return;
}

// IF ALREADY A UNIT FRACTION. OR CAN BE DIRECTLY CONVERTED TO IT.
// i.e dr divisible by nr
if (dr % nr == 0)
{
System.out.print("1/" dr / nr);
return;
}

if (nr > dr)
{
System.out.print(nr / dr " ");
printEgyptian(nr % dr, dr);
return;
}

// PRINT ceiling(dr/nr) AS CURRENT FRACTION
int n = dr/nr 1;
System.out.print("1/" n " ");

// Recur for remaining part
printEgyptian(nr * n - dr, dr * n);
}
}

Note that there exists multiple solution to the same fraction. For example:


3/4 =  1/2   1/4


3/4 =  1/2   1/5  1/20

 •  0 comments  •  flag
Share on Twitter
Published on April 28, 2020 23:56
No comments have been added yet.