Sekvenssi Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Timo Esim. pino, jono ja kaksiloppuinen jono ovat sekvenssin erikoistapauksia sekvenssejä, jotka kohdistavat operaationsa ensimmäiseen/viimeiseen alkioon alkiolla on yksikäsitteinen seuraaja- ja edeltäjäalkio (paitsi alussa/lopussa) Sekvenssi Yleinen sekvenssi: kullakin alkiolla on aste (rank, järjestysnumero ) Timo ensimmäisen alkion aste on 0, toisen 1, jne. aste alkion indeksi sekvenssissä Tietorakenteet, syksy 2007 1 Tietorakenteet, syksy 2007 2 Yleinen sekvenssi kullakin alkiolla on paikka abstrakti sijoituspaikan käsite abstraktina tietotyyppinä: alkio on datajäsen, ja metodi element() palauttaa alkion vrt. esim. solmu, johon alkio on tallennettu paikka v Timo Yleinen sekvenssi operaatioita voidaan suorittaa sekvenssin mihin tahansa kohtaan kohdan määritys: joko alkion aste, tai sekvenssissä olevan alkion paikka huom: luentomonisteessa käsitellään aluksi erillisinä tapauksina: astetta soveltava sekvenssi (asteet, ei paikkoja) paikkasekvenssi (paikat, ei asteita) Tietorakenteet, syksy 2007 3 Tietorakenteet, syksy 2007 4
ElemAtRank(r): palauttaa asteen r omaavan alkion virhe, jos r ei kuulu väliin 0...n 1, kun alkioita n kpl ElemAtRank(1), palauttaa alkion ReplaceElemAtRank(r,x): korvaa asteen r omaavan alkion alkiolla x, ja palauttaa korvatun alkion virhe, jos r ei kuulu väliin 0...n 1 Heli ReplaceElemAtRank(1, Heli), palauttaa alkion Tietorakenteet, syksy 2007 5 Tietorakenteet, syksy 2007 6 InsertElemAtRank(r,x): lisää alkion x sekvenssiin r-asteiseksi alkioksi virhe, jos r ei kuulu väliin 0...n palauttaa uuden alkion paikan (luentomoniste: ei palauta mitään, koska sovelsi vain astetta) paikka p Anu InsertElemAtRank(3,), palauttaa paikan c InsertElemAtRank(1,Anu), palauttaa paikan p Tietorakenteet, syksy 2007 7 RemoveElemAtRank(r): poistaa asteen r omaavan alkion ja palauttaa sen virhe, jos r ei kuulu väliin 0...n 1 myös poistetun alkion paikka häviää RemoveElemAtRank(2) palauttaa alkion Tietorakenteet, syksy 2007 8
paikka h Hanna Size(): palauttaa sekvenssin alkioiden lukumäärän IsEmpty(): palautusarvo true/false kertoo, onko sekvenssi tyhjä Replace(p,x): korvaa paikassa p olevan alkion alkiolla x, ja palauttaa korvatun alkion Topi Replace(y, Topi), palauttaa alkion First()/Last(): palauttaa sekvenssin ensimmäisen/viimeisen alkion paikan Before(p)/After(p): palauttaa paikkaa p edeltävän/seuraavan paikan sekvenssissä Tietorakenteet, syksy 2007 9 Tietorakenteet, syksy 2007 10 Swap(p,q): vaihtaa paikkojen p ja q alkiot keskenään Swap(a,c) InsertFirst(x)/InsertLast(x): lisää alkion x sekvenssin ensimmäiseksi/viimeiseksi alkioksi ja palauttaa alkion paikan InsertFirst(), palauttaa paikan b InsertLast(), palauttaa paikan d paikka d Tietorakenteet, syksy 2007 11 Tietorakenteet, syksy 2007 12
InsertBefore(p,x)/InsertAfter(p,x): lisää alkion x paikassa p olevan alkion eteen/perään ja palauttaa uuden alkion paikan paikka h Hanna InserBefore(c, ) palauttaa paikan y InsertAfter(a, Hanna) palauttaa paikan h Remove(p): poistaa paikassa p olevan alkion ja palauttaa sen Remove(b), palauttaa alkion AtRank(r): palauttaa r-asteisen alkion paikan RankOf(p): palauttaa paikassa p olevan alkion asteen Tietorakenteet, syksy 2007 13 Tietorakenteet, syksy 2007 14 Sekvenssin toteutuksesta Sekvenssi on luontevaa toteuttaa kaksoislinkitetyllä listalla paikka: viite alkiota vastaavaan solmuun Operaatioiden aikavaativuudet O(n), jos operaation sovelluskohta täytyy etsiä selaamalla listaa AtRank, RankOf, ElemAtRank, ReplaceElemAtRank, InsertElemAtRank, RemoveElemAtRank muut operaatiot: O(1) Tietorakenteet, syksy 2007 15 Sekvenssin toteutuksesta Sekvenssin toteutus taulukossa erilliset paikkatietueet paikka h Hanna 0 1 2 3 4 5 6 7 8 9 taulukossa viitteet paikkatietueisiin paikka säilyy samana, vaikka aste muuttuisi Tietorakenteet, syksy 2007 16
Sekvenssin toteutuksesta Lisäys/poisto taulukon keskellä: O(n) 0 1 2 3 4 5 6 7 8 9 Sekvenssin toteutuksesta Seuraus: taulukossa operaatioiden InsertAfter, InsertBefore, InsertElemAtRank, RemoveElemAt- Rank ja Remove aikavaatimus on O(n) Kaikki muut operaatiot O(1) käytetään rengasrakennetta (a la jono) kun lisäys/poisto alkuun/loppuun 0 1 2 3 4 5 6 7 8 9 Tietorakenteet, syksy 2007 17 Tietorakenteet, syksy 2007 18 Dynaaminen taulukko (esim. Javan Vector) jos koon N taulukko täyttyy(n = N), varataan kokoa 2N oleva taulukko jos n N/4, varataan kokoa N/2 oleva taulukko siirto uuteen taulukkoon: Θ(n) työtä voidaan osoittaa, että pahimmassakin tapauksessa keskimäärin O(1) per alkio Tietorakenteet, syksy 2007 19 siirto uuteen taulukkoon: Θ(n) työtä voidaan osoittaa, että pahimmassakin tapauksessa keskimäärin O(1) per alkio N/4 n N taulukon tilahukka O(n) Tietorakenteet, syksy 2007 20
Linkitetty lista: kussakin solmussa tietoalkio (tai viite sellaiseen) ja lisäksi viite toiseen solmuun listan tilahukka on Θ(n) vrt. dynaaminen taulukko: O(n) kutakin lisättyä/poistettua alkiota kohden tehty tietoalkion ja viitteen asetus vrt. dynaamisessa taulukossa siirrettävien alkioiden lukumäärä verrannollinen lisättyjen/poistettujen alkioden määrään Keskusmuisti (RAM) Taulukko A Tietorakenteet, syksy 2007 21 Tietorakenteet, syksy 2007 22 Keskusmuisti (RAM) Yhtenäiselle taulukolle voi olla hankalampaa varata muistia Taulukon ja (kaksoislinkitetyn) listan keskeinen suoritusajan tradeoff: alkion haku indeksin perusteella: taulukossa O(1), listassa O(n) lisäys/poisto keskellä: taulukossa O(n), listassa O(1) (jos lisäyskohta jo tiedetään) Tietorakenteet, syksy 2007 23 Tietorakenteet, syksy 2007 24