Linear recurrences
This commit is contained in:
		
							parent
							
								
									58aa6bef6d
								
							
						
					
					
						commit
						864df3289e
					
				
							
								
								
									
										104
									
								
								luku23.tex
								
								
								
								
							
							
						
						
									
										104
									
								
								luku23.tex
								
								
								
								
							|  | @ -420,35 +420,32 @@ For example, | |||
| }_{I}. | ||||
| \] | ||||
| 
 | ||||
| \section{Lineaariset rekursioyhtälöt} | ||||
| \section{Linear recurrences} | ||||
| 
 | ||||
| \index{rekursioyhtxlz@rekursioyhtälö} | ||||
| \index{lineaarinen rekursioyhtxlz@lineaarinen rekursioyhtälö} | ||||
| \index{linear recurrence} | ||||
| 
 | ||||
| \key{Lineaarinen rekursioyhtälö} | ||||
| voidaan esittää funktiona $f(n)$, | ||||
| jolle on annettu alkuarvot | ||||
| $f(0),f(1),\ldots,f(k-1)$ | ||||
| ja jonka suuremmat arvot | ||||
| parametrista $k$ lähtien lasketaan | ||||
| rekursiivisesti kaavalla | ||||
| A \key{linear recurrence} | ||||
| can be represented as a function $f(n)$ | ||||
| with initial values | ||||
| $f(0),f(1),\ldots,f(k-1)$, | ||||
| whose values for $k$ and larger parameters | ||||
| are calculated recursively using a formula | ||||
| \[f(n) = c_1 f(n-1) + c_2 f(n-2) + \ldots + c_k f (n-k),\] | ||||
| missä $c_1,c_2,\ldots,c_k$ ovat vakiokertoimia. | ||||
| where $c_1,c_2,\ldots,c_k$ are constant multipliers. | ||||
| 
 | ||||
| Funktion arvon $f(n)$ voi laskea dynaamisella | ||||
| ohjelmoinnilla ajassa $O(kn)$ | ||||
| laskemalla kaikki arvot $f(0),f(1),\ldots,f(n)$ järjestyksessä. | ||||
| Tätä ratkaisua voi kuitenkin tehostaa merkittävästi | ||||
| matriisien avulla, kun $k$ on pieni. | ||||
| Seuraavaksi näemme, miten arvon $f(n)$ | ||||
| voi laskea ajassa $O(k^3 \log n)$. | ||||
| We can use dynamic programming to calculate | ||||
| any value $f(n)$ in $O(kn)$ time by calculating | ||||
| all values $f(0),f(1),\ldots,f(n)$ one after another. | ||||
| However, if $k$ is small, it is possible to calculate | ||||
| $f(n)$ much more efficiently in $O(k^3 \log n)$ | ||||
| time using matrix operations. | ||||
| 
 | ||||
| \subsubsection{Fibonaccin luvut} | ||||
| \subsubsection{Fibonacci numbers} | ||||
| 
 | ||||
| \index{Fibonaccin luku@Fibonaccin luku} | ||||
| \index{Fibonacci number} | ||||
| 
 | ||||
| Yksinkertainen esimerkki lineaarisesta rekursioyhtälöstä | ||||
| on Fibonaccin luvut määrittelevä funktio: | ||||
| A simple example of a linear recurrence is the | ||||
| function that calculates Fibonacci numbers: | ||||
| \[ | ||||
| \begin{array}{lcl} | ||||
| f(0) & = & 0 \\ | ||||
|  | @ -456,12 +453,13 @@ f(1) & = & 1 \\ | |||
| f(n) & = & f(n-1)+f(n-2) \\ | ||||
| \end{array} | ||||
| \] | ||||
| Tässä tapauksessa $k=2$ ja $c_1=c_2=1$. | ||||
| In this case, $k=2$ and $c_1=c_2=1$. | ||||
| 
 | ||||
| \begin{samepage} | ||||
| Ideana on esittää Fibonaccin lukujen laskukaava | ||||
| $2 \times 2$ -kokoisena neliömatriisina | ||||
| $X$, jolle pätee | ||||
| The idea is to represent the formula for | ||||
| calculating Fibonacci numbers as a | ||||
| square matrix $X$ of size $2 \times 2$ | ||||
| for which the following holds: | ||||
| \[ X \cdot | ||||
|  \begin{bmatrix} | ||||
|   f(i) \\ | ||||
|  | @ -471,13 +469,13 @@ $X$, jolle pätee | |||
|  \begin{bmatrix} | ||||
|   f(i+1) \\ | ||||
|   f(i+2) \\ | ||||
|  \end{bmatrix}, | ||||
|  \end{bmatrix} | ||||
|  \] | ||||
| eli $X$:lle annetaan | ||||
| ''syötteenä'' arvot $f(i)$ ja $f(i+1)$, | ||||
| ja $X$ muodostaa niistä | ||||
| arvot $f(i+1)$ ja $f(i+2)$. | ||||
| Osoittautuu, että tällainen matriisi on | ||||
| Thus, values $f(i)$ and $f(i+1)$ are given as | ||||
| ''input'' for $X$, | ||||
| and $X$ constructs values $f(i+1)$ and $f(i+2)$ | ||||
| from them. | ||||
| It turns out that such a matrix is | ||||
| 
 | ||||
