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

Зміст курсу

Greedy Algorithms using Python

Greedy Algorithms using Python

1. Greedy Algorithms: Overview and Examples
2. Greedy on Arrays
3. Greedy on Graphs

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)).

Завдання

Add some code to the function and test it.

Завдання

Add some code to the function and test it.

Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів

Все було зрозуміло?

Секція 1. Розділ 5
toggle bottom row

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)).

Завдання

Add some code to the function and test it.

Завдання

Add some code to the function and test it.

Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів

Все було зрозуміло?

Секція 1. Розділ 5
toggle bottom row

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)).

Завдання

Add some code to the function and test it.

Завдання

Add some code to the function and test it.

Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів

Все було зрозуміло?

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)).

Завдання

Add some code to the function and test it.

Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Секція 1. Розділ 5
Перейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
We're sorry to hear that something went wrong. What happened?
some-alt