Problem wydawania reszty
Problem wydawania reszty – zagadnienie z dziedziny algorytmiki, problem polegający na wybraniu z danego zbioru monet o określonych nominałach
takiej konfiguracji, by wydać żądaną kwotę przy użyciu minimalnej
liczby monet. Jego rozwiązania są wykorzystywane w automatach z
napojami, bankomatach itd.
Przykładowe zadanie
Dane są trzy nominały – 1 zł, 2 zł i 5 zł. Ile minimalnie monet potrzeba, by wydać 13 zł?
Rozwiązanie
Poniżej pokazano dwa popularne rozwiązania tego problemu dla wariantu
problemu, w którym zakłada się dostępność dowolnej liczby monet każdego
nominału: jedno przy pomocy algorytmu zachłannego, drugie z wykorzystaniem programowania dynamicznego.
- Niech:
- k – żądana kwota; wg przykładu 13
- n – największy element zbioru nominałów
- x – liczba potrzebnych monet; początkowo 0
Algorytm zachłanny
Algorytm zachłanny jest poprawny dla tego problemu w większości stosowanych obecnie systemów monetarnych, jednak nie działa np. dla systemu (1, 4, 5) (kontrprzykładem jest kwota 8).
W tym przypadku, algorytm będzie wartość:
- k – w każdym kroku pomniejszał o n
- n – porównywał z wartością k, by stwierdzić, czy jest ona mniejsza lub równa
- x – w każdym kroku zwiększał o 1
Algorytm odejmuje od zadanej kwoty największy spośród nominałów
mniejszych i równych kwocie. Następnie, o ile kwota jest większa od
zera, powtarza czynność. Liczba powtórzeń jest liczbą potrzebnych monet.
Dla powyższego przykładu algorytm zadziała następująco:
k | 13 | 8 | 3 | 1 | |
n | 5 | 5 | 2 | 1 | |
x | 1 | 2 | 3 | 4 |
Zaletą powyższego algorytmu jest szybkość i prostota implementacji.
Palindrom
Palindrom (gr. palindromeo – biec z powrotem) – wyrażenie brzmiące tak samo czytane od lewej do prawej i od prawej do lewej. Przykładem palindromu jest: Kobyła ma mały bok.
Współcześnie palindromy pełnią funkcję gry słownej. Prawdopodobnie tak
było również i w przeszłości, choć pewne znaleziska sugerują, że
palindromy mogły też mieć znaczenie magiczne.
Anagram
Anagram – nazwa wywodząca się od słów greckich: ana- (nad) oraz grámma (litera), oznacza wyraz, wyrażenie lub całe zdanie powstałe przez przestawienie liter bądź sylab innego wyrazu lub zdania, wykorzystujące wszystkie litery
(głoski bądź sylaby) materiału wyjściowego. W czasopismach
szaradziarskich pojawiają się zadania polegające na odgadnięciu
wykreskowanego anagramu na podstawie wierszowanego komentarza, a także
anagramy rysunkowe polegające na ułożeniu hasła z wszystkich liter
właściwego określenia rysunku. Formami spokrewnionymi z anagramem są stenoanagram, egzoanagram i endoanagram.
Najprostszy anagram to poukładanie liter w odwrotnej kolejności, np. kebab – babek. Przykładem jednego z prostych przestawień jest zamiana sylab w wyrazie ranty, dająca anagram: tyran. Przestawiając pojedyncze litery możemy otrzymać np. anagram narty.
W 1998 Barbara i Adam Podgórscy w swoim Vademecum szaradzisty (Wydawnictwo Kurpisz) jako rekordowy podało anagram złożony z 16 elementów: krasa, Arska, raska, sarka, askar, kasar, Raksa, sakra, Arkas, Araks, Karsa, rakas, Karas, Sakar, Skara,
Askra. Nie należy go jednak traktować jako niezmiennik, ponieważ
przybywa zarówno słów, jak i metod wyszukiwania. Już choćby w podanym
„rekordzie” dociekliwy czytelnik zauważy brak jednego potocznego
wulgaryzmu oraz słowa Ksara.
Brak komentarzy:
Prześlij komentarz