I_P_W14_M04 Algorytm Euklidesa
Przeanalizujmy działanie algorytmu Euklidesa w wersji z odejmowaniem. Oto jego realizacja w języku Python:
Wyznaczmy przykładowe NWD, używając powyżej zdefiniowanej funkcji:
Spróbujmy wykorzystać tę metodę w przypadku dużych liczb. W języku Python istnieje ograniczenie maksymalnej wartości typu int. Możemy to sprawdzić, wywołując odpowiednie właściwości modułów sys oraz platform:
Zatem największą liczbą całkowitą, którą możemy podać w 64‑bitowym systemie Linux, jest:
Oto wersja programu, która liczy, ile operacji odejmowania należy wykonać podczas wyznaczania NWD:
Wyznaczmy NWD dla liczb o wiele mniejszych niż maksymalna wartość int zapisana w 64‑bitowym systemie Linux:
Niewykluczone, że obliczenia zajmą ponad minutę. W przypadku bardzo dużych liczb program uruchomiony na szybkim komputerze mógłby pracować nawet kilkadziesiąt minut (ze względu na dużą liczbę operacji odejmowania). Przedstawiamy obraz z Monitora systemu – pokazuje on, że nawet proste obliczenia potrafią obciążać procesor:

Możemy zmierzyć czas niezbędny do obliczenia NWD. Spróbujmy napisać funkcję NWD_odejmowanie_zliczanie_czas(x, y), która oprócz liczby odejmowań poda czas niezbędny do ich wykonania.
Specyfikacja problemu:
Dane:
x, y– liczby całkowite
Wynik:
NWD– liczba całkowita, największy wspólny dzielnik liczbxiyodejmowania– liczba całkowita, liczba wykonanych operacjit– czas trwania programu; liczba rzeczywista
Słownik
operacja wyznaczania reszty z dzielenia dwóch liczb; działanie takie oznaczane jest w Pythonie operatorem %
upraszczanie procesu, poszukiwanie najlepszego rozwiązania z punktu widzenia pewnego kryterium, np. liczby wykonywanych operacji przez procesor czy czasu niezbędnego do przeprowadzonych działań lub ilości zajmowanej pamięci