Tiraka, yhteenveto tenttiinlukua varten

Koko: px
Aloita esitys sivulta:

Download "Tiraka, yhteenveto tenttiinlukua varten"

Transkriptio

1 Tiraka, yhteenveto tenttiinlukua varten TERMEJÄ Tietorakenne Tietorakenne on tapa tallettaa tietoa niin, että tietoa voidaan lisätä, poistaa, muokata ja hakea. Tietorakenteet siis säilövät tiedon niin, että tietoja voidaan käsitellä erilaisten algoritmien avulla. Tietorakenne voi koostua useasta tietorakenteesta. Algoritmi Algoritmi on joukko ohjeita, joita seuraamalla jokin ongelma saadaan ratkeamaan. Algoritmi ottaa syötteenään alkion tai joukon alkioita ja antaa tuloksenaan alkion tai joukon alkioita. Esimerkiksi järjestämisalgoritmit tuottavat jollakin tavalla syötteenä saamastaan alkioiden joukosta järjestetyn joukon (samoja) alkioita. Algoritmi on oikea, jos se pysähtyy ja antaa oikean vastauksen kaikilla laillisilla syötteillä. Algoritmin suunnitteluperiaate On yleinen lähestymistapa ongelman algoritmisen ratkaisun suunnittelemiseen. Pala kerrallaan On suunnitteluperiaate, jossa aluksi kaikki tieto on prosessoimatonta. Algoritmi käsittelee tietoa pala kerrallaan niin, että käsitellyn tiedon määrä kasvaa koko ajan ja vastaavasti prosessoimattoman tiedon määrä vähenee. Lopulta kaikki tieto on käsitelty. Näin toteutetut algoritmit toimivat usein hyvin pienillä syötteillä ja ovat melko yksinkertaisia. Hajota ja hallitse On suunnitteluperiaate, jossa ongelma jaetaan alkuperäisen ongelman kaltaisiin, pienempiin osaongelmiin, jotka ratkaistaan suoraviivaisesti. Suuret osaongelmat siis jaetaan vielä pienempiin osaongelmiin ja lopulta ratkaistuista pienistä osaongelmista kootaan alkuperäisen ongelman ratkaisu. Tähän perustuu useat tehokkaat algoritmit. Toteutuksessa hyödynnetään usein rekursiota. Muunna ja hallitse On suunnitteluperiaate, jossa ensin ongelman instanssi muutetaan jollakin tavalla helpommin käsiteltävään muotoon, jonka jälkeen ongelma ratkaistaan sopivalla tavalla. Ongelman instanssia voidaan yksinkertaistaa tai sen esitystapaa voidaan muuttaa. Kolmas vaihtoehto on itse ongelman muuttaminen, jolloin ratkaistaankin sellaisen ongelman instanssi, jolle löytyy ratkaisualgoritmi. Laskeminen tarvittaessa Suunnitteluperiaate, jossa vältytään saman välituloksen laskemiselta uudelleen tallettamalla välituloksia johonkin tietorakenteeseen. Välitulosten määrälle muodostetaan ylälikiarvo, jonka pohjalta tehdään tarvittavan suuri tietorakenne, jonne tieto saadaan tehokkaasti talletettua. Välituloksen parametrit toimivat avaimina tietorakenteeseen. Näin tehty algoritmi on usein tehokas mutta vaikea analysoida ja muistia kuluttava. Periaate soveltuu tilanteisiin, joissa on toistuvia osatehtäviä (esim. Fibonaccin luvun laskeminen). Dynaaminen ohjelmointi Suunnitteluperiaate, joka perustuu myös välitulosten tallettamiseen kuitenkin niin, että välitulosten laskemisjärjestys on kiinteä. Tätä suunnitteluperiaatetta sovelletaan usein optimointitehtäviin. Ideana on selvittää optimaalisen ratkaisun rakenne, ja rekursiota hyödyntäen esittää se osatehtävien optimaalisten

