Przeczytaj
Potęgowanie liczb według definicji
Załóżmy, że chcemy podnieść liczbę do potęgi . Aby wykonać to działanie, należy obliczyć iloczyn czynników o wartości podstawy, czyli .
Na przykład:
Iloczyn tych liczb można obliczyć za pomocą algorytmu iteracyjnegoiteracyjnego oraz rekurencyjnegorekurencyjnego.
Specyfikacja problemu:
Dane:
n
– liczba naturalna; wykładnik potęgia
– liczba całkowita różna od zera; podstawa potęgi
Wynik:
Algorytm wypisuje wynik potęgowania .
Na początek przeanalizujmy schemat blokowy algorytmu w wersji iteracyjnej.
Wykonanych zostanie iteracji pętli, w których będą przeprowadzane operacje mnożenia aktualnej potęgi przez podstawę . Zatem złożoność czasowa algorytmu potęgowania liczb według definicji wyrażona jako liczba wykonanych mnożeń wynosi .
Algorytm ten możemy przedstawić także za pomocą pseudokodu. W tym celu wykorzystamy instrukcję iteracyjną dla wykonuj
. Wewnątrz pętli umieścimy operację mnożenia aktualnej potęgi przez wartość podstawy potęgi.
Szybkie potęgowanie liczb
Istnieje szybszy sposób potęgowania liczb od potęgowania według definicji.
Wersja iteracyjna szybkiego potęgowaniaszybkiego potęgowania oparta jest na dwójkowej reprezentacji wykładnika. Weźmy działanie . Liczba w systemie dwójkowymsystemie dwójkowym to:
Możemy zapisać wartość tego wykładnika, korzystając ze schematu Hornera:
Metoda polega na pobieraniu kolejnych cyfr wykładnika zapisanego w systemie dwójkowym, zaczynając od lewej strony. Jeżeli ta cyfra ma wartość:
– to aktualny wynik podnoszony jest do potęgi drugiej,
– to aktualny wynik podnoszony jest do potęgi drugiej, a następnie mnożony jest przez podstawę.
Specyfikacja problemu:
Dane:
n
– liczba naturalna w postaci binarnej ; wykładnik potęgix
– liczba naturalna; liczba bitów w reprezentacji binarnej liczbyn
a
– liczba całkowita; podstawa potęgi
Wynik:
Algorytm zwraca wynik potęgowania .
Powyższa metoda oparta jest na dwójkowej reprezentacji wykładnika. Liczby w systemie dwójkowym tworzone są od strony prawej (od najmniej znaczącego bitu), zatem jeżeli chcemy dotrzeć do poszczególnych bitów wykładnika zaczynając od lewej strony, należy najpierw użyć algorytmu konwersji liczby z systemu dziesiętnego na system binarny.
Analizując powyższy pseudokod algorytmu szybkiego potęgowania od lewej do prawej, możemy zauważyć, że liczba mnożeń zależna jest od liczby bitów w binarnej reprezentacji wykładnika. Złożoność algorytmu wynosi .
Obie zaprezentowane metody mają swoje wersje rekurencyjne. Ich omówienie oraz porównanie z wersjami iteracyjnymi znajdziesz w e‑materiale Analiza podejścia rekurencyjnego i iteracyjnegoAnaliza podejścia rekurencyjnego i iteracyjnego.
Zapisz zaprezentowane w e‑materiale algorytmy, wykorzystując wybrany język programowania.
Słownik
technika programowania polegająca na odwoływaniu się procedur lub funkcji do samych siebie, aż do momentu spełnienia warunku podstawowego
technika programowania polegająca na powtarzaniu tych samych operacji w pętli określoną liczbę razy lub do momentu, aż zostanie spełniony zadany warunek
sposób obliczania wartości wielomianu dla danej wartości argumentu wykorzystujący minimalną liczbę mnożeń
pozycyjny system liczbowy; sposób zapisywania liczb, w którym potrzebne są tylko dwie cyfry: i , a podstawą tego systemu jest liczba
algorytm pozwalający na szybkie obliczenie potęgi liczby; wykorzystuje wykładnik zapisany w systemie dwójkowym