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

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

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

18. Abstraktit tietotyypit 18.1

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

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

4. Sekvenssit Astetta soveltavat sekvenssit

v 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.

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

5. Prioriteettijonot Prioriteettijonon abstrakti tietotyyppi

5. Prioriteettijonot. 5. luku 236

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

16. Javan omat luokat 16.1

Algoritmit 2. Luento 7 Ti Timo Männikkö

8. Lajittelu, joukot ja valinta

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Tietorakenteet ja algoritmit - syksy

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

Harjoitus 4 (viikko 47)

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

Algoritmit 2. Luento 14 Ke Timo Männikkö

9 Erilaisia tapoja järjestää

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Tietorakenteet ja algoritmit

1 Puu, Keko ja Prioriteettijono

Algoritmit 1. Luento 10 Ke Timo Männikkö

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

4 Tehokkuus ja algoritmien suunnittelu

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Ohjelmoinnin perusteet Y Python

7/20: Paketti kasassa ensimmäistä kertaa

Ohjelmoinnin jatkokurssi, kurssikoe

2. Perustietorakenteet

Rajapinta (interface)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Tieto- ja tallennusrakenteet

ITKP102 Ohjelmointi 1 (6 op)

Olio-ohjelmointi Syntaksikokoelma

Algoritmi on periaatteellisella tasolla seuraava:

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

ITKP102 Ohjelmointi 1 (6 op)

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

3. Binääripuu, Java-toteutus

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Miten käydä läpi puun alkiot (traversal)?

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

2 Haku ja lajittelu. 2.1 Luvun hakeminen taulukosta X?? n-1. Haku ja lajittelu 35

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Demot Timo Männikkö

15. Ohjelmoinnin tekniikkaa 15.1

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

Algoritmit 1. Luento 1 Ti Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Anna Kuikka Pyöräkatu 9 B Kuopio GSM: Opiskelijanro: 60219K. Prioriteettijonot

Tietorakenteet, laskuharjoitus 6,

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

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

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 4 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

Tämä on helpompi ymmärtää, kun tulkitaan keko täydellisesti tasapainotetuksi binääripuuksi, jonka juuri on talletettu taulukon paikkaan

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

KOHDELUOKAN MÄÄRITTELY

Tietueet. Tietueiden määrittely

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

Ohjelmointiharjoituksia Arduino-ympäristössä

