811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Samankaltaiset tiedostot
2. Perustietorakenteet

811312A Tietorakenteet ja algoritmit IV Perustietorakenteet

Algoritmit 1. Luento 4 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

A TIETORAKENTEET JA ALGORITMIT

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

18. Abstraktit tietotyypit 18.1

Algoritmit 2. Demot Timo Männikkö

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Algoritmit 2. Luento 7 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Tietorakenteet ja algoritmit

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

Algoritmit 1. Demot Timo Männikkö

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

4. Perustietorakenteet: pino, jono ja lista

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Tietorakenteet ja algoritmit

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

Algoritmit 1. Luento 9 Ti Timo Männikkö

Tietorakenteet ja algoritmit - syksy

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 4 To Timo Männikkö

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Tieto- ja tallennusrakenteet

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Aikavaativuuden perussäännöt

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

4. Perustietorakenteet

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

Tietorakenteet, laskuharjoitus 3, ratkaisuja

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Algoritmit 2. Luento 6 To Timo Männikkö

TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Ohjelmoinnin perusteet Y Python

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

Rakenteiset tietotyypit Moniulotteiset taulukot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 3 Ti Timo Männikkö

Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Algoritmit 1. Luento 8 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit I Johdanto

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

1.1 Tavallinen binäärihakupuu

A TIETORAKENTEET JA ALGORITMIT

Dynaaminen ohjelmointi ja vaikutuskaaviot

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Tietorakenteet, laskuharjoitus 4,

Tietorakenteet ja algoritmit

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Ohjelmistotuotanto, kurssikoe , H. Laine Arvostelu

Luku 3. Listankäsittelyä. 3.1 Listat

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Ohjelmoinnin perusteet Y Python

Binäärihaun vertailujärjestys

Ohjelmoinnin peruskurssi Y1

4. Joukkojen käsittely

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Ohjelmoinnin peruskurssien laaja oppimäärä

TIE Tietorakenteet ja algoritmit 261

STL:n uudistukset. Seppo Koivisto TTY Ohjelmistotekniikka

Algoritmit 1. Luento 14 Ke Timo Männikkö

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

Transkriptio:

811312A Tietorakenteet ja algoritmit 2017-2018 II Perustietorakenteet

Sisältö 1. Johdanto 2. Pino 3. Jono 4. Lista 811312A TRA, Perustietorakenteet 2

II.1. Johdanto Tietorakenne on tapa, jolla algoritmi 1. säilöö ja 2. järjestää käyttämäänsä dataa Määritelmä: Tietorakenne on äärellinen dynaaminen joukko, joka toteuttaa rajapintanaan sarjan operaatioita joiden kautta algoritmi voi muokata joukkoa. 811312A TRA, Perustietorekenteet 3

II.1. Johdanto (2) Tietorakenteen sisäinen rakenne: Joukko alkioita Alkioilla sisäinen rakenne Alkioihin voidaan yksikäsitteisesti osoittaa osoittimella Alkio sisältää joukon kenttiä, yleensä ainakin Avain, käytetään alkioiden vertailuun Satelliittidata, talletettuna alkioon mutta merkityksetön tietorakenteen sisäisen toiminnan kannalta Sovelluksen kannalta olennainen 811312A TRA, Perustietorakenteet 4

II.1.1 Dynaamiset joukot Kutsutaan myös sanakirjoiksi (dictionary) Operaatiot: ETSI(S, k) Etsii joukosta S alkion, jonka avain on k. LISÄÄ(S, x) Lisää alkion x joukkoon S POISTA(S, x) Poistaa alkion x joukosta S MINIMI(S) Etsii pienimmän alkion täydellisesti järjestetystä joukosta S 811312A TRA, Perustietorakenteet 5

II.1.1 Dynaamiset joukot (2) Operaatiot jatkuu MAKSIMI(S) Etsii suurimman täydellisesti järjestetystä joukosta S SEURAAJA(S, x) Etsii täydellisesti järjestetystä joukosta S alkiosta x seuraavaksi suuremman EDELTÄJÄ(S, x) Etsii täydellisesti järjestetystä joukosta S alkiosta x seuraavaksi pienemmän HUOM! Tietorakenteessa käytettävän dynaamisen joukon ei tarvitse välttämättä tukea kaikkia operaatioita! 811312A TRA, Perustietorakenteet 6

II.2 Pino (stack) Yksinkertainen tietorakenne, joka toimii LIFOperiaatteella (Last In First Out) Viimeksi lisätty alkio otetaan ensimmäisenä pois Viimeksi lisätty alkio pinon pää tai huippu (top) Voidaan käyttää esimerkiksi järjestyksen kääntämiseen, rekursiivisten kutsujen toteuttamiseen jne. 811312A TRA, Perustietorakenteet 7

