Valintaalgoritmi

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ä ).

Valinta lajittelemalla

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ä.

Lineaarinen algoritmi minimin (maksimi) löytämiseksi

Ilmeisesti kuinka löytää minimi (maksimi) tietystä taulukosta lineaarisessa ajassa:

Keskimääräinen lineaarinen algoritmi k : nnen kertaluvun tilaston löytämiseksi

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-algoritmi (lineaarinen deterministinen)

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ä.

Kuinka se toimii

Syöte: numero , joka edustaa -:nnettä elementtiä.

  1. Luettelo on jaettu elementtien osajoukkoon, joissa kussakin on 5 elementtiä (viimeistä osajoukkoa lukuun ottamatta). Osajoukkojen elementtien lukumäärä voi ylittää 5, ja sen on joka tapauksessa oltava pariton. Jos kuitenkin jaat luettelon 3 elementin osajoukkoon, suoritusaika ei ole lineaarinen.
  2. Jokainen osajoukko lajitellaan käyttämällä sopivaa lajittelualgoritmia .
  3. Antaa olla  joukko mediaaneja muodostettu osajoukkoja lajittelun jälkeen. Etsi rekursiivisesti  mediaani mediaaneista — mediaani. Soitetaan hänelle .
    • Tuloksena olevalla rakenteella vaiheen 3 jälkeen on seuraava ominaisuus:
      • Neljänneksellä kaikista elementeistä on joka tapauksessa avain . (joukon osajoukko )
      • Neljänneksellä kaikista elementeistä on joka tapauksessa avain . (joukon osajoukko )
  4. Nyt luettelo on jaettu suhteessa mediaaniin 2 osajoukkoon ja . Tässä tapauksessa vain puolta kaikista elementeistä on verrattava s:ään, koska kaksi neljäsosaa elementeistä on jo lajiteltu suhteessa s:ään. Tämän seurauksena jokainen osajoukko ja sisältää enintään 3/4 kaikista elementeistä (minimi on 1/4 kaikista elementeistä).
  5. Jos:
    • , sitten löydetään haluttu elementti - tämä on mediaanien mediaani
    • , silloin algoritmia kutsutaan rekursiivisesti joukkoon
    • kaikissa muissa tapauksissa algoritmia kutsutaan rekursiivisesti joukkoon

Taattu käyttöaika

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 .

Kirjallisuus