Zaawansowane algorytmy i struktury danych/Ćwiczenia 4: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
m Zastępowanie tekstu – „,↵</math>” na „</math>,” |
||
(Nie pokazano 4 wersji utworzonych przez 3 użytkowników) | |||
Linia 4: | Linia 4: | ||
w <math>n</math> dowolnych punktach w czasie <math>O(n \log n^2)</math>. | w <math>n</math> dowolnych punktach w czasie <math>O(n \log n^2)</math>. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> '''Wskazówka''' | <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Wskazówka''' | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Pomysłem na rozwiązanie jest sprowadzenie | 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: | ||
{{wzor2|1= | {{wzor2|1= | ||
<math> | <math> | ||
A^{[0]}(x) = A(x) \mod \prod_{i=0}^{\frac{n}{2}-1} (x-x_i) | A^{[0]}(x) = A(x) \mod \prod_{i=0}^{\frac{n}{2}-1} (x-x_i)</math>, | ||
</math> | |||
}} | }} | ||
{{wzor2|1= | {{wzor2|1= | ||
<math> | <math> | ||
A^{[1]}(x) = A(x) \mod \prod_{i=\frac{n}{2}}^{n-1} (x-x_i) | A^{[1]}(x) = A(x) \mod \prod_{i=\frac{n}{2}}^{n-1} (x-x_i)</math>, | ||
</math> | |||
}} | }} | ||
Linia 39: | Linia 37: | ||
Dla danego zbioru <math>n</math> par <math>X = \{(x_0, y_0), (x_1, y_1), \ldots, (x_{n-1},y_{n-1})\}</math> takiego, że wszystkie wartości <math>x_i</math> są parami różne, znajdź wielomian interpolacyjny. | Dla danego zbioru <math>n</math> par <math>X = \{(x_0, y_0), (x_1, y_1), \ldots, (x_{n-1},y_{n-1})\}</math> takiego, że wszystkie wartości <math>x_i</math> są parami różne, znajdź wielomian interpolacyjny. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> '''Wskazówka''' | <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Wskazówka''' | ||
<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 48: | ||
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> | ||
A(x) = A^{[0]}(x) + P(x) A^{[1]}(x) | A(x) = A^{[0]}(x) + P(x) A^{[1]}(x)</math>,}} | ||
</math>}} | |||
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ć | ||
{{wzor2|1=<math>A^{[1]}(x_i) = \frac{y_i - A^{[0]}(x_i)}{P(x_i)}</math> dla <math>i = frac{n}{2},\ldots,n-1</math>. | {{wzor2|1=<math>A^{[1]}(x_i) = \frac{y_i - A^{[0]}(x_i)}{P(x_i)}</math> dla <math>i = \frac{n}{2},\ldots,n-1</math>. | ||
}} | }} | ||
Linia 77: | Linia 74: | ||
dla <math>i,j = 0,\ldots, n-1</math>. | dla <math>i,j = 0,\ldots, n-1</math>. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> '''Wskazówka''' | <div class="mw-collapsible mw-made=collapsible mw-collapsed">'''Wskazówka''' | ||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
Zauważmy, że wielomian <math>A(x,y)</math> jest postaci | Zauważmy, że wielomian <math>A(x,y)</math> jest postaci | ||
Linia 89: | Linia 86: | ||
<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 |
Aktualna wersja na dzień 21:49, 11 wrz 2023
Zadanie 1 (Obliczanie wartości wielomianu w punktach)
Zaproponuj algorytm obliczający wartość wielomianu stopnia w dowolnych punktach w czasie .
Wskazówka
Zadanie 2 (Obliczanie wielomianu interpolacyjnego)
Dla danego zbioru par takiego, że wszystkie wartości są parami różne, znajdź wielomian interpolacyjny.
Wskazówka
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