PYI_R_W14_M37 Algorytmy zachłanne
Implementacja algorytmu wydawania reszty w języku Python
Zaimplementujemy funkcję zachlanne_wydawanie_reszty(), która dla zadanej reszty reszta_do_wydania zwróci liczbę monet lub banknotów z tablicy nominaly potrzebnych do jej wydania. Każdego nominału z tablicy nominaly możemy użyć dowolną liczbę razy.
Wykorzystamy uproszczony polski system monetarnysystem monetarny.
Specyfikacja:
Dane:
reszta_do_wydania– liczba naturalna; wartość reszty do wydanianominaly– tablica liczb naturalnych; tablica dostępnych nominałów posortowana malejąco
Wynik:
komunikat dotyczący wykorzystanych nominałów
Przykładowy komunikat:
Poniżej przedstawiono przykładową implementację algorytmu zachłannegoalgorytmu zachłannego, który może zostać wykorzystany do rozwiązania problemu. Funkcja zachlanne_wydawanie_reszty() przyjmuje dwa parametry:
reszta_do_wydania– wartość reszty do wydania,nominaly– tablica dostępnych nominałów posortowana malejąco,
Zmienna k wewnątrz pętli for przechowuje maksymalną liczbę powtórzeń danego nominału, przy pozostałej kwocie do wydania reszta_do_wydania. Wartość reszta_do_wydania jest zmniejszana o maksymalną wartość, którą można wydać danym nominałem. Algorytm zwraca liczbę monet lub banknotów użytych do wydania reszty o początkowej wartości reszta_do_wydania.
Przyjrzyjmy się innej implementacji funkcji zachlanne_wydawanie_reszty(), która w celu określenia liczby nominałów potrzebnej do wydania reszty reszta_do_wydania używa operacji dzielenia modulo. Możemy podzielić całkowicie resztę reszta_do_wydania przez dany nominał. Dzięki temu dowiemy się, ile sztuk danego nominału algorytm użyje do wydania reszty. Operacja modulo reszta_do_wydania %= nominal zwróci informację o tym, jaka kwota pozostała do wydania.
Nie możemy zapomnieć o przypadku, w którym reszta będzie liczbą zmiennoprzecinkową. W Polsce do wydawania reszty po przecinku używamy nominałów 50 gr, 20 gr, 10 gr, 5 gr, 2 gr, 1 gr. W przypadku języka Python, podczas wydawania reszty, należy pamiętać o niedokładnościach w reprezentacji liczb zmiennoprzecinkowych. Operacje na takich liczbach powodują pewne niedokładności. Dlatego, aby nasze obliczenia były precyzyjne, najłatwiej jest zamienić wszystkie nominały na grosze. W takiej sytuacji resztę 19,99 zł zamienimy na 1999 gr, co pozwoli na łatwe i dokładne określenie minimalnej liczby monet lub banknotów potrzebnych do wydania reszty.
Słownik
algorytm dokonujący na każdym kroku takiego wyboru, który wydaje się w danym momencie najlepszy; zakładając, że seria wszystkich kroków doprowadzi do wyniku globalnie optymalnego
podział określonej waluty na nominały o określonej wartości