Zadanie 1 (Obliczanie wartości wielomianu w punktach)
Zaproponuj algorytm obliczający wartość wielomianu stopnia
w dowolnych punktach w czasie .
Wskazówka
Pomysłem na rozwiązanie jest sprowadzenie zagadnienia 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
.