Zaawansowane algorytmy i struktury danych/Wykład 4: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Sank (dyskusja | edycje)
Sank (dyskusja | edycje)
Linia 1: Linia 1:
[[Template:twierdzenie]]
== Abstrakt ==
== Abstrakt ==


Naturalna metoda dodawania dwóch wielomanów wymaga czasu <math>\Theta(n)</math>, natomiast prosty algorytm mnożenia dwóch wielomianów stopnia <math>n</math> wymaga czasu <math>\Theta(n^2)</math>. W wykładzie tym pokażemy, jak z wykożytaniem szybkiej transformaty Fouriera (STF), wykonać wszystkie podstawowe opreracje na wielomianach w czasie większym niż <math>\Theta(n)</math> o czynnik polilogarytmiczny. Pokażemy jak dla wielomianów stopnia <math>n</math>:
Naturalna metoda dodawania dwóch wielomianów wymaga czasu
<math>\Theta(n)</math>, natomiast prosty algorytm mnożenia dwóch
wielomianów stopnia <math>n</math> wymaga czasu
<math>\Theta(n^2)</math>. W wykładzie tym pokażemy, jak z
wykorzystaniem szybkiej transformaty Fouriera (STF), wykonać wszystkie
podstawowe operacje na wielomianach w czasie większym niż
<math>\Theta(n)</math> o czynnik polilogarytmiczny. Pokażemy jak dla
wielomianów stopnia <math>n</math>:
* mnożyć je w czasie <math>O(n \log n)</math>,
* mnożyć je w czasie <math>O(n \log n)</math>,
* obliczać wielomian interpolacyjny w czasie <math>O(n \log^2 n)</math>,
* obliczać wielomian interpolacyjny w czasie <math>O(n \log^2 n)</math>,
* obliczać wartość wielomianiu w <math>n</math> punktach w czasie <math>O(n \log^2 n)</math>,
* obliczać wartość wielomianu w <math>n</math> punktach w czasie <math>O(n \log^2 n)</math>,
* dzielić wielomiany w czasie <math>O(n \log^3 n)</math>.
* dzielić wielomiany w czasie <math>O(n \log^3 n)</math>.
== Szybkie Mnożenie wielomianów ==
Niech <math>A(x) = \sum_{i=0}^{n-1} a_i x^i</math> i
<math>B(x) = \sum_{i=0}^{n-1} b_i x^i</math> będzą
wielomianami stopnia <math>n</math> nad ciałem <math>F</math>.
Wielomiany te możemy jednoznaczne reprezentować poprzez ich
wartości w <math>n</math> punktach. Następujące twierdzenie zostało
sformułowane w ramach wykładu z Metod Numerycznych.
{{twierdzenie|[Twierdzenie o interpolacji
wielomianów]|interpolacja| Dla dowolnego 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, istnieje jedyny wielomian <math>C(x)</math> stopnia <math>n</math>
taki, że <math>C(x_i) = y_i</math> dla <math>i = 0,1,\ldots, n-1.</math>
}}
<flash>Zasd_fft1.swf</flash>

Wersja z 15:59, 18 lip 2006

Template:twierdzenie

Abstrakt

Naturalna metoda dodawania dwóch wielomianów wymaga czasu Θ(n), natomiast prosty algorytm mnożenia dwóch wielomianów stopnia n wymaga czasu Θ(n2). W wykładzie tym pokażemy, jak z wykorzystaniem szybkiej transformaty Fouriera (STF), wykonać wszystkie podstawowe operacje na wielomianach w czasie większym niż Θ(n) o czynnik polilogarytmiczny. Pokażemy jak dla wielomianów stopnia n:

  • mnożyć je w czasie O(nlogn),
  • obliczać wielomian interpolacyjny w czasie O(nlog2n),
  • obliczać wartość wielomianu w n punktach w czasie O(nlog2n),
  • dzielić wielomiany w czasie O(nlog3n).

Szybkie Mnożenie wielomianów

Niech A(x)=i=0n1aixi i B(x)=i=0n1bixi będzą wielomianami stopnia n nad ciałem F. Wielomiany te możemy jednoznaczne reprezentować poprzez ich wartości w n punktach. Następujące twierdzenie zostało sformułowane w ramach wykładu z Metod Numerycznych.

Twierdzenie [Twierdzenie o interpolacji wielomianów]

Dla dowolnego zbioru n par

X={(x0,y0),(x1,y1),,(xn1,yn1)} takiego, że wszystkie wartości xi są parami różne, istnieje jedyny wielomian C(x) stopnia n taki, że C(xi)=yi dla i=0,1,,n1.

<flash>Zasd_fft1.swf</flash>