Sisältö[-] Feedback

Montako vertailua tarvitaan, jotta löytäisimme luvun, jonka suuruusjärjestysnumero on $p$ jos joukossa on $n$ lukua? [+]

Jos $p=1$ (pienin luku) tai $p=n$ (suurin luku) niin $n-1$ vertailua riittää mutta mikä on tilanne yleisessä tapauksessa?

Seuraavaksi osoitamme, että jos $1\leq p \leq n$ niin tarvittavien vertailujen lukumäärä kuuluu joukkoon $O(n)$, eli on olemassa vakio $C$ siten, että vertailujen lukumäärä on korkeintaan $Cn$ emmekä välitä kovinkaan paljon siitä mikä tämä vakio on:

  • Oletamme että tarvitaan korkeintaan $Ck$ vertailua kun joukossa on $k< n$ lukua.
  • Jaamme luvut osajoukkoihin joissa on $5$ lukua: Ei vertailuja.
  • Määritämme näiden osajoukkojen mediaanit: $O(n)$ vertailua.
  • Määritämme mediaanien mediaani: $C (\frac 15 n+1)$ vertailua.
  • Jaamme luvut kahteen joukkoon, riippuen siitä ovatko ne suurempia tai pienempiä kuin mediaanien mediaani: $O(n)$ vertailua.
  • Kumpikin näistä joukoista sisältää korkeintaan $(1-\frac 15\cdot \frac 12\cdot 3)n+O(1)= \frac 7{10}n+ O(1)$ lukua!
  • Joukkojen alkioiden lukumäärien perusteella tiedämme missä osajoukossa hakemamme luku on ellei se ole mediaanien mediaani ja mikä sen järjestysnumero siinä on joten haemme sen kyseisestä osajoukosta: $C\frac 7{10}n + CO(1)$ vertailua.
  • Olemme käyttäneet vertailua missä $c_0$ on vakio.
  • Jos $n\leq 20 c_0$ voimme järjestää luvut käyttäen $n^2\leq (20 c_0) n$ vertailua (tosiasiassa $n\log_2(n)$ vertailua riittää) ja siten löytää hakemamme luku joten jos valitsemme $C\geq 20c_0$ niin tarvitsemme korkeintaan $Cn$ vertailua kun $n\leq 20c_0$ ja kun $n>20 c_0$ eli $c_0<\frac 1{20}n$ toteamme, koska $C$:n valinnan seurauksena $ c_0\leq\frac 1{20}C$, että tarvitsemme vertailua ja induktiopäättely toimii.