Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Egyptian Fraction Problem | Greedy Algorithms: Overview and Examples
Greedy Algorithms using Python

book
Egyptian Fraction Problem

Ancient Egyptians represented each positive fraction as the sum of unique unit fractions. For example, 7/15 = 1/3 + 1/8 + 1/120, or 2/3 = 1/2 + 1/6, or 1/7 = 1/7.

So, your goal is to find such a representation for the number n/m, m, n>0.

That can be reached by using the Greedy Approach. Each time, try to “bite” the number as big as possible to reduce the current value. Let’s look at the 7/15:

  • N = 7/15 >= 1/3 – this is the maximum unit fraction we can reach, add it to the answer.

  • Now, update the number we’re solving problem for: N = 7/15 – 1/3 = 2/15.

  • N = 2/15 >= 1/8 – next maximum unit fraction, add to the answer.

  • Update N: N = 2/15 – 1/8 = 1/120.

  • N = 1/120 >= 1/120 - add to the answer.

  • Update N = 0 -> stop the algorithm.

So, to sum up:

  1. Check if the current N == 0. If it is, stop the algorithm.

  2. Find the biggest unit fraction less than N and add it to the ans

  3. Update value of N by reducing.

The answer is an array f of numbers f[0], f[1], ... , f[t], where f[i] is a divider for fraction 1/f[i]. For our example, answer is [3, 8, 120].

How to find the biggest possible unit fraction It can be easily done for N = n/m by calculating k = math.ceil(m/n). Greater values of k do not give the maximum unit fraction (since, for example, 1/k > 1/(k+1)).

Aufgabe

Swipe to start coding

Add some code to the function and test it.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 5
import math

def fraction(n, m): # N = n/m
f = []
while n>0:
# find the closest k
k =
# add k to the array
# update n
n = (n*k - m)/k
return f

print(fraction(7, 15))

Fragen Sie AI

expand
ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

some-alt