Taulukossa on vaikka merkkijonot:
"Matti", "Jussi","Pekka","Sami","Henri","Heli","Liisa"
Mikä on nopein tapa saada selville, onko taulukossa vaikka "Pekka" ?
Nopeus on erittäin tärkeätä!
Kaikki merkkijonon "nimet" on etukäteen tiedossa, ja myöhemmin suoritetaan vain nämä tarkistukset, onko merkkijono vai ei (true/false).
Vai olisiko esim switch case nopeampi ?
Nopea haku taulukosta
3
363
Vastaukset 3
Voit vaikka lajitella tiedot järjestykseen, ja lopettaa haun heti, kun mennään yli sen kohdan, mistä lähtien haettavaa elementtiä ei voi tulla enää vastaan lopputaulukossa.
Kun dataa tulee huomattavasti enemmän, niin voisi esim. luoda taulukon kutakin aakkosta kohti. Tämän taulukon elementteihin tulee myös taulukko, jossa on ko. kirjaimella alkavat sanat. Haettaessa x-kirjaimella alkavaa sanaa riittää selata läpi vain se taulukon kohta (eli siis siitä indeksistä saatava lista), mihin on tallennettu x-kirjaimella alkavat sanat.
Toisaalta ainakin noin pienillä datamäärillä taulukon läpikäymiseen käytettävä aika suhteessa muuhun on täysin merkityksetön (etenkin silloin, jos teet jotain interaktiivista ohjelmaa).
Switch-case on tuskin nopeampi, sillä se vastannee listan läpikäymistä for- tai while-loopissa. Lisäksi sen ylläpitäminen käsin on tuskaa.- Liksa0
1a) Jos merkkijono on tiedossa niin järjestä hakutaulukko etukäteen.
1b) Aloita etsiminen keskimmäisestä indeksistä ja jos haettava asia on suurempi kuin keskimmäinen indeksi jää jäljelle taas puolet pienempi alue josta otat taas keskimmäisen indeksin... tätä jatketaan kunnes löytyy tai indeksi ei muutu (löydettiin lähin mahdollinen).
2) Jos vaikka 90% hauista tehdään samalla sanalla niin käsittele ne erikseen cachella.
3) Balancing Tree algoritmi on kaikkein tehokkain mutta se on monimutkainen ja soveltuu lähinnä laajoille datajoukoille.
4) Datan profiloiminen nopeuttaa jonkin verran suuria ei-heterogeenisiä hakujoukkoja. (Eli siis etukäteen selvitetään missä suhteessa on vaikka A:lla alkavia nimiä muihin kirjaimiin verrattuna jotta haku osataan alkaa oikeasta kohtaa.)
5) Usein kuitenkin käy niin että nopeuttamiseen tehty logiikka on lähes yhtä raskasta kuin perus puolittava haku. - tumpelo
mikäs vika on tässä?
if (in_array('Pekka', $my_array)) {
// do ur magicx
}
rtfm!:
http://fi.php.net/manual/fi/function.in-array.php
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Törkeä petosepäily Suomussalmella
Uutisoi maikkari. Uhrin nimiin on nostettu pankkilainaa, hänet on saatu sijoittamaan hevosiin ja ostamaan autoja. Ei ta924022Poliisi etälamautti, sitten pahoinpiteli
Vaikeasti kehitysvammaisen niin vakavasti että kuoli pian sairaalassa. Ei osannut kehitysvammainen heti noudattaa polii4131471Anni Ihamäki saa tylyä kommenttia TTK:sta - Erityisesti tämä "vääryys" ärsyttää
Kaikille ei ole mieleen se, että Anni Ihamäki on mukana uudella Tanssii Tähtien Kanssa -kaudella. Ihamäki saa varsin ty391157Päivän Riikka: Pandan suklaatehdas Jyväskylästä Viroon
Menkää töihin! Viroon! --- Liki sata vuotta kestänyt suklaantuotanto makeisvalmistaja Pandan tehtaalla Vaajakoskella pä264997Mies, olen pahoillani kun olen kuvitellut
Että pitäisit minusta. En sitä mistään tähdistä kuitenkaan lukenut, mulle vaan tuli jostain semmoinen tunne, kun itse ty72953Mitä et ole valmis sietämään ihmissuhteissasi ja miksi?
Aiemmin jo kyseltiin mitkä vaatimukset olivat mielestänne liiallisia. Kyselläänkin nyt sitä, että millaisilla asioilla s295863Tiesitkö? Vappu Pimiän ensimmäinen aviomies ei ole Teemu-rakas
Vappu Pimiä on tätä nykyä naimisissa Teemu Huuhtasen kanssa. Pimiä on toista kertaa naimisissa, sillä ensimmäinen liitto24842Sysmä tarvitsee päätöksiä
Sysmä tarvitsee päätöksiä – ei p*anjauhantaa** Kirjoitan kuntapolitiikan ulkopuolisena tarkkailijana. Sysmän poliittinen26772Älä katoa elämästäni
Kävelyllä mietin olisitpa varjo takanani vierelläni sivullani Älä katoa koskaan ole siinä pidä kädestäni kiinni ole kan44755Älä nyt ylikuormitu vaikka sinusta pidänkin rakas nainen
Tiedän, että olet minulle oikea. En halua pilata tätä juttua malttamattomuudella, mutta epäilen. Haluan vain olla lähel33741