II.2.1 Pinon operaatiot Taulukolla toteutettu pino: a) Pinossa 2,4,5 b) Lisätty 7 ja 2: pino täysi c) Poistettu 2, huipulla 7 811312A TRA, Perustietorakenteet 8

II.2.1 Pinon operaatiot (2) EMPTY(S) 1. if S.head == 0 2. return TRUE 3. else 4. return FALSE PUSH(S,x) #LISÄÄ 1. S.head = S.head + 1 2. S[S.head] = x 811312A TRA, Perustietorakenteet 9

II.2.1 Pinon operaatiot (3) POP(S) 1. if EMPTY(S) # POISTA 2. error Alivuoto 3. else 4. S.head = S.head 1 5. return S[S.head + 1] HUOM! Toteutettu taulukolla, jonka ensimmäinen indeksi on 1 Kaikkien operaatioiden kesto vakio riippumatta alkoiden lukumäärästä, jos toteutetaan taulukolla -> Pino erittäin tehokas tietorakenne 811312A TRA, Perustietorakenteet 10

II.3 Jono (queue) Yksinkertainen tietorakenne, joka toimii FIFOperiaatteella (First In First Out) Ensiksi lisätty alkio otetaan ensimmäisenä pois Jonon ensimmäinen alkio on pää tai keula (head). Häntä (tail) osoittaa paikkaan viimeisen alkion jälkeen Voidaan käyttää järjestyksen ylläpitoon Toteuttaa ainakin seuraavat operaatiot: jonoon lisääminen (enqueue) ja jonosta poisto (dequeue) 811312A TRA, Perustietorakenteet 11

II.3.1 Jonon operaatiot Taulukolla toteutettu jono: 811312A TRA, Perustietorakenteet 12

II.3.1 Jonon operaatiot (2) ENQUEUE(Q,x) 1. Q[Q.tail] = x 2. if Q.tail == Q.pituus 3. Q.tail = 1 4. else 5. Q.tail = Q.tail + 1 DEQUEUE(Q) 1. x = Q[Q.head] 2. if Q.head == Q.pituus 3. Q.head = 1 4. else 5. Q.head = Q.head + 1 HUOM! Toteutettu taulukolla -> operaatioiden kesto vakio riippumatta alkoiden lukumäärästä HUOM2! Ei varauduttu ali- ja ylivuotoon 6. return x 811312A TRA, Perustietorakenteet 13

II.4 Linkitetty lista (linked list) Linkitetyissä listoissa alkiot (solmut) ovat järjestyneet peräkkäisesti (lineaarisesti) Peräkkäisyys määräytyy osoittimilla solmusta seuraavaan solmuun Jokainen alkio siis sisältää osoittimen Lista voi olla myös kahteen suuntaan linkitetty, ts. solmussa osoitin sekä seuraajaan että edeltäjään Etu taulukolla toteutettuun tietorakenteeseen: ei kiinteää ylärajaa alkioiden lukumäärälle 811312A TRA, Perustietorakenteet 14

II.4.1 Linkitetyn listan toteutusvaihtoehdot a) Tavallinen yhteen suuntaan linkitetty lista b) Kahteen suuntaan linkitetty lista c) Renkaaksi linkitetty lista 811312A TRA, Perustietorakenteet 15

II.4.2 Kahteen suuntaan linkitetyn listan operaatiot LISTA_ETSI(L,k) 1. x = L.head 2. while x NIL and x.key k 3. x = x.next 4. return x LISTA_LISÄÄ(L,x) 1. x.next = L.head 2. if L.head NIL 3. (L.head).previous = x 4. L.head = x 5. x.previous = NIL 811312A TRA, Perustietorakenteet 16

II.4.2 Kahteen suuntaan linkitetyn listan operaatiot (2) LISTA_POISTA(L,x) 1. if x.previous NIL 2. (x.previous).next = x.next 3. else 4. L.head = x.next 5. if x.next NIL 6. (x.next).previous = x.previous 811312A TRA, Perustietorakenteet 17

II.4.3. Linkitetyn listan operaatioiden aikakompleksisuus Lisääminen ja poistaminen vakioaikainen Ellei poistettavaa tarvitse ensin etsiä, tarvitsee vain katkaista linkit Alkion etsimiseen kuluva aika suoraan verrannollinen alkioiden lukumäärään 811312A TRA, Perustietorakenteet 18