== Zadanie 1 (Obliczanie wartości wielomianu w
punktach) ==
Zaproponuj algorytm obliczający wartość wielomiany stopnia
w dowolnych punktach w czasie .
Wskazówka
Pomysłem na rozwiązanie jest sprowadzenie problemu do dwóch
mniejszych problemów. Można to zrobić wykorzystując algorytm
dzielenia wielomianów. Niech będzie zbiorem punktów w których chcemy obliczyć
wartość wielomianu. Dla wielomianu zdefiniujmy dwa
nowe wielomiany:
wielomiany te są stopnia i z własności
dzielenia wynika, że
dla
dla
Zadanie 2 (Obliczanie wielomianu interpolacyjnego)
Dla danego zbioru par
takiego, że wszystkie wartości
są parami różne, znajdź wielomian interpolacyjny.
Wskazówka
Podobnie jak w Zadaniu 1 należy sprowadzić problem do dwóch
mniejszych. Najpierw liczymy rekurencyjne wielomian
stopnia
interpolujący zbiór punktów .
Następnie obliczamy wartości dla zbioru
punktów \{x_{\frac{n}{2}-1,\ldots, x_{n-1}}\} korzystając z wyników
Zadania 1. Musimy teraz skonstruować następujący wielomian:
Ponownie korzystając z wyników Zadania 1 obliczamy wartości
dla zbioru punktów \{x_{\frac{n}{2}-1,\ldots,
x_{n-1}}\}. Szukany wielomian skonstruujemy jako
gdzie to nieznany wielomian stopnia
. Z konstrukcji wynika, że
jest wielomianem interpolacyjnym dla zbioru .
Zauważmy, że aby znaleźć musimy ponownie rozwiązać
problem interpolacyjny. Dla musi zachodzić
dla .
Musimy więc teraz ponownie rozwiązać problem rozmiaru
. Ostatecznie dostajemy algorytm o
złożoności O(n \log^3 n).
Zadanie 3 (Obliczanie wartości wielomianu dwóch zmiennych)
Dla danych zbiorów punktów i , oraz
wielomianu dwóch zmiennych stopnia
, wyznacz wszystkie wartości
dla .
Wskazówka
Zauważmy, że wielomian jest postaci
((1))
gdzie wielomiany mają także stopnie
. W celu wyznaczenia wartości wielomianu
najpierw wyznaczamy dla każdego
jego wartości w punktach . Zajmuje nam to czas . Wartości te możemy wstawić do (1) otrzymując
wielomianów 'a, których wartości
musimy policzyć w punktach. Ponownie zajmuje nam to czas
.