811312A Tietorakenteet ja algoritmit IV Perustietorakenteet
|
|
- Urho Katajakoski
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 811312A Tietorakenteet ja algoritmit IV Perustietorakenteet
2 Sisältö 1. Johdanto 2. Pinot, jonot ja listat 3. Hash-taulukot 4. Binääriset etsintäpuut 5. Puna-mustat puut 6. Tietorakenteiden täydentäminen A TRA, Perustietorakenteet 2
3 IV.1. Johdanto Määritelmä: Tietorakenne on äärellinen dynaaminen joukko, joka toteuttaa rajapintanaan sarjan operaatioita joiden kautta algoritmi voi muokata joukkoa. 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 A TRA, Perustietorekenteet 3
4 IV.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 A TRA, Perustietorakenteet 4
5 IV.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! A TRA, Perustietorakenteet 5
6 IV.2. Pinot, jonot ja listat IV.2.1. 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 A TRA, Perustietorakenteet 6
7 IV Pinon operaatiot Taulukolla toteutettu pino: a) Pinossa 2,4,5 b) Lisätty 7 ja 2: pino täysi c) Poistettu 2, huipulla A TRA, Perustietorakenteet 7
8 IV Pinon operaatiot (2) PINO_TYHJÄ(S) 1. if S.head == 0 2. return TRUE 3. else 4. return FALSE PINO_LISÄÄ(S,x) # PUSH 1. S.head = S.head S[S.head] = x A TRA, Perustietorakenteet 8
9 IV Pinon operaatiot (3) PINO_POISTA(S) # POP 1. if PINO_TYHJÄ(S) 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 Kaikki operaatiot vakioaikaisia, jos toteutetaan taulukolla -> Pino erittäin tehokas tietorakenne A TRA, Perustietorakenteet 9
10 IV.2.2 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) A TRA, Perustietorakenteet 10
11 IV Jonon operaatiot Taulukolla toteutettu jono: A TRA, Perustietorakenteet 11
12 IV Jonon operaatiot (2) JONO_LISÄÄ(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 JONO_POISTA(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 -> operaatiot vakioaikaisia HUOM2! Ei varauduttu ali- ja ylivuotoon 6. return x A TRA, Perustietorakenteet 12
13 IV.2.3 Linkitetty lista 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 A TRA, Perustietorakenteet 13
14 IV Linkitetyn listan toteutusvaihtoehdot a) Tavallinen yhteen suuntaan linkitetty lista b) Kahteen suuntaan linkitetty lista c) Renkaaksi linkitetty lista A TRA, Perustietorakenteet 14
15 IV 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 A TRA, Perustietorakenteet 15
16 IV Kahteen suuntaan linkitetyn listan operaatiot (2) LISTA_POISTA(L,x) 1. if x.previous NIL 2. (x.prevous).next = x.next 3. else 4. L.head = x.next 5. if x.next NIL 6. (x.next).previous = x.previous A TRA, Perustietorakenteet 16
17 IV Linkitetyn listan operaatioiden aikakompleksisuus Lisääminen ja poistaminen vakioaikainen Ellei poistettavaa tarvitse ensin etsiä Etsiminen lineaariaikainen A TRA, Perustietorakenteet 17
18 IV.3 Hash-taulukot Käytetään toteutettaessa tietoalkiojoukko, johon voidaan kohdistaa lisäys- poisto- ja hakuoperaatioita Apuna tiiviste- eli hashfunktiot Oletus: Tietoalkioissa yksilöllinen avainkenttä Suora osoittaminen: Varataan taulukko, jossa paikka jokaiselle avainkentän arvolle Operaatiot nopeita Ongelma: Yleensä arvoja liikaa A TRA, Perustietorakenteet 18
19 IV.3 Hash-taulukot (2) Pienennetään tallennustaulukon kokoa T[1..m] m (paljon) pienempi kuin avainten lukumäärä Tarvitaan funktio h avaimilta joukolle {1,,m} Ns. tiivistefunktio (hash function) Tietoalkion avain k: tallennetaan paikkaan T[h(k)] Operaatiot tehokkaita (vakioaika) Törmäysongelma: Jotkin avaimet kuvautuvat samalle arvolle Väistämätöntä, koska arvoja vähemmän kuin avaimia A TRA, Perustietorakenteet 19
20 IV.3.1 Törmäysongelma Ratkaisu: ketjutetaan samalle arvolle kuvautuvat avaimet Taulukkoon osoitin linkitettyyn listaan Tietoalkio löytyy listaa seuraamalla Seuraus: Operaatiot eivät enää vakioaikaisia A TRA, Perustietorakenteet 20
21 T Kaikki avaimet / k 4 k 8 / Käytetyt avaimet k 8 / k 1 k 2 k 7 / k 2 k 1 k 4 k 3 k 7 k 5 k 6 h(k 1 ) = h(k 2 ) = h(k 7 ) / / / / k 3 k 5 / k 6 / h(k 4 ) = h(k 8 ) h(k 3 ) = h(k 5 ) Törmäysongelman ratkaiseminen ketjuttamalla
22 IV.3.1 Törmäysongelma (2) Oletetaan, että tallennettuja avaimia n kappaletta -> keskimäärin yhteen taulukon paikkaan n/m avainta, jos tiivistefunktio jakaa avaimet tasaisesti Suhde n/m on taulukon täyttöaste Listan pään hakeminen on vakioaikainen operaatio Listaoperaatioiden lukumäärä suoraan verrannollinen listan pituuteen Keskimäärin n/m Siis operaatioiden keskimääräinen kompleksisuus luokkaa O(1+n/m) A TRA, Perustietorakenteet 22
23 IV.3.2. Millainen on hyvä tiivistefunktio? Riippuu käyttötarkoituksesta Tietoalkioiden tallennuksen ja haun tehokkuus: Kuvaa arvot mahdollisimman tasaisesti Tietoturvasovellukset: Minimoi törmäykset, estää avaimen arvaamisen kun tiiviste tunnetaan A TRA, Perustietorakenteet 23
24 IV.3.3. Erilaisia tiivistefunktioita Oletus: Avaimet lukuja 0,1,2,3, Jakomenetelmä: h( k) k(mod m) m valittava sopivasti: yleensä alkuluku Esimerkki: avaimia ja voidaan tallentaa keskimäärin 10 avainta samaan listaan. Valitaan m alkuluvuksi läheltä lukua 1000, esim. m = A TRA, Perustietorakenteet 24
25 IV.3.3. Erilaisia tiivistefunktioita (2) Tulomenetelmä: h( k) m ( ka(mod1)) A jokin reaalilukuvakio 0 < A < 1 Etu: Ei riipu kriittisesti luvusta m A TRA, Perustietorakenteet 25
26 Tulomenetelmän implementointi: Sanan pituus w Valitaan m=2 p, s väliltä (0,2 w ) A = s/2 w w bittiä k s=a 2 w k s: r 1 r 0 p bittiä = h(k)
27 IV.3.4. Avoin osoittaminen Ei ketjuteta avaimia, vaan etsitään taulukosta vapaa paikka niin kauan kuin mahdollista Yksi menetelmä luotaaminen (probing): tiivistefunktio riippuu avaimen lisäksi parametrista, jonka arvot voivat olla 0,...,m-1, kun taulukon koko on m Avain k yritetään tallentaa ensiksi paikkaan h(k,0) ja jos varattu, paikkaan h(k,1), h(k,2) jne. kunnes löytyy vapaa kohta Hyöty verrattuna tavalliseen taulukkoon tallentamiseen: ei aloiteta aina taulukon alusta, vaan avaimesta riippuvasta arvosta; lisäksi luotausjono riippuu myös avaimesta k-> törmäysten mahdollisuus vähenee A TRA, Perustietorakenteet 27
28 IV.3.4. Avoin osoittaminen: Tallennus Syöte: Taulukko T[1,..,m], m >= 1, lisättävä avain k Tulostus: Taulukon indeksi, johon avain lisätään tai arvo OVERFLOW jos taulukko oli täynnä. HASH_TALLENNA(T,k) 1. i = 0 2. while i<m 3. j = h(k,i) 4. if T[j]==NIL 5. T[j]=k 6. return j 7. i = i+1 8. return OVERFLOW A TRA, Perustietorakenteet 28
29 IV.3.4. Avoin osoittaminen: Haku (3) Syöte: Taulukko T[1,..,m], m >= 1, etsittävä avain k Tulostus: Taulukon indeksi, josta avain löydetään tai arvo NIL jos avain ei ole taulukossa. HASH_ETSI(T,k) 1. i = 0 2. j = h(k,i) 3. while (i<m && T[j]!=NIL) 4. if T[j]==k 5. return j 6. i = i+1 7. if i<m 8. j = h(k,i) 9. return NIL A TRA, Perustietorakenteet 29
30 IV.3.4. Avoin osoittaminen: Poistaminen Avaimen poistaminen ei aivan näin suoraviivaista Voidaan joutua poistamaan luotausjonon keskeltä Voitaisiin käyttää erikoisarvoa DEL merkitsemään tuhotut -> etsittäessä ohitetaan nämä arvot Jos poistoja usein kannattaa mieluummin ketjuttaa Luotauksen etuja: Rajoitettu muistin käyttö ja helpompi osoittaminen A TRA, Perustietorakenteet 30
31 IV Erilaisia luotausmenetelmiä Lineaarinen luotaus: Tunnetaan jokin tiivistefunktio f (esimerkiksi tulomenetelmällä saatu) Nyt käytetään tiivistefunktiota h( k, i) ( f ( k) i)(mod m) Helppo implementoida Jokaisella avaimelle luotausjono sisältää kaikki arvot 0..m Kasautumisongelma: Avain sattuu todennäköisemmin pitkään varattuun jonoon kuin lyhyeen ja haku hidastuu A TRA, Perustietorakenteet 31
32 IV Erilaisia luotausmenetelmiä (2) Neliöllinen luotaus Tunnetaan jokin tiivistefunktio f Nyt käytetään tiivistefunktiota h( k, i) ( f ( k) 2 c1 i c2 i )(mod m) c 1 ja c 2 positiivisia vakioita Kasautumisongelma poistuu Vakiot valittava taulukon kokoon sopivasti A TRA, Perustietorakenteet 32
33 IV Erilaisia luotausmenetelmiä (3) Kaksoishashaus Pidetään yhtenä parhaimmista menetelmistä Tunnetaan kaksi tiivistefunktiota f ja g Tällöin tiivistefunktio on h( k, i) ( f ( k) i g( k))(mod m) Erilaisia luotausjonoja noin m 2 kappaletta Funktio on valittava sopivasti, jotta jonot sisältäisivät kaikki arvot Sopivasti toteutettuna lähellä ideaalitapausta A TRA, Perustietorakenteet 33
34 IV.3.5. Tiivistefunktioiden muita sovelluksia Tarkistussumma: Viesti k ja sen tiiviste h(k) Lähetetään pari (k,h(k)) -> Vastaanottaja voi tarkistaa, onko viesti muuttunut matkalla Huom! Ei yleensä suojaa tarkoitukselliselta muuttamiselta MAC-funktio (Message Authentication Code): Tiiviste riippuu viestistä ja avaimesta, joka ainoastaan lähettäjällä ja vastaanottajalla Funktion oltava vaikea väärentää, ts. kun h(k) tunnetaan, hankala keksiä sellaista viestiä m, että h(m)=h(k) A TRA, Perustietorakenteet 34
35 IV.4 Binääriset etsintäpuut T binääripuu ja x sen solmu. Merkinnät: T.root osoitin puun juureen x.left osoitin solmun x vasempaan alipuuhun x.right osoitin solmun x oikeaan alipuuhun x.p osoitin solmun x vanhempaan A TRA, Perustietorakenteet 35
36 IV.4 Binääriset etsintäpuut (2) Binäärinen etsintäpuu (binäärinen hakupuu, binary search tree) on binääripuu, jossa solmun avain on aina suurempi tai yhtä suuri kuin solmujen arvot sen vasemmassa alipuussa ja pienempi tai yhtä suuri kuin solmujen arvot oikeassa alipuussa. Binäärisessä etsintäpuussa pätee siis x.left.key <= x.key <= x.right.key HUOM! Jokainen alipuu on edelleen etsintäpuu Rekursiivisen rakenteen vuoksi helppo käsitellä algoritmisesti A TRA, Perustietorakenteet 36
37 Esimerkki binäärisestä hakupuusta A TRA, Perustietorakenteet 37
38 IV.4.1 Binäärisen etsintäpuun läpikäynti Syöte: Binäärisen etsintäpuun solmu x Tulostus: Tulostaa solmusta x lähtevän alipuun avaimet suuruusjärjestyksessä BST_SISÄJÄRJESTYS(x) 1. if x!= NIL 2. BST_SISÄJÄRJESTYS(x.left) 3. tulosta x.key 4. BST_SISÄJÄRJESTYS(x.right) Siis kutsu BST_SISÄJÄRJESTYS(T.root) tulostaa kaikki puun avaimet suuruusjärjestyksessä A TRA, Perustietorakenteet 38
39 IV.4.2 Haku binäärisestä etsintäpuusta Syöte: BST:n juuri x, etsittävä avain k Tulostus: Palauttaa osoittimen solmuun joka sisältää avaimen tai arvon NIL jos avain ei ole puussa. BST_ETSI(x,k) 1. y = x 2. while y!=nil && y.key!=k 3. if y.key < k // k oikealla 4. y = y.right 5. else // k vasemmalla 6. y = y.left 7. return y Kompleksisuus luokkaa Ɵ(h) missä h on puun korkeus A TRA, Perustietorakenteet 39
40 IV.4.3 Binäärisen etsintäpuun minimi ja maksimi Syöte: Binäärisen etsintäpuun juuri x Tulostus: Palauttaa osoittimen solmuun joka sisältää puun pienimmän /suurimman avaimen tai arvon NIL, jos puu on tyhjä. BST_MINIMI(x) 1. if x==nil 2. return NIL 3. y = x 4. while y.left!=nil 5. y = y.left 6. return y BST_MAKSIMI(x) 1. if x==nil 2. return NIL 3. y = x 4. while y.right!=nil 5. y = y.right 6. return y Kompleksisuudet luokkaa Ɵ(h) missä h on puun korkeus A TRA, Perustietorakenteet 40
41 IV.4.4 Avaimen lisääminen Syöte: Binäärinen etsintäpuu T ja lisättävä avain k Tulostus: Lisää avaimen sisältävän solmun puun lehtisolmuksi. 10. else if k > x.key BST_LISÄÄ(T,k) 11. x=x.right 1. Uusi solmu t 12. else 2. t.key = k 13. return 3. t.left = NIL 14. t.p = y 4. t.right = NIL 15. if y==nil 5. x = T.root 16. T.root = t 6. while x!= NIL 17. else if k < y.key 7. y=x 18. y.left = t 8. if k < x.key 19. else 9. x=x.left 20. y.right = t 21. return 41
42 IV.4.4 Avaimen poistaminen Avain lehtisolmussa: A TRA, Perustietorakenteet 42
43 IV.4.4 Avaimen poistaminen (2) Avain solmussa, jolla yksi alipuu A TRA, Perustietorakenteet 43
44 IV.4.4 Avaimen poistaminen (3) Avain solmussa jolla kaksi alipuuta A TRA, Perustietorakenteet 44
45 IV.4.4 Avaimen poistaminen: apualgoritmi Syöte: Binäärinen etsintäpuu T ja sen solmut u ja v (v voi olla NIL) Tulostus: Binäärinen etsintäpuu, jossa solmusta u lähtevän alipuun tilalle on siirretty solmusta v lähtevä alipuu BST_TRANSPLANT(T,u,v) 1. if u.p == NIL // u oli juuri 2. T.root = v 3. else if u == u.p.left // u vas. alipuussa 4. u.p.left = v 5. else 6. u.p.right = v // u oik. alipuussa 7. if v!= NIL 8. v.p = u.p A TRA, Perustietorakenteet 45
46 IV.4.4 Avaimen poistaminen: algoritmi Syöte: BST T ja poistettava avain k Tulostus: Poistaa avaimen puusta, jos se esiintyy. Paluu: TRUE,jos avain puussa, FALSE muuten. HUOM: BST_TR = BST_TRANSPLANT ja BST_MIN = BST_MINIMI 10. if y.p!= x BST_POISTA(T,k) 11. BST_TR(T,y,y.right) 1. x = BST_ETSI(T,k) 12. y.right = x.right 2. if x == NIL 13. y.right.p = y 3. return FALSE 14. BST_TRANSPLANT(T,x,y) 4. if x.left == NIL 15. y.left = x.left 5. BST_TR(T,x,x.right) 16. y.left.p = y 6. else if x.right == NIL 17. return TRUE 7. BST_TR(T,x,x.left) 8. else 9. y = BST_MIN(x.right) 46
47 IV.4.5 Avaimen lisääminen ja poistaminen: kompleksisuus Lisääminen: Jokaisella silmukan kierroksella syvemmälle puussa, silmukassa vakioaikaisia operaatioita -> kompleksisuus luokkaa Ɵ(h) missä h on puun korkeus Poistaminen: BST_TRANSPLANT vakioaikainen, muuten vakioaikaisia operaatioita paitsi yksi BST_ETSI ja korkeintaan yksi BST_MINIMI -> kompleksisuus luokkaa Ɵ(h) missä h on puun korkeus HUOM! Puun rakenteesta riippuu miten solmujen lukumäärä suhtautuu puun korkeuteen Yleisesti tiedetään vain että h <= n Jos puu tasapainossa niin n luokkaa 2 h A TRA, Perustietorakenteet 47
48 IV.5 Puna-mustat puut Yksi tapa pitää puu tasapainossa myös solmuja lisättäessä ja poistettaessa Binäärinen hakupuu on puna-musta puu, jos 1-5 voimassa: 1. Jokainen solmu on joko punainen tai musta. 2. Juuri on musta. 3. Jokainen lehti (NIL) on musta. 4. Jos solmu on punainen, sen molemmat lapset ovat mustia. 5. Kaikille solmuille on voimassa: Jokainen polku solmusta sen jälkeläislehtiin sisältää saman lukumäärän mustia solmuja A TRA, Perustietorakenteet 48
49 Esimerkki: ehdot eivät voimassa Yo. puut eivät puna-mustia. Miksi? A TRA, Perustietorakenteet 49
50 Esimerkki: Ehdot voimassa Puna-musta puu. Tarkista ehdot 1-5! A TRA, Perustietorakenteet 50
51 IV.5.1 Puna-mustan puun korkeus Solmun x mustakorkeus bh(x) on sen mustien jälkeläisten lukumäärä polussa solmusta x puun lehteen saakka Puna-mustalle puulle voimassa: Alipuu, jonka juuri x on, sisältää vähintään 2 bh(x) -1 solmua Ylläolevasta seuraa: Jos puna-mustassa puussa n solmua ja sen korkeus on h, niin h 2lg(n+1) Puu on siis riittävän tasapainossa, jotta operaatiot voisivat olla logaritmisia A TRA, Perustietorakenteet 51
52 IV.5.2 Puna-mustien puiden operaatiot Binääristen hakupuiden BST_ETSI, BST_MINIMI, BST_MAKSIMI soveltuvat sellaisinaan Näiden kompleksisuus Ɵ(h), missä h puun korkeus Jos solmuja n, niin ehdon h 2lg(n+1) ja edellisen nojalla kompleksisuus Ɵ(lg(n)) Lisäämiselle ja poistamiselle uudet operaatiot, jotta puna-musta-ominaisuus pysyy voimassa A TRA, Perustietorakenteet 52
53 IV.5.2 Puna-mustien puiden operaatiot: rotaatio x RBT_VASEN_ROTAATIO(T,x) y a y RBT_OIKEA_ROTAATIO(T,y) x c b c a b Vasen ja oikea rotaatio graafisesti Rotaatioita tarvitaan rakenteen ylläpitoon A TRA, Perustietorakenteet 53
54 IV Vasen rotaatio Syöte: Binäärinen etsintäpuu T ja solmu x, jonka suhteen kierretään. Oletus: x.right!= NIL Tulostus: Suorittaa puussa vasemman rotaation solmun x suhteen RBT_VASEN_ROTAATIO(T,x) 1. y = x.right 2. x.right = y.left 3. if y.left!= NIL 4. y.left.p = x 5. y.p = x.p 6. if x.p == NIL 7. T.root = y 8. else if x == x.p.left 9. x.p.left = y 10. else 11. x.p.right = y 12. y.left = x 13. x.p = y 14. return Operaatio vakioaikainen Oikea rotaatio tehdään symmetrisesti 54
55 IV Puna-mustaan puuhun lisääminen Syöte: Puna-musta puu T ja solmu z, jonka avain on lisättävä avain. Tulostus: Lisää avaimen z.key puuhun niin, että T säilyy puna-mustana. RBT_LISÄÄ(T,z) 1. y = NIL 2. x = T.root 3. while x!= NIL 4. y = x 5. if z.key < x.key 6. x = x.left 7. else 8. x = x.right 9. z.p = y 10. if y == NIL 11. T.root = z 12. else if z.key < y.key 13. y.left = z 14. else 15. y.right = z 16. z.left = NIL 17. z.right = NIL 18. z.color = RED 19. RBT_LISÄYS_KORJAUS(T,z) 55
56 IV Puna-mustaan puuhun lisääminen (2) Syöte: Puu T ja solmu z, joka on lisätty T:hen. T on ollut puna-musta puu ennen z:n lisäystä. Tulostus: Korjaa T:n puna-mustaksi. RBT_LISÄYS_KORJAUS(T,z) 1. while z.p.color == RED 2. if z.p == z.p.p.left 3. L_KORJAA_VASEN(T,z) 4. else 5. L_KORJAA_OIKEA(T,z) 6. T.root.color = BLACK L_KORJAA_VASEN(T,z) 1. y = z.p.p.right 2. if y.color == RED 3. z.p.color = BLACK 4. y.color = BLACK 5. z.p.p.color = RED 6. z = z.p.p 7. else 8. if z == z.p.right 9. z = z.p 10. RBT_VASEN_ROTAATIO(T,z) 11. z.p.color = BLACK 12. z.p.p.color = RED 13. RBT_OIKEA_ROT...(T,z.p.p) Oikea puoli korjataan vastaavasti 56
57 IV Puna-mustasta puusta poistaminen: apualgoritmi Syöte: Puna-musta puu T ja sen solmu u sekä solmu v. Tulostus: Poistaa puusta u:n ja siitä lähtevän alipuun ja korvaa tämän solmulla v ja siitä lähtevällä alipuulla. RBT_TRANSPLANT(T,u,v) 1. if u.p == NIL 2. T.root = v 3. else 4. if u == u.p.left 5. u.p.left = v 6. else 7. u.p.right = v 8. v.p = u.p A TRA, Perustietorakenteet 57
58 IV Puna-mustasta puusta poistaminen (2) Syöte: Puna-musta puu T ja sen solmu z. Tulostus: Poistaa puusta solmun z niin, että jäljelle jää puna-musta puu. RBT_POISTA(T,z) 1. y = z 2. y_orig_color = y.color 3. if z.left == NIL 4. x = z.right 5. RBT_TRANSPLANT(T,z,z.right) 6. else 7. if z.right == NIL 8. x = z.left 9. RBT_TRANSPLANT(T,z,z.left) 10. else 11. y = BST_MINIMI(z.right) 12. y_orig_color = y.color 13. x = y.right 14. if y.p == z 15. x.p = y 16. else 17. RBT_TRANSPLANT(T,y, y.right) 18. y.right = z.right 19. y.right.p = y 20. RBT_TRANSPLANT(T,z,y) 21. y.left = z.left 22. y.left.p = y 23. y.color = z.color 24. if y_orig_color == BLACK 25. RBT_POISTO_KORJAUS(T,x) 58
59 IV Puna-mustasta puusta poistaminen (3) Syöte: Puu T ja solmu x. Tulostus: Korjaa T:n punamustaksi. RBT_POISTO_KORJAUS(T,x) 1. while x!= T.root && x.color == BLACK 2. if x == x.p.left 3. P_KORJAA _VASEN(T,x) 4. else 5. P_KORJAA_OIKEA(T,x) 6. x.color = BLACK P_KORJAA_VASEN(T,x) 1. w = x.p.right 2. if w.color == RED 3. w.color = BLACK 4. x.p.color = RED 5. RBT_VASEN_ROTAATIO(T, x.p) 6. w = x.p.right 7. if w.left.color == BLACK && w.right.color == BLACK 8. w.color = RED 9. x = x.p 10. else 11. if w.right.color == BLACK 12. w.left.color = BLACK 13. w:color = RED 14. RBT_OIKEA_ROTAATIO(T,w) 15. w = x.p.right 16. w.color = x.p.color 17. x.p.color = BLACK 18. w.right.color = BLACK 19. RBT_VASEN_ROTAATIO(T,x.p) 20. x = T.root Oikea puoli korjataan vastaavasti 59
60 IV Puna-mustan puun operaatioiden kompleksisuus Oletetaan: puussa n avainta ja puun korkeus h Lisäysalgoritmissa askelittain puussa syvemmälle, lopuksi korjaus, joka tekee samoin (rotaatiot vakioaikaisia) -> operaatio luokkaa O(h) ja siten O(lg(n)) Poisto: RBT_TRANSPLANT vakioaikainen, rotaatiot vakioaikaisia BST_MINIMI luokkaa O(h), samoin korjaus -> operaatio luokkaa O(h) ja siten O(lg(n)) A TRA, Perustietorakenteet 60
61 IV.6 Tietorakenteiden täydentäminen Ohjelman suunnittelussa kohdataan usein tilanteita, joissa valmiit tietorakenteet eivät sellaisenaan sovellu Kehitettävä ratkaisuun soveltuva uusi tietorakenne Harvoin tarpeellista Muokattava olemassa olevaa tietorakennetta lisätiedolla ja uusilla operaatioilla Riittää useimmin Ei aina ihan helppoa, koska tietorakenteen operaatioita voidaan joutua muuttamaan A TRA, Perustietorakenteet 61
62 IV.6.1 Esimerkki: Järjestystunnusluvut A järjestämätön joukko jossa n alkiota. Joukon A i:s järjestystunnusluku on sen i:nneksi pienin alkio. Jos joukon A i:s järjestystunnusluku on x, niin alkion x järjestysluku (rank) joukossa A on i A TRA, Perustietorakenteet 62
63 IV.6.1. Esimerkki: Järjestystunnusluvut (2) Laadittava ohjelma, jossa joukosta löydetään tehokkaasti i:s järjestysluku Voidaan hakea järjestämättömästä taulukosta ajassa O(n), kun taulukossa n alkiota Rekursiivisesti jakamalla taulukkoa kuten QUICKSORT-algoritmissa Pyritään parempaan tehokkuuteen Valitaan tietorakenteeksi järjestystunnuspuu: Punamusta puu, jossa solmuun lisätty kenttä size, joka kertoo kyseisen solmun määrittämässä alipuussa sijaitsevien sisäsolmujen lukumäärän mukaan lukien solmu itse A TRA, Perustietorakenteet 63
64 IV Järjestystunnuspuu A TRA, Perustietorakenteet 64
65 IV Järjestystunnusluvun hakeminen Syöte: Järjestystunnuspuun solmu x ja luku i Tulostus: Palauttaa osoittimen solmuun, joka sisältää i:nneksi pienimmän luvun solmun x määrittämässä alipuussa 1. OS_SELECT(x,i) 2. r = x.left.size+1 3. if i == r 4. return x 5. else if i < r 6. return OS_SELECT(x.left,i) 7. else 8. return OS_SELECT(x.right, i-r) A TRA, Perustietorakenteet 65
66 IV Solmun järjestysluvun hakeminen Syöte: Järjestystunnuspuu T ja sen solmu x Tulostus: Palauttaa solmun x järjestysluvun 1. OS_RANK(T,x) 2. r = x.left.size y = x 4. while y!= T.root 5. if y == y.p.right 6. r = r + y.p.left.size y = y.p 8. return r A TRA, Perustietorakenteet 66
67 IV Operaatioiden analyysi Varmista, että OS_SELECT ja OS_RANK korrekteja! OS_SELECT jokaisella rekursiivisella kutsulla syvemmälle puuhun -> kompleksisuus luokkaa Ɵ(h) missä h on puun korkeus OS_RANK jokaisella silmukan kierroksella ylemmäksi puussa -> kompleksisuus luokkaa Ɵ(h) missä h on puun korkeus Koska puna-musta puu, niin kompleksisuus luokkaa Ɵ(lg(n)), missä n solmujen lukumäärä A TRA, Perustietorakenteet 67
68 IV Muutokset puna-mustan puun toimintoihin Avaimen etsiminen, minimi ja maksimi voidaan hakea entiseen tapaan Avaimen lisääminen ja poistaminen muutettava niin että kenttä size pysyy oikeana Muutetaan aluksi rotaatiot tukemaan kenttää size Vasempaan rotaatioon solmujen päivitys RBT_VASEN_ROTAATIO(T,x) 1. y = x.right // Kuten ennen 14. y.size = x.size 15. x.size = x.left.size+x.right.size return A TRA, Perustietorakenteet 68
69 IV Muutokset puna-mustan puun toimintoihin (2) Oikeaan rotaatioon solmujen päivitys RBT_OIKEA_ROTAATIO(T,x) 1. y = x.left // Kuten ennen 14. y.size = x.size 15. x.size = x.left.size+x.right.size return A TRA, Perustietorakenteet 69
70 IV Muutokset puna-mustan puun toimintoihin: Lisäys Lisättävän solmun size-kenttään arvo 1 Lisättäessä lehden hakupolulla kasvatetaan kaikkien solmujen kenttää arvolla 1 -> size-kentät oikeat kun solmu lehdessä Rotaatioilla puna-mustaominaisuus kuntoon -> Kun sovelletaan muutettua rotaatiota, myös size-kentät pysyvät kunnossa Operaation kompleksisuus säilyy samana, on ts. Ɵ(lg(n)), missä n solmujen lukumäärä A TRA, Perustietorakenteet 70
71 IV Muutokset puna-mustan puun toimintoihin: Poistaminen Jos poistettavalla solmulla ei ole kahta alipuuta, voidaan ensin vähentää solmusta juureen kulkevassa polussa kaikkien solmujen size-kenttää arvolla 1. Tämän jälkeen solmu poistetaan Jos poistettavalla solmulla on kaksi alipuuta haetaan oikealta minimisolmu ja vähennetään minimisolmusta juureen kulkevassa polussa kaikkien solmujen sizekenttää arvolla 1. Tämän jälkeen solmu poistetaan Rotaatioilla puna-mustaominaisuus kuntoon -> muutetuilla rotaatioilla myös size-kentät kunnossa Operaation kompleksisuus säilyy samana, on ts. Ɵ(lg(n)), missä n solmujen lukumäärä A TRA, Perustietorakenteet 71
72 IV.6.2. Tietorakenteen täydentämisen formalismi 1. Alla olevan tietorakenteen valinta Esimerkissä puna-musta puu 2. Täydentämisen kautta lisättävän informaation tarkka määrittely Esimerkissä solmujen size-kenttä 3. Uuden informaation oikean käsittelyn verifiointi tietorakenteen perusoperaatioille Esimerkissä size-kentän ylläpito lisättäessä ja poistettaessa 4. Uusien operaatioiden kehittäminen Esimerkissä OS_SELECT ja OS_RANK A TRA, Perustietorakenteet 72
811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut
811312A Tietorakenteet ja algoritmit 2018-2019 V Hash-taulukot ja binääriset etsintäpuut Sisältö 1. Hash-taulukot 2. Binääriset etsintäpuut 811312A TRA, Hash-taulukot, binääripuut 2 V.1 Hash-taulukot Käytetään
Lisätiedot811312A Tietorakenteet ja algoritmit II Perustietorakenteet
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
Lisätiedot4. Perustietorakenteet
4. Perustietorakenteet Tässä osassa käsitellään erilaisia tietorakenteita, joita algoritmit käyttävät toimintansa perustana. Aluksi käydään läpi tietorakenteen abstrakti määritelmä. Tämän jälkeen käsitellään
Lisätiedot5. Hash-taulut ja binääriset etsintäpuut
5. Hash-taulut ja binääriset etsintäpuut Tässä osassa käsitellään tietorakenteista hash-taulukot ja binääriset etsintäpuut ja niiden perusalgoritmit. Teoksessa [Cor] käsitellään tässä esitettäviä asioita
Lisätiedot8. Puna-mustat puut ja tietorakenteiden täydentäminen
8. Puna-mustat puut ja tietorakenteiden täydentäminen Tässä osassa perehdytään puna-mustiin puihin, jotka toteuttavat yhden tavan pitää binäärinen hakupuu tasapainossa. Teoksessa [Cor] käsitellään puna-mustia
Lisätiedot811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu
1312A Tietorakenteet ja algoritmit, 2016-2017, Harjoitus 5, Ratkaisu Harjoituksen aihe ovat hash-taulukot ja binääriset etsintäpuut Tehtävä 5.1 Tallenna avaimet 10,22,31,4,15,28,17 ja 59 hash-taulukkoon,
Lisätiedot811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu
1312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 5, Ratkaisu Harjoituksen aihe ovat hash-taulukot ja binääriset etsintäpuut Tehtävä 5.1 Tallenna avaimet 10,22,31,4,15,28,17 ja 59 hash-taulukkoon,
Lisätiedot2. Perustietorakenteet
2. Perustietorakenteet Tässä osassa käsitellään erilaisia perustietorakenteita, joita algoritmit käyttävät toimintansa perustana. Aluksi käydään läpi tietorakenteen abstrakti määritelmä. Tämän jälkeen
Lisätiedot811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta
811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta jälkiosasta IV Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden aikakompleksisuus
LisätiedotAlgoritmit 2. Luento 2 To Timo Männikkö
Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento
LisätiedotAlgoritmit 2. Luento 2 Ke Timo Männikkö
Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento
LisätiedotAlgoritmit 2. Luento 4 To Timo Männikkö
Algoritmit 2 Luento 4 To 21.3.2019 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2019 Luento 4
LisätiedotAlgoritmit 2. Luento 4 Ke Timo Männikkö
Algoritmit 2 Luento 4 Ke 22.3.2017 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2017 Luento 4
LisätiedotHakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina
Hakupuut tässä luvussa tarkastelemme puita tiedon tallennusrakenteina hakupuun avulla voidaan toteuttaa kaikki joukko-tietotyypin operaatiot (myös succ ja pred) pahimman tapauksen aikavaativuus on tavallisella
LisätiedotAlgoritmit 2. Luento 3 Ti Timo Männikkö
Algoritmit 2 Luento 3 Ti 20.3.2018 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2018 Luento 3 Ti 20.3.2018
LisätiedotAlgoritmit 2. Luento 3 Ti Timo Männikkö
Algoritmit 2 Luento 3 Ti 21.3.2017 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2017 Luento 3 Ti 21.3.2017
LisätiedotAlgoritmit 1. Luento 7 Ti Timo Männikkö
Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017
Lisätiedotv 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.
Yleiset hakupuut 4 Monitiehakupuu: Binäärihakupuu 0 1 3 5 6 7 8 v k 1 k k 3 v v 3 v 4 k 1 k 3 k 1 k k k 3 d lapsisolmua d 1 avainta Yleinen hakupuu? Tietorakenteet, syksy 007 1 Esimerkki monitiehakupuusta
LisätiedotAlgoritmit 2. Luento 7 Ti Timo Männikkö
Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26
LisätiedotAlgoritmit 1. Luento 4 Ke Timo Männikkö
Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,
LisätiedotAlgoritmit 2. Luento 5 Ti Timo Männikkö
Algoritmit 2 Luento 5 Ti 26.3.2019 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot B-puun muunnelmia Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 2/34 B-puu B-puut ovat tasapainoisia
Lisätiedot(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:
Tietorakenteet ja algoritmit, kevät 201 Kurssikoe 1, ratkaisuja 1. Tehtävästä sai yhden pisteen per kohta. (a) Invariantteja voidaan käyttää algoritmin oikeellisuustodistuksissa Jokin väittämä osoitetaan
Lisätiedot811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta
811312A Tietorakenteet ja algoritmit 2018-2019 Kertausta jälkiosasta V Hashtaulukot ja binääriset etsintäpuut Hashtaulukot Perusajatus tunnettava Tiedettävä mikä on tiivistefunktio Törmäysongelman hallinta:
Lisätiedot811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu
832A Tietorakenteet ja algoritmit, 204-205, Harjoitus 7, ratkaisu Hajota ja hallitse-menetelmä: Tehtävä 7.. Muodosta hajota ja hallitse-menetelmää käyttäen algoritmi TULOSTA_PUU_LASKEVA, joka tulostaa
LisätiedotAlgoritmit 2. Luento 6 To Timo Männikkö
Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100
LisätiedotAlgoritmit 2. Demot Timo Männikkö
Algoritmit 2 Demot 2 3.-4.4.2019 Timo Männikkö Tehtävä 1 Avoin osoitteenmuodostus: Hajautustaulukko t (koko m) Erikoisarvot VAPAA ja POISTETTU Hajautusfunktio h(k,i) Operaatiot: lisaa etsi poista Algoritmit
LisätiedotAlgoritmit 1. Luento 8 Ke Timo Männikkö
Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin
LisätiedotAlgoritmit 1. Luento 6 Ke Timo Männikkö
Algoritmit 1 Luento 6 Ke 25.1.2017 Timo Männikkö Luento 6 Järjestetty lista Listan toteutus dynaamisesti Linkitetyn listan operaatiot Vaihtoehtoisia listarakenteita Puurakenteet Binääripuu Järjestetty
Lisätiedot811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta
811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen
LisätiedotAlgoritmit 2. Luento 6 Ke Timo Männikkö
Algoritmit 2 Luento 6 Ke 29.3.2017 Timo Männikkö Luento 6 B-puun operaatiot B-puun muunnelmia Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 2/31 B-puu
LisätiedotAVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta
AVL-puut eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta pohjana jo esitetyt binäärihakupuiden operaatiot tasapainotus vie pahimmillaan lisäajan lisäys- ja
Lisätiedot58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia
58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, 25.2.2013, vastauksia 1. (a) O-merkintä Ω-merkintä: Kyseessä on (aika- ja tila-) vaativuuksien kertalukumerkinnästä. O-merkintää käytetään ylärajan
Lisätiedot811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista
811312A Tietorakenteet ja algoritmit 2016-2017 III Lajittelualgoritmeista Sisältö 1. Johdanto 2. Pikalajittelu 3. Kekolajittelu 4. Lajittelualgoritmien suorituskyvyn rajoista 811312A TRA, Lajittelualgoritmeista
LisätiedotBinäärihaun vertailujärjestys
Järjestetyn sanakirjan tehokas toteutus: binäärihaku Binäärihaku (esimerkkikuassa aain = nimi) op Eea 5 op 5 op op 8 op 5 6 7 8 op Eea 5 op 5 op op 8 op 5 6 7 8 op Eea 5 op 5 op op 8 op 5 6 7 8 op Eea
LisätiedotMiten käydä läpi puun alkiot (traversal)?
inääripuut ieman lisää aidon binääripuun ominaisuuksia lehtisolmuja on yksi enemmän kuin sisäsolmuja inääripuut tasolla d on korkeintaan 2 d solmua pätee myös epäaidolle binääripuulle taso 0: 2 0 = 1 solmu
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PUURAKENTEET, BINÄÄRIPUU, TASAPAINOTETUT PUUT MIKÄ ON PUUTIETORAKENNE? Esim. Viereinen kuva esittää erästä puuta. Tietojenkäsittelytieteessä puut kasvavat alaspäin.
LisätiedotKierros 4: Binäärihakupuut
Kierros 4: Binäärihakupuut Tommi Junttila Aalto University School of Science Department of Computer Science CS-A1140 Data Structures and Algorithms Autumn 2017 Tommi Junttila (Aalto University) Kierros
LisätiedotAlgoritmit 1. Luento 12 Ke Timo Männikkö
Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu
LisätiedotTietorakenteet, laskuharjoitus 7, ratkaisuja
Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9
LisätiedotCS-A1140 Tietorakenteet ja algoritmit
CS-A1140 Tietorakenteet ja algoritmit Kierros 4: Binäärihakupuut Tommi Junttila Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Syksy 2016 Sisältö Binäärihakupuut Avainten lisääminen,
LisätiedotAlgoritmit 1. Luento 5 Ti Timo Männikkö
Algoritmit 1 Luento 5 Ti 24.1.2017 Timo Männikkö Luento 5 Järjestetty lista Järjestetyn listan operaatiot Listan toteutus taulukolla Binäärihaku Binäärihaun vaativuus Algoritmit 1 Kevät 2017 Luento 5 Ti
Lisätiedot58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja
1 Tietorakenteet (kevät 08) 1. kurssikoe, ratkaisuja Tehtävän 1 korjasi Mikko Heimonen, tehtävän 2 Jaakko Sorri ja tehtävän Tomi Jylhä-Ollila. 1. (a) Tehdään linkitetty lista kaikista sukunimistä. Kuhunkin
LisätiedotAlgoritmit 1. Luento 12 Ti Timo Männikkö
Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit
Lisätiedot1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...
1. Tietorakenteet Tietorakenteet organisoivat samankaltaisten olioiden muodostaman tietojoukon. Tämä järjestys voidaan saada aikaan monin tavoin, esim. Keräämällä oliot taulukkoon. Liittämällä olioihin
LisätiedotTehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003
Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Matti Nykänen 5. joulukuuta 2003 1 Satelliitit Muunnetaan luennoilla luonnosteltua toteutusta seuraavaksi: Korvataan puusolmun p kentät p. key ja
LisätiedotTietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen
Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:
LisätiedotKoe ma 1.3 klo 16-19 salissa A111, koeaika kuten tavallista 2h 30min
Koe Koe ma 1.3 klo 16-19 salissa A111, koeaika kuten tavallista 2h 30min Kokeessa saa olla mukana A4:n kokoinen kaksipuolinen käsiten tehty, itse kirjoitettu lunttilappu 1 Tärkeää ja vähemmäntärkeää Ensimmäisen
LisätiedotALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012
ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,
LisätiedotAlgoritmit 2. Luento 5 Ti Timo Männikkö
Algoritmit 2 Luento 5 Ti 28.3.2017 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 2/29 B-puu Algoritmit 2 Kevät 2017 Luento 5 Ti
Lisätiedot14 Tasapainotetut puurakenteet
TIE-20100 Tietorakenteet ja algoritmit 308 14 Tasapainotetut puurakenteet Binäärihakupuu toteuttaa kaikki dynaamisen joukon operaatiot O(h) ajassa Kääntöpuolena on, että puu voi joskus litistyä listaksi,
Lisätiedot1.1 Tavallinen binäärihakupuu
TIE-20100 Tietorakenteet ja algoritmit 1 1 Puurakenteet http://imgur.com/l77fy5x Tässä luvussa käsitellään erilaisia yleisiä puurakenteita. ensin käsitellään tavallinen binäärihakupuu sitten tutustutaan
LisätiedotPinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia
Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia Kukin alkio (viite) talletettuna solmuun (node) vastaa paikan käsitettä
Lisätiedot58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut
58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 1. Palautetaan vielä mieleen O-notaation määritelmä. Olkoon f ja g funktioita luonnollisilta luvuilta positiivisille
LisätiedotTietorakenteet ja algoritmit - syksy 2015 1
Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä
Lisätiedot3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.
3. Hakupuut Hakupuu on listaa tehokkaampi dynaamisen joukon toteutus. Erityisesti suurilla tietomäärillä hakupuu kannattaa tasapainottaa, jolloin päivitysoperaatioista tulee hankalampia toteuttaa mutta
LisätiedotAlgoritmit 1. Luento 3 Ti Timo Männikkö
Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien
Lisätiedotlähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa
Kekolajittelu Prioriteettijonolla toteutettu keko InsertItem ja RemoveMinElem: O(log(n)) Lajittelu prioriteettijonolla: PriorityQueueSort(lajiteltava sekvenssi S) alusta prioriteettijono P while S.IsEmpty()
LisätiedotTKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)
TKT0001 Tietorakenteet ja algoritmit Erilliskoe 5.1.01, malliratkaisut (Jyrki Kivinen) 1. [1 pistettä] (a) Esitä algoritmi, joka poistaa kahteen suuntaan linkitetystä järjestämättömästä tunnussolmullisesta
LisätiedotAlgoritmit 1. Luento 9 Ti Timo Männikkö
Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward
Lisätiedot58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)
58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen) 1. Avaimet 1, 2, 3 ja 4 mahtuvat samaan lehtisolmuun. Tässä tapauksessa puussa on vain yksi solmu, joka on samaan aikaan juurisolmu
Lisätiedot9.3 Algoritmin valinta
TIE-20100 Tietorakenteet ja algoritmit 218 9.3 Algoritmin valinta Merkittävin algoritmin valintaan vaikuttava tekijä on yleensä sen suorituskyky käyttötilanteessa. Muitakin perusteita kuitenkin on: toteutuksen
LisätiedotAlgoritmit 2. Luento 9 Ti Timo Männikkö
Algoritmit 2 Luento 9 Ti 17.4.2018 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen Huffmanin koodi LZW-menetelmä Taulukointi Editointietäisyys Algoritmit 2 Kevät 2018 Luento 9 Ti 17.4.2018 2/29 Merkkitiedon
Lisätiedot7. Tasapainoitetut hakupuut
7. Tasapainoitetut hakupuut Tässä luvussa jatketaan järjestetyn sanakirjan tarkastelua esittämällä kehittynyt puutietorakenne. Luvussa 7.1. esitetään monitiehakupuun käsite. Se on järjestetty puu, jonka
Lisätiedot18. Abstraktit tietotyypit 18.1
18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
LisätiedotTietorakenteet, laskuharjoitus 3, ratkaisuja
Tietorakenteet, laskuharjoitus 3, ratkaisuja 1. (a) Toistolauseen runko-osassa tehdään yksi laskuoperaatio, runko on siis vakioaikainen. Jos syöte on n, suoritetaan runko n kertaa, eli aikavaativuus kokonaisuudessaan
Lisätiedot811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu
811312A Tietorakenteet ja algoritmit 2017-2018, Harjoitus 2 ratkaisu Harjoituksen aiheena on algoritmien oikeellisuus. Tehtävä 2.1 Kahvipurkkiongelma. Kahvipurkissa P on valkoisia ja mustia kahvipapuja,
Lisätiedot58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia
58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli
LisätiedotAlgoritmit 1. Luento 1 Ti Timo Männikkö
Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017
LisätiedotSisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto
Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
Lisätiedot2. 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.
Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen
Lisätiedot811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta
811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta kurssin alkuosasta II Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen
LisätiedotTieto- ja tallennusrakenteet
Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)
LisätiedotKaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen
Viimeksi käsiteltiin pino: lisäys ja poisto lopusta jono: lisäys loppuun, poisto alusta Pinon ja jonon yleistävä tietorakenne: kaksiloppuinen jono alkion lisäys/poisto voidaan kohdistaa jonon alkuun tai
LisätiedotPino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:
Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) Push(alkio)
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko
Lisätiedotuseampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero
Alkioiden avaimet Usein tietoalkioille on mielekästä määrittää yksi tai useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero 80 op
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
Lisätiedot811312A Tietorakenteet ja algoritmit 2015-2016. V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit
811312A Tietorakenteet ja algoritmit 2015-2016 V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit Sisältö 1. Johdanto 2. Leveyshaku 3. Syvyyshaku 4. Kruskalin algoritmi 5. Dijkstran algoritmi
LisätiedotKysymyksiä koko kurssista?
Kysymyksiä koko kurssista? Lisää kysymyksesi osoitteessa slido.com syötä event code: #8777 Voit myös pyytää esimerkkiä jostain tietystä asiasta Vastailen kysymyksiin luennon loppupuolella Tätä luentoa
LisätiedotTietorakenteet, laskuharjoitus 6,
Tietorakenteet, laskuharjoitus, 23.-2.1 1. (a) Kuvassa 1 on esitetty eräät pienimmistä AVL-puista, joiden korkeus on 3 ja 4. Pienin h:n korkuinen AVL-puu ei ole yksikäsitteinen juuren alipuiden keskinäisen
LisätiedotMuita linkattuja rakenteita
1 Muita linkattuja rakenteita Johdanto Aikaisemmin on käsitelty listan, jonon ja pinon toteutus dynaamisesti linkattuna rakenteena. Dynaamisella linkkauksella voidaan toteuttaa mitä moninaisimpia rakenteita.
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 2 1.-2.2.2017 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: laskesumma(t, n) sum = t[0]; for (i = 1; i < n; i++) sum = sum + t[i]; return sum; Silmukka suoritetaan n 1 kertaa
Lisätiedot58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)
58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 1. Lisäysjärjestämisessä järjestetään ensin taulukon kaksi ensimmäistä lukua, sitten kolme ensimmäistä lukua, sitten neljä ensimmäistä
LisätiedotTarkennamme geneeristä painamiskorotusalgoritmia
Korotus-eteen-algoritmi (relabel-to-front) Tarkennamme geneeristä painamiskorotusalgoritmia kiinnittämällä tarkasti, missä järjestyksessä Push- ja Raise-operaatioita suoritetaan. Algoritmin peruskomponentiksi
Lisätiedot811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku
811312A Tietorakenteet ja algoritmit 2016-2017 V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku Sisältö 1. Johdanto 2. Leveyshaku 3. Syvyyshaku 4. Kruskalin algoritmi 5. Dijkstran algoritmi 811312A
LisätiedotOhjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
Lisätiedot4 Tehokkuus ja algoritmien suunnittelu
TIE-20100 Tietorakenteet ja algoritmit 52 4 Tehokkuus ja algoritmien suunnittelu Tässä luvussa pohditaan tehokkuuden käsitettä ja esitellään kurssilla käytetty kertaluokkanotaatio, jolla kuvataan algoritmin
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava
LisätiedotB + -puut. Kerttu Pollari-Malmi
B + -puut Kerttu Pollari-Malmi Tämä monista on alunperin kirjoitettu sksn 2005 kurssille osittain Luukkaisen ja Nkäsen vanhojen luentokalvojen pohjalta. Maaliskuussa 2010 pseudokoodiesits on muutettu vastaamaan
LisätiedotTietorakenteet ja algoritmit Hakurakenteet Ari Korhonen
Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen 27.10. & 3.11.2015 Tietorakenteet ja algoritmit - syksy 2015 1 8. HAKURAKENTEET (dictionaries) 8.1 Haku (vrt. sanakirjahaku) 8.2 Listat tallennusrakenteina
Lisätiedot58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut
Tietorakenteet ja algoritmit (syksy 0) Toinen välikoe, malliratkaisut. (a) Alussa puu näyttää tältä: Lisätään 4: 4 Tasapaino rikkoutuu solmussa. Tehdään kaksoiskierto ensin oikealle solmusta ja sitten
LisätiedotLuku 8. Aluekyselyt. 8.1 Summataulukko
Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla
Lisätiedot13 Lyhimmät painotetut polut
TIE-20100 Tietorakenteet ja algoritmit 297 13 Lyhimmät painotetut polut BFS löytää lyhimmän polun lähtösolmusta graafin saavutettaviin solmuihin. Se ei kuitenkaan enää suoriudu tehtävästä, jos kaarien
Lisätiedotf(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))
Määritelmä: on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia
Lisätiedot58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)
58131 Tietorakenteet Erilliskoe 11.11.2008, ratkaisuja (Jyrki Kivinen) 1. (a) Koska halutaan DELETEMAX mahdollisimman nopeaksi, käytetään järjestettyä linkitettyä listaa, jossa suurin alkio on listan kärjessä.
LisätiedotAlgoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö
Algoritmit 1 Luento 14 Ke 25.2.2015 Timo Männikkö Luento 14 Heuristiset menetelmät Heuristiikkoja kapsäkkiongelmalle Kauppamatkustajan ongelma Lähimmän naapurin menetelmä Kertaus ja tenttivinkit Algoritmit
LisätiedotAlgoritmi on periaatteellisella tasolla seuraava:
Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S
Lisätiedot3. Binääripuu, Java-toteutus
3. Binääripuu, Java-toteutus /*-------------------------------------------------------------/ / Rajapinta SearchTree: binäärisen hakupuun käsittelyrajapinta / / Metodit: / / void insert( Comparable x );
Lisätiedot