Zaawansowane algorytmy i struktury danych/Ćwiczenia 4: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Sank (dyskusja | edycje)
Nie podano opisu zmian
Dorota (dyskusja | edycje)
Nie podano opisu zmian
Linia 7: Linia 7:
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">


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 <math>X = \{x_0, \ldots, x_{n-1}\}</math> będzie zbiorem punktów w których chcemy obliczyć wartość wielomianu. Dla wielomianu <math>A(x)</math> zdefiniujmy dwa nowe wielomiany:
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 <math>X = \{x_0, \ldots, x_{n-1}\}</math> będzie zbiorem punktów w których chcemy obliczyć wartość wielomianu. Dla wielomianu <math>A(x)</math> zdefiniujmy dwa nowe wielomiany:




Linia 42: Linia 42:
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">


Podobnie jak w Zadaniu 1 należy sprowadzić problem do dwóch mniejszych. Najpierw liczymy rekurencyjne wielomian <math>A^{[0]}(x)</math> stopnia <math>\frac{n}{2}</math> interpolujący zbiór punktów <math>X^{[0]} = \{(x_0, y_0), (x_1, y_1), \ldots,(x_{\frac{n}{2}-1},y_{\frac{n}{2}-1})\}</math>. Następnie obliczamy wartości <math>A^{[0]}(x)</math> 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:
Podobnie jak w Zadaniu 1 należy sprowadzić problem do dwóch mniejszych. Najpierw liczymy rekurencyjne wielomian <math>A^{[0]}(x)</math> stopnia <math>\frac{n}{2}</math> interpolujący zbiór punktów <math>X^{[0]} = \{(x_0, y_0), (x_1, y_1), \ldots,(x_{\frac{n}{2}-1},y_{\frac{n}{2}-1})\}</math>. Następnie obliczamy wartości <math>A^{[0]}(x)</math> 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:




Linia 50: Linia 50:




Ponownie korzystając z wyników Zadania 1 obliczamy wartości <math>P(x)</math> dla zbioru punktów \{x_{\frac{n}{2}-1,\ldots, x_{n-1}}\}. Szukany wielomian skonstruujemy jako:
Ponownie korzystając z wyników Zadania 1, obliczamy wartości <math>P(x)</math> dla zbioru punktów \{x_{\frac{n}{2}-1,\ldots, x_{n-1}}\}. Szukany wielomian skonstruujemy jako:


{{wzor2|1=<math>
{{wzor2|1=<math>
Linia 57: Linia 57:




gdzie <math>A^{[1]}</math> to nieznany wielomian stopnia <math>\frac{n}{2}</math>. Z konstrukcji wynika, że <math>A(x)</math> jest wielomianem interpolacyjnym dla zbioru <math>X^{[0]}</math>. Zauważmy, że aby znaleźć <math></math>musimy ponownie rozwiązać problem interpolacyjny. Dla <math>A^{[1]}(x)</math> musi zachodzić
gdzie <math>A^{[1]}</math> to nieznany wielomian stopnia <math>\frac{n}{2}</math>. Z konstrukcji wynika, że <math>A(x)</math> jest wielomianem interpolacyjnym dla zbioru <math>X^{[0]}</math>. Zauważmy, że aby znaleźć <math></math> musimy ponownie rozwiązać problem interpolacyjny. Dla <math>A^{[1]}(x)</math> musi zachodzić




Linia 89: Linia 89:
<math>B_i(y)</math> jego wartości w punktach <math>Y = \{y_0,
<math>B_i(y)</math> jego wartości w punktach <math>Y = \{y_0,
\ldots, y_{n-1}\}</math>. Zajmuje nam to czas <math>O(n^2 \log^2
\ldots, y_{n-1}\}</math>. Zajmuje nam to czas <math>O(n^2 \log^2
n)</math>. Wartości te możemy wstawić do [[#wzor_1|(1)]] otrzymując
n)</math>. Wartości te możemy wstawić do [[#wzor_1|(1)]], otrzymując
<math>n</math> wielomianów <math>x</math>'a, których wartości
<math>n</math> wielomianów <math>x</math>'a, których wartości
musimy policzyć w <math>n</math> punktach. Ponownie zajmuje nam to czas
musimy policzyć w <math>n</math> punktach. Ponownie zajmuje nam to czas

Wersja z 19:34, 25 wrz 2006

Zadanie 1 (Obliczanie wartości wielomianu w n punktach)

Zaproponuj algorytm obliczający wartość wielomianu stopnia n w n dowolnych punktach w czasie O(nlogn2).

Wskazówka

Zadanie 2 (Obliczanie wielomianu interpolacyjnego)

Dla danego zbioru n par X={(x0,y0),(x1,y1),,(xn1,yn1)} takiego, że wszystkie wartości xi są parami różne, znajdź wielomian interpolacyjny.

Wskazówka

Zadanie 3 (Obliczanie wartości wielomianu dwóch zmiennych)

Dla danych zbiorów n punktów X={x0,,xn1} i Y={y0,,yn1}, oraz wielomianu A(x,y) dwóch zmiennych stopnia n, wyznacz wszystkie wartości A(xi,yj) dla i,j=0,,n1.

Wskazówka