diff --git a/luku24.tex b/luku24.tex index 915e04a..05143f3 100644 --- a/luku24.tex +++ b/luku24.tex @@ -484,115 +484,114 @@ By calculating matrix powers efficiently, we can calculate in $O(n^3 \log m)$ time the distribution after $m$ steps. -\section{Satunnaisalgoritmit} +\section{Randomized algorithms} -\index{satunnaisalgoritmi@satunnaisalgoritmi} +\index{randomized algorithm} -Joskus tehtävässä voi hyödyntää satunnaisuutta, -vaikka tehtävä ei itsessään liittyisi todennäköisyyteen. -\key{Satunnaisalgoritmi} on algoritmi, jonka toiminta -perustuu satunnaisuuteen. +Sometimes we can use randomness for solving a problem, +even if the problem is not related to random events. +A \key{randomized algorithm} is an algorithm that +is based on randomness. -\index{Monte Carlo -algoritmi} +\index{Monte Carlo algorithm} -\key{Monte Carlo -algoritmi} on satunnaisalgoritmi, -joka saattaa tuottaa joskus väärän tuloksen. -Jotta algoritmi olisi käyttökelpoinen, -väärän vastauksen todennäköisyyden tulee olla pieni. +A \key{Monte Carlo algorithm} is a randomized algorithm +that may sometimes give a wrong answer. +For such an algorithm to be useful, +the probability of a wrong answer should be small. -\index{Las Vegas -algoritmi} +\index{Las Vegas algorithm} -\key{Las Vegas -algoritmi} on satunnaisalgoritmi, -joka tuottaa aina oikean tuloksen mutta jonka -suoritusaika vaihtelee satunnaisesti. -Tavoitteena on, että algoritmi toimisi nopeasti -suurella todennäköisyydellä. +A \key{Las Vegas algorithm} is a randomized algorithm +that always gives the correct answer, +but its running time varies randomly. +The goal is to design an algorithm that is +efficient with high probability. -Tutustumme seuraavaksi kolmeen esimerkkitehtävään, -jotka voi ratkaista satunnaisuuden avulla. +Next we will go through three example problems that +can be solved using randomness. -\subsubsection{Järjestystunnusluku} +\subsubsection{Order statistics} -\index{järjestystunnusluku} +\index{order statistic} -Taulukon $k$. \key{järjestystunnusluku} -on kohdassa $k$ oleva alkio, -kun alkiot järjestetään -pienimmästä suurimpaan. -On helppoa laskea mikä tahansa -järjestystunnusluku ajassa $O(n \log n)$ -järjestämällä taulukko, -mutta onko oikeastaan tarpeen järjestää koko taulukkoa? +The $kth$ \key{order statistic} of an array +is the element at index $k$ after sorting +the array in increasing order. +It's easy to calculate any order statistic +in $O(n \log n)$ time by sorting the array, +but is it really needed to sort the whole array +to just find one element? -Osoittautuu, että järjestystunnusluvun -voi etsiä satunnaisalgoritmilla ilman taulukon -järjestämistä. -Algoritmi on Las Vegas -tyyppinen: -sen aikavaativuus on yleensä $O(n)$, -mutta pahimmassa tapauksessa $O(n^2)$. +It turns out that we can find order statistics +using a randomized algorithm without sorting the array. +The algorithm is an Las Vegas algorithm: +its running time is usually $O(n)$, +but $O(n^2)$ in the worst case. -Algoritmi valitsee taulukosta satunnaisen alkion $x$ -ja siirtää $x$:ää pienemmät alkiot -taulukon vasempaan osaan ja loput alkiot -taulukon oikeaan osaan. -Tämä vie aikaa $O(n)$, kun taulukossa on $n$ alkiota. -Oletetaan, että vasemmassa osassa on $a$ -alkiota ja oikeassa osassa on $b$ alkiota. -Nyt jos $a=k-1$, alkio $x$ on haluttu alkio. -Jos $a>k-1$, etsitään rekursiivisesti -vasemmasta osasta, mikä on kohdassa $k$ oleva alkio. -Jos taas $ak-1$, we recursively find the $k$th order +statistic for the left part, +and if $a