Nopea haku taulukosta

koodaja

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 ?

3

335

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Mistä puhuitte viimeksi kun näitte

      Kerro yksi aiheista
      Ikävä
      78
      5236
    2. Olenko saanut sinut koukkuun?

      Hyvä. Rakastan sua.
      Ikävä
      118
      3608
    3. ROTAT VALTAAVAT ALUEITA

      Asukkaat nyt loukkuja tekemään ja kiireellä, jätehuolto kuntoon, jätteet niille kuuluville paikoille, huomioikaa yrittäj
      Äänekoski
      40
      3466
    4. Se on hyvästi

      Toivottavasti ei tavata.
      Ikävä
      51
      3064
    5. Miten minusta tuntuu että kaikki tietää sun tunteista mua kohtaan

      Paitsi suoraan minä itse, vai mitä hlvettiä täällä tapahtuu ja miksi ihmiset susta kyselee minulta 🤔❤️
      Ikävä
      26
      2778
    6. Alavuden sairaala

      Säästääkö Alavuden sairaala sähkössä. Kävin Sunnuntaina vast. otolla. Odotushuone ja käytävä jolla lääkäri otti vastaan
      Ähtäri
      7
      2309
    7. Sisäsiittosuus

      Tämän kevään ylioppilaista 90% oli sama sukunimi?
      Suomussalmi
      24
      2101
    8. Kerro todelliset motiivit

      kaivattuasi kohtaan?
      Ikävä
      199
      2000
    9. Reuters: Ukraina on iskenyt Venäjän strategisia pommikoneita vastaan. Jopa 40 konetta vahingoittunut

      Ukrainan turvallisuuspalvelu SBU on iskenyt Venäjän strategisia pommikoneita vastaan, kertoo Reuters. Uutistoimiston läh
      NATO
      419
      1638
    10. Huomenta kulta

      En mä halunnut sulle ilkeillä,päinvastoin. Miks mä niin tekisin ku rakastan sua ❤️ mut anteeksi jos ilmaisin itseäni huo
      Ikävä
      9
      1578
    Aihe