| \[ X =  | ||||
|  \begin{bmatrix} | ||||
|  | @ -487,7 +485,7 @@ Osoittautuu, että tällainen matriisi on | |||
| \] | ||||
| \end{samepage} | ||||
| \noindent | ||||
| Esimerkiksi | ||||
| For example, | ||||
| \[ | ||||
|  \begin{bmatrix} | ||||
|   0 & 1 \\ | ||||
|  | @ -519,8 +517,7 @@ Esimerkiksi | |||
|   f(7) \\ | ||||
|  \end{bmatrix}. | ||||
| \] | ||||
| Tämän ansiosta arvon $f(n)$ sisältävän matriisin saa laskettua | ||||
| kaavalla | ||||
| Thus, we can calculate $f(n)$ using the formula | ||||
| \[ | ||||
|  \begin{bmatrix} | ||||
|   f(n) \\ | ||||
|  | @ -543,17 +540,17 @@ X^n \cdot | |||
|   1 \\ | ||||
|  \end{bmatrix}. | ||||
| \] | ||||
| Potenssilasku $X^n$ on mahdollista laskea ajassa | ||||
| $O(k^3 \log n)$, | ||||
| joten myös funktion arvon $f(n)$ | ||||
| saa laskettua ajassa $O(k^3 \log n)$. | ||||
| The power $X^n$ on can be calculated in | ||||
| $O(k^3 \log n)$ time, | ||||
| so the value $f(n)$ can also be calculated | ||||
| in $O(k^3 \log n)$ time. | ||||
| 
 | ||||
| \subsubsection{Yleinen tapaus} | ||||
| \subsubsection{General case} | ||||
| 
 | ||||
| Tarkastellaan sitten yleistä tapausta, | ||||
| missä $f(n)$ on mikä tahansa lineaarinen | ||||
| rekursioyhtälö. Nyt tavoitteena on etsiä | ||||
| matriisi $X$, jolle pätee | ||||
| Let's now consider a general case where | ||||
| $f(n)$ is any linear recurrence. | ||||
| Again, our goal is to construct a matrix $X$ | ||||
| for which | ||||
| 
 | ||||
| \[ X \cdot | ||||
|  \begin{bmatrix} | ||||
|  | @ -570,7 +567,7 @@ matriisi $X$, jolle pätee | |||
|   f(i+k) \\ | ||||
|  \end{bmatrix}. | ||||
| \] | ||||
| Tällainen matriisi on | ||||
| Such a matrix is | ||||
| \[ | ||||
| X = | ||||
|  \begin{bmatrix} | ||||
|  | @ -582,17 +579,16 @@ X = | |||
|   c_k & c_{k-1} & c_{k-2} & c_{k-3} & \cdots & c_1 \\ | ||||
|  \end{bmatrix}. | ||||
| \] | ||||
| Matriisin $k-1$ ensimmäisen rivin jokainen alkio on 0, | ||||
| paitsi yksi alkio on 1. | ||||
| Nämä rivit kopioivat | ||||
| arvon $f(i+1)$ arvon $f(i)$ tilalle, | ||||
| arvon $f(i+2)$ arvon $f(i+1)$ tilalle jne. | ||||
| Viimeinen rivi sisältää rekursiokaavan kertoimet, | ||||
| joiden avulla muodostuu uusi arvo $f(i+k)$. | ||||
| In the first $k-1$ rows, each element is 0 | ||||
| except that one element is 1. | ||||
| These rows replace $f(i)$ with $f(i+1)$, | ||||
| $f(i+1)$ with $f(i+2)$, etc. | ||||
| The last row contains the multipliers in the recurrence, | ||||
| and it calculates the new value $f(i+k)$. | ||||
| 
 | ||||
| \begin{samepage} | ||||
| Nyt arvon $f(n)$ pystyy laskemaan ajassa $O(k^3 \log n)$ | ||||
| kaavalla | ||||
| Now, $f(n)$ can be calculated in | ||||
| $O(k^3 \log n)$ time using the formula | ||||
| \[ | ||||
|  \begin{bmatrix} | ||||
|   f(n) \\ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue