Remove Brent's algorithm
This commit is contained in:
parent
4e58b65f46
commit
c0495eb381
54
luku16.tex
54
luku16.tex
|
@ -703,56 +703,4 @@ while (a != b) {
|
|||
b = f(b);
|
||||
c++;
|
||||
}
|
||||
\end{lstlisting}
|
||||
%
|
||||
% \subsubsection{Algoritmi 2 (Brent)}
|
||||
%
|
||||
% \index{Brentin algoritmi@Brentin algoritmi}
|
||||
%
|
||||
% Brentin algoritmi
|
||||
% muodostuu peräkkäisistä vaiheista, joissa osoitin $a$ pysyy
|
||||
% paikallaan ja osoitin $b$ liikkuu $k$ askelta
|
||||
% Alussa $k=1$ ja $k$:n arvo kaksinkertaistuu
|
||||
% joka vaiheen alussa.
|
||||
% Lisäksi $a$ siirretään $b$:n kohdalle vaiheen alussa.
|
||||
% Näin jatketaan, kunnes osoittimet kohtaavat.
|
||||
%
|
||||
% \begin{lstlisting}
|
||||
% a = x;
|
||||
% b = f(x);
|
||||
% c = k = 1;
|
||||
% while (a != b) {
|
||||
% if (c == k) {
|
||||
% a = b;
|
||||
% c = 0;
|
||||
% k *= 2;
|
||||
% }
|
||||
% b = f(b);
|
||||
% c++;
|
||||
% }
|
||||
% \end{lstlisting}
|
||||
%
|
||||
% Nyt tiedossa on, että syklin pituus on $c$.
|
||||
% Tämän jälkeen ensimmäinen sykliin kuuluva solmu löytyy
|
||||
% palauttamalla ensin osoittimet alkuun,
|
||||
% siirtämällä sitten osoitinta $b$ eteenpäin $c$ askelta
|
||||
% ja liikuttamalla lopuksi osoittimia rinnakkain,
|
||||
% kunnes ne osoittavat samaan solmuun.
|
||||
%
|
||||
% \begin{lstlisting}
|
||||
% a = b = x;
|
||||
% for (int i = 0; i < c; i++) b = f(b);
|
||||
% while (a != b) {
|
||||
% a = f(a);
|
||||
% b = f(b);
|
||||
% }
|
||||
% \end{lstlisting}
|
||||
%
|
||||
% Nyt $a$ ja $b$ osoittavat ensimmäiseen sykliin kuuluvaan solmuun.
|
||||
%
|
||||
% Brentin algoritmin etuna Floydin algoritmiin verrattuna on,
|
||||
% että se kutsuu funktiota $f$ harvemmin.
|
||||
% Floydin algoritmi kutsuu funktiota $f$ ensimmäisessä silmukassa
|
||||
% kolmesti joka kierroksella, kun taas Brentin algoritmi
|
||||
% kutsuu funktiota $f$ vain kerran kierrosta kohden.
|
||||
|
||||
\end{lstlisting}
|
Loading…
Reference in New Issue