Tietojenkäsittelytieteessä valintaalgoritmi on algoritmi , jolla löydetään taulukon k : nneksi suurin elementti (tällaista elementtiä kutsutaan k:nnen kertaluvun tilastoksi ). Tämän algoritmin erikoistapauksia ovat minimielementin , maksimielementin ja mediaanin löytäminen . On olemassa algoritmi, joka taatusti ratkaisee ongelman valita k:nneksi suurin elementti O( n :ssä ).
Valintaongelma voidaan supistaa lajitteluun . Todellakin, voit lajitella taulukon ja ottaa sitten tarvitsemasi elementin järjestyksessä. Tämä on tehokasta, kun valinta on tehtävä useita kertoja: sitten voit lajitella taulukon O( n log n ) -muodossa ja valita siitä elementtejä. Jos valinta on kuitenkin tehtävä kerran, tämä algoritmi voi olla kohtuuttoman pitkä.
Ilmeisesti kuinka löytää minimi (maksimi) tietystä taulukosta lineaarisessa ajassa:
K :nnen kertaluvun tilaston löytämiseksi on algoritmi, joka perustuu pikalajittelualgoritmiin, joka suoritetaan keskimäärin O( n ):ssa.
Algoritmin idea on, että matriisi jaetaan kahteen osaan suhteessa satunnaisesti (todennäköisesti) valittuun elementtiin - valittua pienemmät elementit putoavat yhteen osaan, loput toiseen (tämä toiminto suoritetaan , klo. sen lopussa valittu elementti on paikallaan ) . Jos ensimmäisessä osassa ( ) on täsmälleen elementtejä, niin valittu elementti on haluttu, jos , niin algoritmi suoritetaan rekursiivisesti taulukon ensimmäiselle osalle, muuten - toiselle (jälkimmäisessä tapauksessa seuraava iteraatio, vähennetään arvosta ). Rekursiiviset kutsut johtavat eksponentiaalisesti pienenevään käsitellyn taulukon kokoon jokaisella iteraatiolla, ja tästä syystä algoritmin suoritusaika on .
BFPRT-algoritmin avulla voit löytää k : nnen asteen tilastot, jotka on taattu O( n :ssä ). Nimetty sen keksijöiden mukaan: Manual Blum, Robert W. Floyd, Vaughan R. P ratt , Ronald L. R ivest ja Robert Endre T arjan. Sitä käytetään melko pitkällä elementtiluettelolla, yli 800 elementillä.
Syöte: numero , joka edustaa -:nnettä elementtiä.
Jokaisella rekursiivisella kutsulla algoritmi sallii sinun hylätä vähintään neljänneksen kaikista elementeistä. Tämä tarjoaa ylärajan taatulle lineaariselle käyntiajalle deterministiselle algoritmille , koska se ilmaistaan toistuvuussuhteella . Yleensä, jos osajoukot ovat kooltaan , ajoaika ilmaistaan muodossa .