Binäärihakualgoritmi on tehokas tapa löytää tietty arvo lajitetusta taulukosta. Tämä lähestymistapa jakaa taulukon pienempiin osiin ja vertaa jatkuvasti hakualueen keskikohdan arvoa kohdearvoon. Jos arvot täsmäävät, haluttu arvo löytyy; muussa tapauksessa algoritmi jatkaa hakualueen kaventamista ja toistaa prosessia, kunnes arvo löytyy tai tutkittavia elementtejä ei ole enää jäljellä.
Askeleet:
- Alusta hakualue: Aloita valitsemalla hakualue taulukon ensimmäisestä paikasta
left
viimeiseen kohtaan.right
- Etsi keskipiste: Laske keskipiste laskemalla keskiarvo oikeasta
left
ja oikeasta sijainnista; tämä on hakualueen keskipiste. - Vertaa arvoja: Vertaa keskipisteen arvoa tavoitearvoon.
- Käsittele vertailutulos: Jos keskipisteen arvo vastaa tavoitearvoa, palauta tämä sijainti. Jos keskipisteen arvo on pienempi kuin tavoitearvo, päivitä vasen sijainti keskikohtaan + 1 etsiäksesi oikeaa puoliskoa. Jos arvo keskipisteessä on suurempi kuin tavoitearvo, päivitä oikea sijainti keskikohtaan- 1 etsiäksesi vasenta puoliskoa.
- Toista: Toista vaiheita 2–4, kunnes arvo löytyy tai tarkistettavia elementtejä ei ole enää
left > right
.
Hyödyt ja haitat
Edut:
- Tehokas suorituskyky: Algoritmin aikamonimutkaisuus on O(log n), mikä tekee siitä erittäin tehokkaan suurten tietojoukkojen käsittelyssä.
- Tehokas suurille tietojoukoille: Binaarihaku vähentää tehokkaasti suurten tietojoukkojen nopeasti tutkittavien elementtien määrää.
Haitat:
- Koskee vain lajiteltuja taulukoita: Algoritmi toimii vain lajitetuissa taulukoissa.
- Vaihtuva askelmäärä: Arvon löytämiseen tarvittavien vaiheiden määrä riippuu sen sijainnista taulukossa, ja se voi kestää useita vaiheita lähellä päitä oleville arvoille.
Esimerkki: Binaarihaku arvon 12 löytämiseksi järjestetyssä taulukossa PHP:ssä
Esimerkin selitys
- Aloitamme alkuperäisestä hakualueesta taulukon ensimmäisestä paikasta
left = 0
viimeiseen kohtaan.right = 6
- Laskemme keskipisteen(keskipisteen) laskemalla keskiarvon vasemmasta ja oikeasta paikasta;
mid = 3
. Arvo puolivälissä on 12. - Vertaamme arvoa kohdassa
mid(12
) tavoitearvoon(12) ja löydämme vastaavuuden, joten palautetaan sijainti 3. - Algoritmi päättyy ja tulostamme tuloksen "Arvo 12 löydetty sijainnista 3."