I_P_W14_M04 Algorytm Euklidesa
Na szczęście proces wyznaczania NWD da się zoptymalizować. Przeanalizujmy zmodyfikowaną wersję algorytmu, tzw. obliczanie NWD metodą dzielenia z resztą.
Oto implementacja algorytmu w języku Python:
Wersja programu, która zlicza wykonane operacje, może wyglądać następująco:
Wyznaczmy NWD dla dużych argumentów funkcji. Okaże się, że liczba wykonywanych operacji jest bardzo mała:
Możemy obliczyć czas niezbędny do wyznaczenia NWD. Zdefiniujmy funkcję NWD_modulo_zliczanie_czas(x, y), która oprócz liczby operacji zmierzy także czas ich wykonania.
Specyfikacja problemu:
Dane:
x, y– liczby całkowite
Wynik:
NWD– liczba całkowita, największy wspólny dzielnik liczbxiydzielenia– liczba całkowita, liczba wykonanych operacjit– czas trwania programu; liczba rzeczywista
Możemy obliczyć NWD dla więcej niż dwóch liczb.
Obliczenie NWD dla trzech liczb odbywa się w dwóch etapach. Najpierw wyznaczamy NWD dla liczb pierwszej i drugiej oraz NWD liczb drugiej i trzeciej. Następnie obliczamy NWD dla otrzymanych wyników. Przedstawmy tę zasadę za pomocą pseudokodu: