Peräkkäishaku
Tietojenkäsittelytieteessä peräkkäishaku eli lineaarihaku on yksinkertainen hakualgoritmi, joka etsii arvoa taulukosta käymällä sen läpi alkio alkiolta. Toisin kuin puolitushaku tai interpolaatiohaku, peräkkäishaku ei vaadi, että alkiot ovat suuruusjärjestyksessä.
Peräkkäishaku yleistyy jokaiselle tietorakenteelle, jonka alkiot voidaan luetella yksi kerrallaan (iteroituva tietorakenne) ja jonka alkioille on määritelty yhtäsuuruus.
Algoritmi
[muokkaa | muokkaa wikitekstiä]Peräkkäishaun periaate voidaan muotoilla seuraavasti:
- Jos taulukon ensimmäinen alkio on etsitty arvo, palautetaan sen indeksi eli 0.
- Jos taulukon toinen alkio on etsitty arvo, palautetaan sen indeksi eli 1.
- Toistetaan vastaavasti kolmannelle alkiolle, neljännelle alkiolle...
- Jos viimeinenkään alkio ei ole etsitty arvo, palautetaan ”ei löytynyt” eli –1.
Seuraava on pseudokoodina toteutettu peräkkäishakualgoritmi, joka kertoo arvon x indeksin taulukossa T:
T: taulukko [0 ... n – 1] n: taulukon pituus eli alkioiden lukumäärä x: etsittävä arvo Palauttaa: * indeksin i ensimmäiseen alkioon, joka on yhtä suuri kuin x (eli jos x = T[i]) * –1, jos arvoa ei löydy function peräkkäishaku(T, n, x) for i := 0 to n – 1 do if T[i] = x then return i end if end for return –1 end function
Suorituskyky
[muokkaa | muokkaa wikitekstiä]Peräkkäishaun asymptoottinen suoritusaika on kertaluokkaa O(n). Jos oletetaan että haettava alkio esiintyy taulukossa, niin sen etsimiseen satunnaisesti järjestetystä n:n pituisesta taulukosta tarvitaan keskimäärin n / 2 vertailua. Parhaimmassa tapauksessa, jossa etsitty alkio on taulukon ensimmäinen alkio, tarvitaan yksi vertailu. Pahimmassa tapauksessa, jolloin etsitty alkio ei esiinny taulukossa lainkaan, algoritmi tekee syötteen pituuden verran eli n kappaletta vertailuja.
Samat luvut pätevät jokaiselle tietorakenteelle, jossa seuraavaan alkioon siirtyminen vie aina saman verran aikaa.
Erityissovelluksia
[muokkaa | muokkaa wikitekstiä]Peräkkäishaku yhdistettynä tietuealkioihin mahdollistaa ajassa O(n) toimivan hakurakenteen eli assosiaatiotaulun toteuttamisen lähes minkä tietorakenteen avulla tahansa. Esimerkkitoteutus taulukkona:
record Alkio key: avain, jonka perusteella arvoja noudetaan ja jolle on määritelty yhtäsuuruus value: arvo, varsinainen tietoalkio end record T: taulukko, jonka alkiot ovat tyyppiä Alkio n: taulukon pituus k: haettava avain function lookup(T, n, k) for i := 0 to n – 1 do if T[i].key = k then return T[i].value end if end for return ei löytynyt end function
Tehokkaampia hakurakennetoteutuksia ovat hajautustaulu ja tasapainoinen hakupuu.