Naiwne obliczanie xn polega na wykonaniu aż n−1 mnożeń. Jednak można tę liczbę operacji skrócić. Wystarczy, że będziemy podstawę potęgi podnosić do kwadratu jak najdłużej, gdy wartość wykładnika przekroczy n, to wykorzystujemy wcześniej obliczone wartości.
Przykład
Obliczyć 2112⋅2=22=4
(22)2=24=16
(24)2=28=256
Kolejne podniesienie do kwadratu przekroczy 10, więc nie podnosimy dalej, tylko mnożymy przez wcześniej obliczone potęgi.
211=28⋅22⋅2=256⋅4⋅2=2048
Liczba mnożeń w tym przypadku wynosi 5, zamiast 10.
Rząd wielkości liczby operacji jest potęgą dwójki
2k=n
n=⌊log2(n)⌋
Jest to jest złożoność logarytmiczna, co w porównaniu do poprzedniej naiwnej metody o złożoności liniowej jest szokującym wynikiem. Wystarczy porównać wykresy funkcji liniowej i logarytmicznej, żeby zauważyć, że funkcja logarytmiczna rośnie tym wolniej im większe n i dużo wolniej od funkcji liniowej, która rośnie proporcjonalnie do n.
Jak nauczyć tej metody komputer?
Obliczamy metodą szybkiego potęgowania, tak jak poprzednio: x11=((x2)2)2⋅x2⋅x1=x8+2+1=x23+21+20=x(1011)2
Algorytm szybkiego potęgowania sprowadza się do przedstawienia wykładnika potęgi do postaci binarnej i wykonaniu odpowiednich mnożeń.
Postępujemy według pseudokodu:
Ustawmy wynik = 1: jeśli kolejny bit jest równy 0 (licząc od prawej), podstawę nadpisujemy jej kwadratem jeśli kolejny bit jest równy 1 wynik przemnażamy przez aktualną wartość podstawy, a podstawę nadpisujemy jej kwadratem. Czynności powtarzamy do wyczerpania bitów w liczbie.Znając efektywny algorytm zapisu wykładnika potęgi w postaci binarnej i stosując powyższy algorytm łatwo zaprogramujemy metodę szybkiego potęgowania w dowolnym języku programowania.