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

336

    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. Miksi sä valitsit

      Juuri minut sieltä?
      Ikävä
      72
      3215
    2. Kerro nyt rehellisesti fiilikset?

      Rehellinem fiilis
      Suhteet
      62
      2525
    3. Hei........

      Pelkkä sun näkeminen saa mut hymyilemään pitkin iltaa. Oot niin 🤩😘 Edellinen poistettiin.
      Ikävä
      56
      2166
    4. Mitä sanoa pituudeksi näillä mittaustuloksilla?

      Jos jossain tarttee ilmoittaa pituus sentin tarkkuudella? Mitattu neljästi virallisesti ja mittaustulokset on olleet 1
      Sinkut
      94
      2095
    5. Heilutetaanko peittoa hieman

      Heilutetaan peittoa vähän ;3
      Ikävä
      55
      1992
    6. Tilanteesi nyt?

      Kysymys otsikossa
      Suhteet
      42
      1614
    7. Kaipaan sua, Ope

      Mietin, että ajatteletko sinä minua?..
      Ikävä
      40
      1590
    8. Mä en jaksa suojella sua enää

      Oot osa mun tarinaa ja ensirakkaus 🩷🌈 Olisiko niin kauheata, jos muutkin ystävämme tietäisivät? Se on jo niin vanha ”t
      Ikävä
      14
      1283
    9. EU:n uusin idea - jatkossa joudut tunnistautumaan kun katsot PORNOA!

      "Pornon katsominen muuttuu täysin Euroopan komissio on kehittänyt sovelluksen, jolla internetin käyttäjä voi todistaa p
      Maailman menoa
      139
      1198
    10. Vuodetvierii

      E siitä tulee nyt 50 vuotta oivoi
      Ähtäri
      6
      1103
    Aihe