2 ratkaisujen avulla. Optimaalisen ratkaisun arvo saadaan laskemalla pienimmästä alkaen osatehtävien optimaalisten ratkaisujen arvot. Samalla talletetaan informaatiota koskien optimaalista ratkaisua, mikäli arvon lisäksi halutaan tietää itse ratkaisu. Periaate soveltuu tilanteisiin, joissa on toistuvia osatehtäviä ja optimaalinen osarakenne. Säiliö Säiliö on keino tallettaa joukko alkioita, jolle lisäyksen, poiston ja etsinnän on oltava mahdollisia. Alkio sisältää avaimen ja hyötykuorman lisäksi usein myös toteutuksen vaatimia kenttiä. Tiedon etsintä säiliöstä tapahtuu avaimen avulla, eikä hyötykuorman sisältämä tieto ole algoritmien kannalta tärkeää. Saman avaimen salliminen usealla alkiolla, sekä valintaperiaate samojen avainten kohdalla on toteutuksesta kiinni. Paluuarvona on usein kahva alkioon. Säiliöön voidaan tehdä kahden tyyppisiä operaatiota: kyselyjä ja muunto-operaatioita. Dynaaminen joukko Alkioiden hakeminen useamman kuin yhden avaimen perusteella on mahdollista dynaamisten joukkojen avulla. Toteutus on usein monen säiliön kokonaisuus. Jotta hyötykuorman monistuminen vältettäisiin, talletetaan se vain yhteen paikkaan, ja hyödynnetään osoittimia. Optimaalinen osarakenne Optimaalinen osarakenne todistetaan usein osoittamalla, että oletettu optimaalinen ratkaisu paranee muuttamalla sen ei-optimaalinen osaratkaisu optimaaliseksi. Näin siis oletettu optimaalinen ratkaisu ei ollutkaan optimaalinen ja syntyy ristiriita. Tehtävän pilkkominen osatehtäviin onnistuu usein monella eri tavalla. Osatehtävien määrä kannattaa pitää mahdollisimman pienenä ja jakosuunnitelmaa kannattaa testata jakamalla osatehtävät osatehtäviin ja katsomalla alkavatko samat osatehtävät toistua. Amortisoitu ajoaika Yksittäisten operaatioiden suoritusaikojen tutkimisen sijaan keskitytään suoritusaikaan kokonaisuutena. Jos jokaista kalliin operaation vaatimaa hintaa kohtaan on suoraan verrannollinen määrä halpoja operaatioita, voidaan kalliin operaation kustannus jakaa tasan halvoille operaatioille. Näin kallis operaatio ikään kuin maksetaan säästöillä, ja halvat operaatiot säilyvät vakioaikaisina. Kevyin virittävä puu On graafin asyklinen aligraafi, joka yhdistää kaikki kaaren solmut. Ahne algoritmi Algoritmi, joka valitsee jokaisella askeleella aina sillä hetkellä parhaimmalta näyttävän vaihtoehdon, ja jättää muut kokeilematta. Algoritmi on todennäköisesti hyvä silloin, kun ongelmalla on kaksi ominaisuutta: ahneen valinnan ominaisuus ja optimaalinen osarakenne. Ahneen valinnan ominaisuus tarkoittaa sitä, ettei ahne valinta harhauta pois globaalisti optimaalisesta ratkaisusta. KERTALUOKKANOTAATIOT Algoritmien analyysi tarkoittaa niiden kuluttamien resurssien määrän muuttumisen arviointia syötekoon kasvaessa. Usein kiinnitetään huomioita siihen, kuinka paljon algoritmin kuluttama aika kasvaa syötekoon kasvaessa. Algoritmin kuluttaman ajan määrittämisessä lasketaan, kuinka monta kertaa kukin rivi suoritetaan. Näin algoritmin suorituskykyä voidaan arvioida huomioimatta ohjelmisto- ja laitteistoympäristön vaikutusta. Algoritmin suoritusajan kertaluokka kertoo, mitä funktiota algoritmin suoritusaika alkaa muistuttamaan suurilla syötekoilla. Kertaluokassa ei ole huomioitu alemman asteen termejä tai vakiokertoimia, jolloin saadaan helposti

3 ymmärrettävä yleiskuva ja yleensä riittävä arvio siitä, kuinka suoritusaika kasvaa syötekoon kasvaessa. Kaikkien algoritmien kaikille suoritustapauksille ei voida aina antaa tarkkaa Theta-notaatiota eikä kaikille tapauksille yhteistä notaatiota voida aina määrittää. Esim. insertion sortin huonoin tapaus on O(n^2) ja paras tapaus Omega(n). Asymptoottinen suoritusaika on informatiivinen vain tiettyä rajaa suuremmilla syötekoilla. Theta( f(n) ): a * f(n) <= suoritusaika <= b * f(n), eli algoritmin suoritusaika vie f(n):ään verrannollisen ajan (rajoittaa sekä ylhäältä että alhaalta) Omega( f(n) ): algoritmin suoritusaika vie vähintään f(n):ään verrannollisen ajan Iso O ( f(n) ): algoritmin suoritusaika vie enintään f(n):ään verrannollisen ajan Algoritmien suorituskykyä arvioitaessa kiinnitetään ajan kulutuksen lisäksi usein huomiota muistin kulumiseen. Muistin kulutustakin voidaan mallintaa asymptoottisesti. Lisäksi usein määritellään huonoin, paras ja keskimääräinen tapaus, mikä usein vaatii erilaisten syötteiden tunnistamista. ALGORITMEJA Algoritmeja voidaan yhdistää esimerkiksi tekemällä QuickSortia tiettyyn pisteeseen asti ja järjestämällä pienet osataulukot Insertion Sortilla. Näin usean algoritmin hyviä puolia voidaan yhdistää. Vertailuun perustuva alkioiden järjestämistä ei ole mahdollista toteuttaa nlogn:ää paremmassa ajassa. Algoritmien valinnassa on otettava huomioon suoritusajan merkitys käyttötilanteessa, suoritusajan vaihtelu, lisämuistin tarve, toteutuksen helppous, tulosten tarkkuus sekä syöteaineiston ominaisuudet. Insertion Sort Pala kerrallaan algoritmi, jossa taulukon etuosa on järjestyksessä ja loppuosa ei. Etu- ja loppuosan raja on aluksi kahden ensimmäisen alkion välissä. Loppuosan ensimmäinen liu utetaan oikealle paikalleen ja rajaa siirretään yhdellä alkiolla eteenpäin. Toimii hyvin pienillä syötteillä. Suoritusajaltaan Theta(n^2). MergeSort Hajota ja hallitse algoritmi, joka jakaa taulukon osataulukkoihin, kunnes osataulukot ovat 0 tai 1 suuruisia (eli järjestyksessä). MergeSort järjestää osataulukot rekursiivisesti lomittamalla. Tarvitsee lisämuistia Theta(n) verran ja toimii ajassa Theta(nlogn) kaikissa tapauksissa. On vakaa algoritmi. Puolitushaku Hajota ja hallitse algoritmi, jonka avulla järjestyksessä olevasta taulukosta saadaan etsittyä haluttu alkio ajassa Theta(logn). Valitaan taulukon keskimmäinen ja vertaillaan sitä etsittävään alkioon. Toinen puoli taulukosta voidaan vertailun jälkeen jättää pois. Valitaan käsittelyyn jätetystä osasta jälleen keskimmäinen ja tehdään vastaava vertailu. Lopulta taulukosta valittava alkio on etsitty alkio, tai alkiota ei ole taulukossa. QuickSort Hajota ja hallitse periaatetta sekä satunnaistamista hyödyntävä algoritmi, joka järjestää taulukon ajassa Theta(nlogn). Valitaan pivot alkio, ja laitetaan kaikki sitä pienemmät tai yhtä pienet taulukossa ennen kyseistä alkiota. Vastaavasti pivot alkiota suuremmat laitetaan taulukkoon pivot alkion jälkeen, jolloin pivot on oikealla paikalla taulukossa. Sama toistetaan pivot alkion molemmin puolisille taulukon osille. Tätä jatketaan, kunnes taulukko on järjestyksessä. Jos pivot alkio valitaan aina taulukon alusta, ja taulukko on jo valmiiksi järjestyksessä, suoritusajaksi tulee Theta(n^2), koska käsiteltävä taulukko on aina vain yhtä pienempi edellistä. Niinpä QuickSort on O(n^2) aikainen.

4 Parhaassa tapauksessa taulukko jakautuu aina tasan (O(nlogn)). Jotta pahin tapaus vältettäisiin, käytetään satunnaistamista. Satunnaistaminen voidaan tehdä muokkaamalla syöteaineistoa ennen varsinaisen algoritmin aloittamista, tai algoritmin suorituksen aikana. Jälkimmäinen on usein tehokkaampi ja käytetympi vaihtoehto. QuickSortissa pivot alkion valinnan satunnaistaminen minimoi huonoimman tapauksen todennäköisyyttä. QuickSort ei ole vakaa algoritmi, mutta tarvitsee vain vähän lisämuistia ja sen vakiokerroin pieni, toisin kuin MergeSortilla. Heapify Liu uttaa keon juureen lisätyn alkion oikealle paikalleen. Toimii ajassa Omega(1), O( log(n) ). Build Heap Järjestää annetun taulukon keoksi. Kutsuu Heapify algoritmia taulukon lopusta alkaen siten, että Heapify(A,i):n jälkeen i:n määräämä osataulukko on keko. Suoritusaika on Theta(n). HeapSort Agoritmi, joka järjestää alkiot suuruusjärjestykseen hyödyntämällä muunna ja hajota-periaatetta sekä kekorakennetta. Aluksi taulukosta tehdään keko Build Heapilla. Sitten suurin alkio poistetaan (vaihtamalla se taulukon viimeisen alkion kanssa ja pienentämällä kekoa yhdellä), jonka jälkeen kutsutaan Heapify algoritmia, jotta kekorakenne saadaan korjattua. HeapSortti järjestää taulukon paikallaan, eikä koskaan käytä enempää aikaa kuin Theta(nlogn). Se on kuitenkin epävakaa ja suurehkovakiokertoiminen algoritmi. Counting Sort Järjestämisalgoritmi, joka ei perustu alkioiden vertailemiseen, vaan laskemiseen. Oletuksena on, että alkioiden avaimet kuuluvat suhteellisen pienelle arvoalueelle. Algoritmi laskee, kuinka monen alkion avain on arvoltaan i ja järjestää siten taulukon järjestykseen. Algoritmi on vakaa ja toimii ajassa Theta(n), mikäli arvoja k on vähemmän tai yhtä paljon kuin n. Muussa tapauksessa tätä algoritmia ei kannata käyttää. LSD ja MSD radix sort Ovat moniosaisen avaimen mukaan järjestämisen mahdollistavia algoritmeja. LSD järjestää taulukon ensin vähiten merkitsevän ominaisuuden mukaan (käyttäen jotakin järjestämisalgoritmia). MSD puolestaan järjestää taulukon ensin eniten merkitsevän ominaisuuden mukaan. Bucket Sort Oletuksena on, että avaimet ovat jakautuneet tasaisesti tunnetulle välille. Alkiot heitetään avainten mukaan tehtyihin ämpäreihin, jotka käytännössä ovat lisäyksen ja pienimmänalkion poiston mahdollistavia linkitettyjä listoja. Ämpäreistä alkiot saadaan kerättyä helposti järjestyksessä. Suoritusaika on keskimäärin Theta(n) ja pahimmillaan Theta(n^2). Leveyteen ensin haku Graafialgoritmi, jota käytetään mm. kaikkien solmujen etäisyyksien määrittämiseen lähtösolmusta sekä lyhimmän reitin etsimiseen. Ideana on pysytellä koko ajan mahdollisimman lähellä aloitussolmua, jolloin käsittely tapahtuu leveyssuunnassa rintamina. Alussa kaikki solmut ovat valkoisia, etäisyyksiltään äärettömiä ja edeltäjiltään nulleja. Algoritmissa käytetään jonoa, jonne löydetyt solmut lisätään ja josta aina ensimmäisenä löydetty solmu otetaan seuraavaksi käsittelyyn. Uuden solmun löydyttäessä sen etäisyyttä kasvatetaan yhdellä, väri muutetaan harmaaksi ja edeltäjä solmuksi, josta tultiin. Kun kaikki solmun naapurit on käyty läpi, solmu merkitään mustaksi, eli käsitellyksi. Suoritusaika on O( V + E ).

5 Syvyyteen ensin haku Graafialgoritmi, joka perustuu siihen, että yhtä polkua pitkin mennään niin pitkälle kuin mahdollista. Aina pysytellään mahdollisimman kaukana lähtösolmusta, ja peruutetaan, vasta kun ei enää päästä jo löytämättömään solmuun. Algoritmissa käytetään pinoa. Algoritmi ei löydä lyhintä reittiä vaan ainoastaan jonkin reitin. Suoritusaika on O( V + E ). Mikäli algoritmiin lisätään värikentän hyödyntäminen, onnistuu silmukoiden etsiminen graafista (jos nykyisestä solmusta pääsee harmaaseen solmuun, graafissa on silmukka). Algoritmin voi toteuttaa rekursiolla tai iteratiivisesti. Dijkstra Graafialgoritmi, joka etsii suunnatusta painotetusta graafista lyhimmän reitin lähtösolmusta muihin solmuihin. Oletus on, ettei graafissa voi olla negatiivisia painoja. Dijkstra on ahne algoritmi, sillä se valitsee käsittelyyn aina lyhimmän polun, jota ei vielä ole tutkittu. Algoritmi muistuttaa leveyteen ensin hakua ja käyttää aputietorakenteena prioriteettijonoa, jossa solmulla on sitä suurempi prioriteetti, mitä pienempi sen etäisyys lähtösolmusta on. Eräs tehokas toteutus prioriteettijonolle on kekorakenne. Algoritmin suoritusaika on O( (V + E)*log( V )). TIETORAKENTEITA Binääripuu Tietorakenne, joka koostuu solmuista, joilla on korkeintaan 2 lasta. Vain juurisolmulla ei ole isää. Lapsettomat solmut ovat lehtiä. Binääripuun rakenne on rekursiivinen, sillä kunkin solmun jälkeläiset muodostavat alipuun, jonka juuri kyseinen solmu on. Puun (tai tietyn solmun) korkeus lasketaan pisimmän juuresta (tai solmusta) lehteen vievän polun kaarien määrästä. Keko Keko on tasapainossa oleva binääripuu, jonka solmujen lapset ovat aina pienempiä kuin solmu. Näin ollen keon juuresta löytyy keon suurin alkio. Käytännössä keko toteutetaan aina taulukolla. Kun keon juureen lisätään alkio, se liu utetaan oikealle paikalleen vaihtamalla kyseisen alkion paikkaa aina sen suuremman lapsen kanssa. Suoritusaika on verrannollinen puun korkeuteen, joka keon tapauksessa on log(n). Prioriteettijono On tietorakenne, joka tallettaa joukon alkioita, joilla on prioriteetista kertova avain. Prioriteettijonoon voidaan lisätä alkio, jolloin sen sijoittuminen jonossa riippuu sen prioriteetista. Lisäksi siitä voidaan poistaa ja antaa suurimman prioriteetin alkio. Käyttökohteita prioriteettijonolle ovat mm. tehtävien ajoitus käyttöjärjestelmässä sekä lyhimmän reitin etsiminen. Prioriteettijonon tehokas toteutus perustuu kekoon, jolloin suurin alkio saadaan ajassa Theta(1). Jos suurin alkio poistetaan, saadaan prioriteettijono korjattua kutsumalla keon korjaavaa Heapify algoritmia, jolloin suoritusajaksi tulee O(log(n)). Prioriteettijonoon lisäys tapahtuu lisäämällä alkio keon lehdeksi ja liu uttamalle se sopivalle paikalle keossa (heapyfy alhaalta ylöspäin). Prioriteettijonon kaikki toiminnot saadaan keon avulla toimimaan ajassa log(n). Hajautustaulu Tietorakenne, jossa dynaamisen joukon alkion avaimesta lasketaan hajautusfunktion avulla luku, joka kuuluu taulukon indeksien arvoalueelle. Törmäysten minimoimiseksi hajautusfunktion on hyödynnettävä avainta mahdollisimman kattavasti. Toteutus voi olla esimerkiksi taulukollinen osoittimia linkitettyihin listoihin. Hajautusfunktio laskee indeksin, jonka osoittamaan listaan alkio lisätään. Täyttöasteen kasvaessa haluttua suuremmaksi alkiot hajautetaan suurempaan hajautustauluun. Operaatiot voivat huonossa tapauksessa ja/tai

6 toteutuksessa olla n-aikaisia, mutta hyvin toteutetussa hajautustaulussa operaatiot saadaan toimimaan Theta(1) ajassa. Pino Yhteen suuntaan linkitetyn listan sovellus, jossa alkio voidaan lisätä pinon päällimmäiseksi ja päällimmäinen alkio voidaan poistaa pinosta. Kaikki pinon mahdollistamat operaatiot ovat Theta(1) aikaisia. Jono Yhteen suuntaan linkitetyn listan sovellus, jossa alkio voidaan lisätä jonon viimeiseksi ja jonoon ensimmäisenä lisätty alkio voidaan poistaa. Operaatioiden suoritusaika on Theta(1). Mikäli jono toteutetaan rengaspuskurina taulukon avulla, on maksimikoko tiedettävä etukäteen. Binäärihakupuu Binääripuu, jonka jokaiselle solmulle pätee: solmu->vasen.avain <= solmu.avain <= solmu->oikea.avain. Solmujen käsittelemisjärjestyksiä on kolme: esijärjestys (juuri-vasen-oikea), välijärjestys (avainten suuruusjärjestyksessä käsitteleminen) ja jälkijärjestys (vasen-oikea-juuri). Läpikäynti vie ajan Theta(n). Avaimen haku onnistuu ajassa O(puun korkeus), mikä on myös sen vaatiman lisämuistin tarve, mikäli toteutus hyödyntää rekursiota (muuten Theta(1)). Minimi on eniten vasemmalla ja maksimi eniten oikealla. Solmun seuraaja suuruusjärjestyksessä etsitään hyödyntämällä tietoa puun rakenteesta eikä vertailemalla avaimia. Solmun seuraaja on oikean alipuun pienin alkio tai solmusta juureen vievällä polulla ensimmäinen kohdattu solmu, jonka vasempaan alipuuhun solmu kuuluu (vastaavalla tavalla määritellään edeltäjä). Binäärihakupuuhun lisäys perustuu siihen, että uudelle alkiolle etsitään juuresta lehteen suunnistamalla sopiva paikka puussa. Koska poisto voi kohdistua puun sisäsolmuun, on sen toteuttaminen monimutkaisempaa. Kaikki operaatiot onnistuvat kuitenkin puun korkeuteen verrannollisessa ajassa. Binäärihakupuun korkeus on keskimäärin log(n), mutta huonossa tapauksessa se voi olla n. Punamustapuu Tasapainotettu binäärihakupuu, jossa lisäysten ja poistojen yhteydessä suoritetaan tasapainotusta, jolla taataan, etteivät operaatiot ole koskaan tehottomia, vaikka alkioiden lisäys tapahtuisikin epäsuotuisassa järjestyksessä. Invarianttina toimivat seuraavat ehdot: 1. punaisella solmulla on joko 0 lasta tai kaksi mustaa lasta, 2. jokaiselle solmulle pätee, että siitä alas vievillä poluilla on aina sama määrä mustia solmuja, 3. juurisolmu on aina musta. Etsiminen, minimi, maksimi, edellinen ja seuraaja toimivat ajassa Theta(log(n)). Tasapainotukset ja invariantin ylläpito tehdään kiertojen avulla ja värejä muuttamalla. Lisäyksessä sattunutta rikettä nostetaan puussa ylöspäin niin kauan kuin mahdollista. Lopulta kiertojen avulla rike korjataan (ks. algoritmit luentokalvoista 10). Solmua poistettaessa toimitaan aluksi kuten binäärihakupuussakin, mutta ehtojen mennessä rikki (tapaus, jossa poistettava on musta), täytyy puu korjata. Graafi Tietorakenne, joka koostuu solmuista ja solmujen välisistä kaarista. Graafi voi olla suunnattu tai suuntaamaton, monigraafi tai painotettu graafi. Toteutuksessa hyödynnetään osoittimia, jotta samaa tietoa ei tallennettaisi useasti. Graafeilla mallinnetaan asioiden välisiä suhteita. Esimerkiksi kartat ovat graafeja. C++ STL Sisältää säiliöitiä eli kirjaston tarjoamia tietorakenteita, geneerisiä algoritmeja sekä iteraattoreita, joiden avulla säiliöiden alkioita käsitellään.

7 Säiliöt jaetaan kahteen luokkaa. Sarjat ovat säiliöitä, joista alkioita voidaan hakea niiden järjestysnumeron perusteella, lisätä ja poistaa haluttuun paikkaan ja selata järjestyksessä. Esimerkiksi vector ja deque ovat sarjoja. Assosiatiivisen säiliöt puolestaan ovat tietorakenteita, joissa alkiot sijoitetaan avaimen määräämään kohtaan. Avainten on siis oltava vertailukelpoisia. Esimerkiksi map ja set ovat assosiatiivisia säiliöitä. Lisäksi on vielä järjestämättömiä assosiatiivisa säiliöitä (unordered_map/set) sekä säiliösovittimia (toteutus perustuu muihin säiliöihin), kuten queue ja stack. Sopivan säiliön valinta on tilannekohtaista, ja suoritusajat eri operaatioille vaihtelevat säiliöiden välillä (ks. Taulukko luentokalvo 13). Algoritmit ovat yleiskäyttöisiä, sillä ne käyttävät iteraattoreita säiliöiden sijaan. Koska kaikkien säiliöiden tapauksessa algoritmit eivät aina voi taata tehokasta suoritusaikaa, eivät kaiken tyyppiset iteraattorit käy kaikille algoritmeille.

1 Erilaisia tapoja järjestää

1 Erilaisia tapoja järjestää TIE-20100 Tietorakenteet ja algoritmit 1 1 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi. Lisäksi

Lisätiedot

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 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ätiedot

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 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ätiedot

4 Tehokkuus ja algoritmien suunnittelu

4 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ätiedot

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

TKT20001 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ätiedot

10. Painotetut graafit

10. Painotetut graafit 10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä

Lisätiedot

13 Lyhimmät painotetut polut

13 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ätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 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ätiedot

1 Puu, Keko ja Prioriteettijono

1 Puu, Keko ja Prioriteettijono TIE-20100 Tietorakenteet ja algoritmit 1 1 Puu, Keko ja Prioriteettijono Tässä luvussa käsitellään algoritmien suunnitteluperiaatetta muunna ja hallitse (transform and conquer) Lisäksi esitellään binääripuun

Lisätiedot

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

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, 652013, vastauksia 1 [6 pistettä] Vastaa jokaisesta alla olevasta väittämästä onko se tosi vai epätosi ja anna lyhyt perustelu Jokaisesta kohdasta

Lisätiedot

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

58131 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ätiedot

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä Luku 7 Verkkoalgoritmit Verkot soveltuvat monenlaisten ohjelmointiongelmien mallintamiseen. Tyypillinen esimerkki verkosta on tieverkosto, jonka rakenne muistuttaa luonnostaan verkkoa. Joskus taas verkko

Lisätiedot

Algoritmit 1. Luento 14 Ke 25.2.2015. Timo Männikkö

Algoritmit 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ätiedot

AVL-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 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ätiedot

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 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

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

3. 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ätiedot

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 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ätiedot

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Graafit ja verkot Suuntamaton graafi: eli haaroja Joukko solmuja ja joukko järjestämättömiä solmupareja Suunnattu graafi: Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Haaran päätesolmut:

Lisätiedot

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