(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ä.

4. Joukkojen käsittely

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

1 Erilaisia tapoja järjestää

Binäärihaun vertailujärjestys

1. Omat operaatiot 1.1

Mukautuvat järjestämisalgoritmit

Lyhyt kertaus osoittimista

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Transkriptio:

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 5 op Alkioita voidaan vertailla avainten perusteella käyttäen jotain vertailusääntöä Vertailu 5 op 80 op 5 op 80 op voidaan määritellä melko vapaasti: usein muu kuin lukujen tavanomainen suuruusjärjestys, esim.: aakkosjärjestys: Lahtinen Nieminen edeltävyyssuhde: Tiistai Perjantai, Lausekielinen ohjelmointi Olio-ohjelmoinnin perusteet käänteinen: 0 m 85 m (keihäskisan sijat) Tietorakenteet, syksy 007 Tietorakenteet, syksy 007 Täydellinen järjestys Tarkastellaan vertailusääntöä, joka määrittää avaimille täydellisen järjestyksen refleksiivisyys: k k (missä k on avain) antisymmetrisyys: jos k k ja k k, niin k = k transitiivisuus: jos k k ja k k, niin k k vertailtavuus: kaikille k,k pätee joko k k tai k k Lineaarinen järjestys, pienin alkio hyvin määritelty Tietorakenteet, syksy 007 Täydellinen järjestys Kurssien edeltävyys: täydellinen järjestys? Ohjelmoinnin tekniikka Lausekielinen ohjelmointi Olio-ohjelmoinnin perusteet Tietorakenteet ei: Ohjelmoinnin tekniikka ja Tietorakenteet eivät vertailtavissa Tietorakenteet, syksy 007

Täydellinen järjestys Avainten järjestys yksikäsitteinen, mutta vastaavien alkioiden välttämättä ei saman avaimen omaavat alkiot 5 op 5 op 80 op 80 op järjestys ratkaistava muulla tavoin (esim. toinen avain-tyyppi, tai ei välitetä) Tietorakenteet, syksy 007 5 Vertailu (Javassa) Yleinen (esim. helposti päivitettävä) vertailutapa? Javassa: objektien vertailtavuus Comparable ja Comparator-rajapintojen kautta public interface Comparable<T> { public int compareto( T obj ); } metodin compareto palautusarvo: < 0, jos olio itse < obj = 0, jos olio itse = obj > 0, jos olio itse > obj Tietorakenteet, syksy 007 Vertailu (Javassa) public interface Comparator<T> { public int compare( T obj, T obj );... } metodin compare palautusarvo: < 0, jos obj < obj = 0, jos obj = obj > 0, jos obj > obj Hieman vastaava tapa (esim. C/C++): alkioiden vertailu esim. parametrina saadulla vertailufunktiolla Tietorakenteet, syksy 007 7 Prioriteettijono (priority queue) Prioriteettijono: jono, jossa järjestys avainten perusteella esim. kurssin jonolaki: avain = opintopisteet valitaan kurssille, jos tilaa kolmelle 80 op 5 op Prioriteettijonon perusoperaatiot: avaimen omaavan alkion lisäys jonoon korkeimman prioriteetin omaavan alkion poisto Tietorakenteet, syksy 007 8

Prioriteettijonon tarkempi määrittely Prioriteettijono P on abstrakti tietotyyppi, jolla on ainakin perusmetodit: InsertItem(k,x): lisää avaimen k omaavan tietoalkion x prioriteettijonoon P RemoveMinElem(): palauttaa ja poistaa jonosta P sellaisen alkion x, jolla on pienin avain k pienin k vertailusäännön suhteen yhtäsuuret avaimet? toteutusyksityiskohta tapahtuu virhe, jos jono on tyhjä Tietorakenteet, syksy 007 Prioriteettijonon metodit Pitkälti vastaavat apumetodit kuin tavallisella jonolla Size(): palauttaa kokonaislukuarvon, joka kertoo kuinka monta alkiota jonossa P on IsEmpty(): palauttaa arvon true, jos prioriteettijono on tyhjä, ja muuten arvon false MinElem(): palauttaa pienimmän avaimen k omaavan alkion poistamatta sitä jonosta P MinKey(): palauttaa pienimmän avaimen k, joka esiintyy jonossa P Tietorakenteet, syksy 007 0 Prioriteettijonon metodit Esimerkki: InsertItem(500$, ) InsertItem(00$, Asiakas B) InsertItem(550$, ) RemoveMinElem(): Asiakas B MinElem(): MinKey(): InsertItem(550$, Asiakas D) MinElem(): (tai D) MinKey(): Asiakas B 00 $ Asiakas D toteuttaja ( sovelluskohde) päättää, missä järjestyksessä saman avaimen omaavia alkioita käsitellään Tietorakenteet, syksy 007 Prioriteettijonon toteutus Prioriteettijonon toteutus käytännössä? Perusvaihtoehto: kuin sekvenssi linkitetyssä listassa tai taulukossa InsertItem(k,x) = InsertFirst((k,x)), missä (k, x) on avaimen k ja alkion x yhdistelmä-alkio työmäärä O() RemoveMinElem(), MinElem(), MinKey(): minimiavain (sen alkio) haetaan lineaarisesti työmäärä Θ(n) Tietorakenteet, syksy 007

Prioriteettijonon toteutus Perusvaihtoehto : järjestetty sekvenssi (listassa tai taulukossa) ylläpidetään sekvenssin alkiot suuruusjärjestyksessä InsertItem(500$, ) InsertItem(00$, Asiakas B) InsertItem(550$, ) Asiakas B 00 $ Asiakas B 00 $ Prioriteettijonon toteutus InsertItem(k,x): alkio (k, x) sellaiseen kohtaan, jossa edeltävän alkion avain k, ja k seuraavan alkion avain työmäärä O(n) sekä taulukossa että listassa RemoveMinElem(), MinElem(), MinKey(): minimiavain (sen alkio) sekvenssin ensimmmäisessä paikassa työmäärä O() Tietorakenteet, syksy 007 Tietorakenteet, syksy 007 Lajittelu Prioriteettijonolla on vahva yhteys lajitteluun annetaan n alkiota sekä niiden vertailusääntö tehtävä: järjestä alkiot suuruusjärjestykseen Paljon erilaisia lajittelualgoritmeja tarkastellaan aluksi kolmea (hieman tehotonta) perus-esimerkkiä: kuplalajittelu valintalajittelu lisäyslajittelu Kuplalajittelu Kuplalajittelu (bubble sort): kulje lajiteltava sekvenssi alusta loppuun järjestä aina vierekkäinen alkiopari toista tällainen järjestävä läpikäynti (korkeintaan) n kertaa Tietorakenteet, syksy 007 5 Tietorakenteet, syksy 007

Kuplalajittelu 5 5 5 5 5 5 Työmäärä? pahimmillaan n kierrosta i. kierroksella n i + askelta 5 5 5 5 5...ja niin edelleen yhteensä Σ n i= (n i + ) = Σn i= i = O(n ) Tietorakenteet, syksy 007 7 Prioriteettijono lajittelussa Yleisluontoinen lajittelu prioriteettijonolla: PriorityQueueSort(lajiteltava sekvenssi S) alusta prioriteettijono P while S.IsEmpty() = false do x S.RemoveFirst() P.InsertItem(x, x) while P.IsEpmty() = false do x P.RemoveMinElem() S.InsertLast(x) Työmäärä? riippuu prioriteettijonon operaatioiden InsertItem ja RemoveMinElem tehokkuudesta Tietorakenteet, syksy 007 8 Valintalajittelu Lajittelussa käytetty prioriteettijono järjestämättömänä sekvenssinä valintalajittelu kulje lajiteltava (yhä lajittelematon) sekvenssi (prioriteettijono) alusta loppuun etsi pienin alkio ja siirrä se lajitellun sekvenssin loppuun toista täsmälleen n kertaa Tietorakenteet, syksy 007 Valintalajittelu lajittelematon 7 7 7 lajiteltu 7 7 7 7 Työmäärä? n kierrosta, i. kierroksella n i+ askelta yhteensä Σ n i= (n i + ) = Σn i= i = O(n ) Tietorakenteet, syksy 007 0

Lisäyslajittelu Lajittelussa käytetty prioriteettijono järjestettynä (lajiteltuna) sekvenssinä lisäyslajittelu ota seuraava alkio (yhä lajittelemattomasta) sekvenssistä vie se lajitellun sekvenssin (prioriteettijono) kohtaan, jossa edeltävä alkio ei ole suurempi tai seuraava alkio pienempi toista täsmälleen n kertaa Lisäyslajittelu lajittelematon 7 7 7 7 7 lajiteltu 7 7 Työmäärä? n kierrosta, i. kierroksella max. i askelta yhteensä Σ n i= i = O(n ) Tietorakenteet, syksy 007 Tietorakenteet, syksy 007