Tämä on helpompi ymmärtää, kun tulkitaan keko täydellisesti tasapainotetuksi binääripuuksi, jonka juuri on talletettu taulukon paikkaan TIE-20100 Tietorakenteet ja algoritmit 178 Keko Taulukko A[1... n] on keko, jos A[i] A[2i] ja A[i] A[2i + 1] aina kun 1 i n 2 (ja 2i + 1 n). Tämä on helpompi ymmärtää, kun tulkitaan keko täydellisesti

Lisätiedot

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

lä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ätiedot

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat:

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat: 5. Keko Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat: Insert(S, x): lisää avaimen x prioriteettijonoon S Maximum(S):

Lisätiedot

9 Erilaisia tapoja järjestää

9 Erilaisia tapoja järjestää TIE-20100 Tietorakenteet ja algoritmit 198 9 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi.

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet 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ätiedot

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 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ätiedot

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.

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

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö Algoritmit 1 Luento 13 Ti 23.2.2016 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

TIE Tietorakenteet ja algoritmit 261

TIE Tietorakenteet ja algoritmit 261 TIE-20100 Tietorakenteet ja algoritmit 261 12 Graafit Seuraavaksi tutustutaan tietorakenteeseen, jonka muodostavat pisteet ja niiden välille muodostetut yhteydet graafiin. Keskitymme myös tyypillisimpiin

Lisätiedot

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Hakupuut. 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ätiedot

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

58131 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ätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet 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ätiedot

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

Tehtä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ätiedot

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 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ätiedot

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

58131 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ätiedot

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 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ätiedot

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan

Lisätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 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ätiedot

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 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ätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT ALGORITMIEN ANALYYSISTÄ 1.ratkaisu Laskentaaika hakkeri - optimoitu ALGORITMIANALYYSIÄ hyvä algoritmi hakkeri -optimoitu hyvä algoritmi Tehtävän koko Kuva mukailtu

Lisätiedot

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 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ätiedot

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmi 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ätiedot

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.

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

811312A 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ätiedot

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 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ätiedot

8. Lajittelu, joukot ja valinta

8. Lajittelu, joukot ja valinta 8. Lajittelu, joukot ja valinta Yksi tietojenkäsittelyn klassisista tehtävistä on lajittelu (järjestäminen) (sorting) jo mekaanisten tietojenkäsittelylaitteiden ajalta. Lajiteltua tietoa tarvitaan lukemattomissa

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 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ätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 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ätiedot

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät

Lisätiedot

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 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ätiedot

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

58131 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ätiedot

5 Kertaluokkamerkinnät

5 Kertaluokkamerkinnät TIE-20100 Tietorakenteet ja algoritmit 75 5 Kertaluokkamerkinnät Tässä luvussa käsitellään asymptoottisessa analyysissa käytettyjä matemaattisia merkintätapoja Määritellään tarkemmin Θ, sekä kaksi muuta

Lisätiedot

TIE Tietorakenteet ja algoritmit 25

TIE Tietorakenteet ja algoritmit 25 TIE-20100 Tietorakenteet ja algoritmit 25 Tällä kurssilla keskitytään algoritmien ideoihin ja algoritmit esitetään useimmiten pseudokoodina ilman laillisuustarkistuksia, virheiden käsittelyä yms. Otetaan

Lisätiedot

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

58131 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ätiedot

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tietorakenteet, 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ätiedot

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen) 58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe 12.9.2018 ratkaisuja (Jyrki Kivinen) 1. [10 pistettä] Iso-O-merkintä. (a) Pitääkö paikkansa, että n 3 + 5 = O(n 3 )? Ratkaisu: Pitää paikkansa.

Lisätiedot

Johdatus graafiteoriaan

Johdatus graafiteoriaan Johdatus graafiteoriaan Syksy 2017 Lauri Hella Tampereen yliopisto Luonnontieteiden tiedekunta 126 Luku 3 Puut 3.1 Puu 3.2 Virittävä puu 3.3 Virittävän puun konstruointi 3.4 Minimaalinen virittävä puu

Lisätiedot

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 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ätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 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ätiedot

4. Joukkojen käsittely

4. Joukkojen käsittely 4 Joukkojen käsittely Tämän luvun jälkeen opiskelija osaa soveltaa lomittuvien kasojen operaatioita tuntee lomittuvien kasojen toteutuksen binomi- ja Fibonacci-kasoina sekä näiden totetutusten analyysiperiaatteet

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 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ätiedot

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

811312A 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ätiedot

811312A Tietorakenteet ja algoritmit, 2015-2016. VI Algoritmien suunnitteluparadigmoja

811312A Tietorakenteet ja algoritmit, 2015-2016. VI Algoritmien suunnitteluparadigmoja 811312A Tietorakenteet ja algoritmit, 2015-2016 VI Algoritmien suunnitteluparadigmoja Sisältö 1. Hajota ja hallitse-menetelmä 2. Dynaaminen taulukointi 3. Ahneet algoritmit 4. Peruuttavat algoritmit 811312A

Lisätiedot

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

Tarkennamme geneeristä painamiskorotusalgoritmia

Tarkennamme 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ätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A 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ätiedot

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

58131 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ätiedot

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 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ätiedot

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

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

811312A 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 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ätiedot

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

Koe 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ätiedot

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

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu

811312A 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ätiedot

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 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ätiedot

1.1 Tavallinen binäärihakupuu

1.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ätiedot

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

f(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ätiedot

10. Painotetut graafit

10. Painotetut graafit 10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

ALGORITMIT 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ätiedot

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 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ätiedot

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 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ätiedot

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A 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ätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 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ätiedot

6. Sanakirjat. 6. luku 298

6. Sanakirjat. 6. luku 298 6. Sanakirjat Tässä luvussa tarkastellaan käsitettä sanakirja (dictionary). Tällaisen tietorakenteen tehtävä on tallettaa alkioita niin, että tiedonhaku rakenteesta on tehokasta. Nimi vastaa melko hyvin

Lisätiedot

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö Algoritmit 1 Luento 13 Ma 26.2.2018 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

Kierros 4: Binäärihakupuut

Kierros 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ätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin 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ätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

Lisätiedot

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen Tietorakenteet ja algoritmit Kertaus Ari Korhonen 1.12.2015 Tietorakenteet ja algoritmit - syksy 2015 1 Presemosta: 12. Kertaus» Mitkä tekijät, miten ja miksi vaiku1avat algoritmien nopeuteen» Rekursiohistoriapuut

Lisätiedot

HENRI MYLLYOJA BINÄÄRI- JA FIBONACCI-KEOT PRIORITEETTIJONON TO- TEUTUKSEEN. Kandidaatintyö

HENRI MYLLYOJA BINÄÄRI- JA FIBONACCI-KEOT PRIORITEETTIJONON TO- TEUTUKSEEN. Kandidaatintyö HENRI MYLLYOJA BINÄÄRI- JA FIBONACCI-KEOT PRIORITEETTIJONON TO- TEUTUKSEEN Kandidaatintyö Tarkastaja: Sami Hyrynsalmi Jätetty tarkastettavaksi 24.10.2017 I TIIVISTELMÄ HENRI MYLLYOJA: Binääri- ja Fibonacci-keot

Lisätiedot

Algoritmianalyysin perusteet

Algoritmianalyysin perusteet Tietorakenteet ja algoritmit Algoritmianalyysin perusteet Ari Korhonen 1 5. ALGORITMIANALYYSI 5.1 Johdanto 5.2 Tavoitteet 5.3 Algoritmien luokittelu 5.4 Kertaluokkamerkinnät (Big Oh Notation) 5.5 Kertaluokkamerkinnöillä

Lisätiedot

Binäärihaun vertailujärjestys

Binää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ätiedot

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

58131 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ätiedot

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

Miten 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ätiedot

Lisää segmenttipuusta

Lisää segmenttipuusta Luku 24 Lisää segmenttipuusta Segmenttipuu on monipuolinen tietorakenne, joka mahdollistaa monenlaisten kyselyiden toteuttamisen tehokkaasti. Tähän mennessä olemme käyttäneet kuitenkin segmenttipuuta melko

Lisätiedot

Luku 3. Listankäsittelyä. 3.1 Listat

Luku 3. Listankäsittelyä. 3.1 Listat Luku 3 Listankäsittelyä Funktio-ohjelmoinnin tärkein yksittäinen tietorakenne on lista. Listankäsittely on paitsi käytännöllisesti oleellinen aihe, se myös valaisee funktio-ohjelmoinnin ideaa. 3.1 Listat

Lisätiedot

CS-A1140 Tietorakenteet ja algoritmit

CS-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ätiedot

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I. Vaihto-ominaisuudella on seuraava intuition kannalta keskeinen seuraus: Olkoot A I ja B I samankokoisia riippumattomia joukkoja: A = B = m jollain m > 0. Olkoon vielä n = m A B, jolloin A B = B A = n.

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A 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ätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A 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ätiedot

A TIETORAKENTEET JA ALGORITMIT

A TIETORAKENTEET JA ALGORITMIT A274105 TIETORAKENTEET JA ALGORITMIT HARJOITUSTEHTÄVÄT 6 DEADLINE 1.4.2009 KLO 9:00 Kynätehtävät tehdään kirjallisesti ja esitetään harjoituksissa. Välivaiheet näkyviin! Ohjelmointitehtävät sähköisesti

Lisätiedot