58131 Tietorakenteet
|
|
- Saara Halonen
- 8 vuotta sitten
- Katselukertoja:
Transkriptio
1 58131 Tietorakenteet luennot keväällä 2008, periodit III IV Jyrki Kivinen tietojenkäsittelytieteen aineopintokurssi, 8 op, pääaineopiskelijoille pakollinen esitietoina Johdatus diskreettiin matematiikkaan ja Java-ohjelmointi mahdollinen jatkokurssi Algoritmien suunnittelu (valinnainen aineopintokurssi, 4 op, periodi III) tällä kurssilla opittavat tekniikat ja ajattelutavat ovat tarpeen kurssilla Laskennan mallit (pääaineopiskelijoille pakollinen aineopintokurssi) 1
2 Esitietovaatimuksisista Ohjelmointitaito Kurssilla ei (juurikaan) käytetä Javaa tai muuta varsinaista ohjelmointikieltä. Pääpaino on yleisillä periaatteilla, jotka esitetään käyttämällä luonnollista kieltä, kuvia, pseudokoodia jne. Kuitenkin pseudokoodiesitysten pyörittely vaatii sujuvaa ohjelmoinnin perusteiden hallintaa ja motivaation kannalta on oleellista, että yleiset periaatteet voidaan realisoida käytännön sovelluksissa. Java-toteutusta harjoitellaan erikseen harjoitustyössä. Matematiikka Kurssilla tarvitaan vain vähän varsinaisia matemattisia tietoja (teoreemoja yms.). Diskreetit perusrakenteet kuten verkot (eli graafit) tulevat käyttöön, ja jonkin verran tarvitaan joukko-oppia ja laskutaitoa. Oleellisempaa kuitenkin on, että tietorakenteiden käsittely vaatii samantyyppistä ajattelua kuin (diskreetti) matematiikka. 2
3 Annettava opetus, kurssin suorittaminen luentoja tuntia viikossa harjoituksia 2 tuntia viikossa alkaen 14.1.; tarkemmin seuraavilla kalvoilla kaksi kurssikoetta (kummankin periodin tenttiviikolla) (ei luentoja eikä harjoituksia tenttiviikoilla eikä väliviikolla) kokeissa osattava luennoilla ja harjoituksissa käsitellyt asiat Huom. kurssin arvioitu työmäärä on 213 tuntia (eli 14 viikon aikana keskimäärin yli 15 tuntia viikossa) maksimipisteet harjoituksista 12, tenteistä , yhteensä 60; hyväksymisraja n. 30, arvosanan 5/5 raja n. 50 3
4 Oppimateriaali Kokeissa edellytetää luennoilla ja harjoituksissa esitetyt asiat. Luentomateriaali (eli nämä kalvot) ilmestyvät kurssin kotisivulle kurssin edetessä. Luennot perustuvat Matti Nykäsen ja Matti Luukkaisen aiempaan luentomonisteeseen sekä tämän pohjalla olevaan vanhempaan luentomateriaaliin. Oheismateriaaliksi suositellaan kirjaa Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms. MIT Press Kurssin monet (mutta ei kaikki) keskeiset asiat perustuvat tähän kirjaan. Kalvokokoelmaa ei ole tarkoitettu itseopiskeluun; se saattaa tarvita tuekseen luentojen tai kirjan seuraamista. 4
5 Laskuharjoitukset Osa tehtävistä (noin joka toisella viikolla noin puolet) tehdään ryhmissä. Ryhmät muodostetaan toisella laskuharjoituskerralla ( ), jolloin pitää osallistua omaan ryhmään. Suurin osa tehtävistä tehdään itsenäisesti (laitoksen normaali käytäntö), mutta niistäkin voi mielellään keskustella ryhmissä. Osa tehtävistä tehdään verkossa TRAKLA2-tietorakennesimulaattorilla. Tästä annetaan myöhemmin lisäohjeita. Kurssin suorittaminen edellyttää, että kaikista harjoituksista yhteensä (ryhmä + henk.koht + TRAKLA) ainakin 25% on tehty. Tekemällä 25% tehtävistä saa 0/12 pistettä. Tekemällä 85% tehtävistä saa 12/12 pistettä. 5
6 Sisältö 1. Johdanto: oikeellisuus, vaativuus, matemaattisia työkaluja 2. Perustietorakenteita: pino, jono ja lista, niiden toteutus ja käyttäminen 3. Hakupuut: eräs tehokas tapa suurten tietomäärien organisoimiseen 4. Hajautus: toinen tehokas tapa suurten tietomäärien organisoimiseen 5. Järjestäminen ja kekorakenne 6. Verkot: tallettaminen, perusalgoritmit, polunetsintä, virittävät puut Kurssilla etsitään vastauksia seuraavanlaisiin kysymyksiin: miten laskennassa tarvittavat tiedot organisoidaan tehokkaasti miten varmistumme toteutuksen toimivuudesta miten analysoimme toteutuksen tehokkuutta ja millaisia tunnettuja tietorakenteita voimme hyödyntää. 6
7 1. Johdanto Tarkastelemme esimerkkien valossa joitain peruskäsitteitä: tietorakenne abstrakti tietotyyppi algoritmi. Tutustumme silmukkainvariantteihin, jotka ovat keskeinen keino analysoida algoritmien oikeellisuutta. Tietorakenteiden ja algoritmien tehokkuuden tarkastelua varten tarkastellaan funktioiden kertaluokkia. 7
8 Tietorakenteet: mitä ja miksi Tietorakenne (data structure) on tapa organisoida dataa (tyypillisesti tietokoneen muistiin) siten, että se on tarvittavalla tavalla käytettävissä ja muokattavissa. Tietorakenteeseen kuuluu talletusrakenne: miten data esitetään koneen muistissa (tms.) operaatiot: miten tietorakennetta muokataan ja siellä oleva data saadaan käyttöön. Ohjelmointikielistä tuttu perusesimerkki on taulukko: esim ulotteinen kokonaislukutaulukko voitaisiin esittää Javassa muuttujana int[][] a = new int[5][10]. Talletusrakenne voisi olla, että alkio a(i, j) talletetaan muistipaikkaan B + 10i + j jollain B. (Tässä 0 i 4 ja 0 j 9.) Taulukkoa käsitellään indeksoimalla: a[3][8]= 15; x= a[2,7]; 8
9 Tietorakenteeseen liittyy läheisesti käsite abstrakti tietotyyppi. Abstrakti tietotyyppi määrittelee tietorakenteen sallitut operaatiot ja niiden tulokset, mutta ei ota kantaa toteutukseen. Esimerkki 1.1: Tarkastellaan puhelinluetteloa, jossa on pareja (nimi,puhelinnumero). Abstrakti tietotyyppi puhelinluettelo voisi sallia seuraavat operaatiot: init: luo tyhjä puhelinluettelo add(n, p): lisää pari (n, p) del(n): poista henkilö n luettelosta find(n): palauta henkilön n puhelinnumero list: listaa kaikki nimet ja numerot aakkosjärjestyksessä. Oletetaan, että sekä nimet että numerot ovat pituudeltaan sopivasti rajoitettuja merkkijonoja. 9
10 Mahdollisia talletustapoja: talletetaan taulukkoon (nimi,numero)-pareja mielivaltaisessa järjestyksessä talletetaan taulukkoon (nimi,numero)-pareja nimen mukaan aakkosjärjestyksessä talletetaan taulukkoon osoittimia erilliselle talletusalueelle, jossa (nimi,numero)-parit säilytetään binäärihakupuu (esitellään myöhemmin kurssilla) B-buu (esitellään myöhemmin kurssilla) hajautustaulukko (esitellään myöhemmin kurssilla) Paras talletustapa riippuu tilanteesta: kuinka paljon dataa on kuinka usein mitäkin operaatiota suoritetaan mitkä ovat eri operaatioiden nopeusvaatimukset onko muistitilasta pulaa jne. 10
11 Helin Nurmi Karhu Palin Rinne Autio Lokki Lahti Karhu Nurmi Autio Palin Lahti Rinne Lokki Helin Talletus taulukkoon (järjestys mielivaltainen) Erillinen talletusalue 11
12 Esimerkki 1.2: Lyhimmän reitin etsiminen Annettu: Suomen paikkakuntien väliset suorat maantie-etäisyydet Kysymys: paljonko matkaa Helsingistä Nuorgamiin? Jatkokysymys: lyhin reitti Helsingistä Nuorgamiin? Helsinki Lahti 106 km Helsinki Turku 166 km Turku Pori 138 km Lahti Tampere 127 km Sodankylä Nuorgam 368 km = Helsinki Lahti Heinola... Sodankylä Nuorgam yht km 12
13 Sopiva matemaattinen malli tilanteelle: painotettu suuntaamaton verkko. 114 Pori Tampere Jyväskylä Helsinki Turku Lahti Heinola Sodankylä 368 Nuorgam Kysymyksessä on lyhimmän polun etsiminen verkosta. Kurssin loppupuolella esitetään tehokas ratkaisumenetelmä nimeltään Dijkstran algoritmi. 13
14 Triviaaliratkaisu: käydään järjestyksessä läpi kaikki mahdolliset reitit (paikkakuntien järjestykset eli permutaatiot). oletetaan 30 paikkakuntaa 30! 2, permutaatiota oletetaan kone testaa miljoona permutaatiota sekunnissa tarvitaan 8, vuotta. (Alkuräjähdyksestä on luokkaa vuotta.) Heuristinen ratkaisu: ihminen ratkaisee ongelman käyttämällä hyväksi paikkakuntien maantieteellistä sijaintia voidaan käyttää myös tietokoneella (esim. A -algoritmi, Tekoäly) ei tarvita näin pieniin ongelmiin 14
15 Tällä kurssilla esitettävät algoritmit: Dijkstran algoritmi: laskee lyhimmät reitit esim. Helsingistä kaikille muille paikkakunnille Floydin algoritmi: laskee yhdellä kertaa lyhimmät etäisyydet minkä tahansa kahden paikkakunnan välillä Kumpikin toimii näin pienillä aineistoilla silmänräpäyksessä. (Dijkstra vaatii karkeasti samaa luokkaa olevan ajan kuin järjestäminen, Floyd vähän enemmän.) Dijkstran algoritmissa keskeinen aputietorakenne on keko (eli kasa, engl. heap). Se tukee (mm.) seuraavia operaatioita: Insert(k): lisää avaimen k kekoon Min: palauttaa pienimmän keossa olevan avaimen DelMin: poistaa keosta pienimmän avaimen Vastaavaa abstraktia tietotyyppiä sanotaan prioriteettijonoksi. (Ideana on karkeasti, että potentiaalisesti matkaa edistävät yhteydet viedään kekoon, josta niitä poimitaan suuruusjärjestyksessä.) 15
16 Yhteenveto Tietorakenteita ja abstrakteja tietotyyppejä tarvitaan ongelmien mallintamiseen suurten tietomäärien hallintaan laskennan välivaiheiden käsittelyyn. Tietorakenteet ja algoritmit liittyvät erottamattomasti toisiinsa: tietorakenteiden toteuttamiseen tarvitaan algoritmeja oikeat tietorakenteet tekevät algoritmista tehokkaan. Samat operaatiot voidaan yleensä toteuttaa usealla eri tavalla. Tilanteesta riippuu, mikä on paras. 16
17 Miksi pakollinen kurssi Tietorakenteet... vaikka kurssilla käsiteltävät tietorakenteet ja algoritmit löytyvät valmiina erilaisista kirjastoista: kurssilla näemme (hieman), mitä on tarjolla sopivan (tehokkaan) tietorakenteen valitseminen ei aina ole helppoa perustietorakenteet ovat niin keskeinen osa tietojenkäsittelytiedettä, että ne pitää tuntea pintaa syvemmältä (myös toteutus) tietorakenteisiin liittyvät perusalgoritmit ovat opettavaisia esimerkkejä algoritmien suunnittelelutekniikoista. 17
18 Tietokoneet nopeutuvat, mutta tehokkuus on silti tärkeää: käsiteltävät datamäärät kasvavat halutaan ratkaista yhä vaikeampia ongelmia (tekoäly, grafiikka,... ) tehokkaan ja tehottoman ratkaisun ero voi olla niin suuri, että mikään laskentatehon kasvu ei kompensoi sitä. Paradoksaalisesti laitetehojen parantuminen saattaa jopa tehdä algoritmin tehokkuudesta tärkeämpää: algoritmien tehokkuuserot näkyvät yleensä selvästi vasta suurilla syötteillä tehokkaat koneet mahdollistavat yhä suurempien syötteiden käsittelemisen. 18
19 Muuttuva ympäristö tuo myös uusia tehokkuushaasteita: sensoriverkot yms. tuottavat dataa jatkuvasti käsittelyn oltava (lähes) reaaliaikaista tarve rinnakkaistaa laskentaa mobiililaitteiden rajoitettu kapasitetti muistihierarkiat jne. Tällä kurssilla keskitytään kuitenkin klassisiin perusasioihin. 19
20 Algoritmit: oikeellisuus ja vaativuus Esitämme algoritmit yleensä pseudokoodina, joka on riittävän tarkka, että algoritmi osattaisiin toteuttaa mutta ei ota kantaa esim. ohjelmointikielestä riippuviin yksityiskohtiin. Esimerkki 1.3: Seuraava algoritmi etsii kokonaislukutaulukon A[1.. n] pienimmän alkion indeksin: Find-Smallest(A) 1 ind 1 2 for i 2 to length[a] 3 do 4 Invariantti: A[ind] = min A[1.. i 1] 5 if A[i] < A[ind] 6 then ind i 7 return ind (Rivi 4 on kommentti; palaamme sen sisältöön myöhemmin.) 20
21 Selityksiä pseudokoodimerkinnöille: sisennys ilmaisee lohkorakenteen (Javassa {... }); rivijako ja -numerointi ei merkityksellistä kommenttimerkki, sijoitusmerkki, yhtäsuuruusvertailu = A[i] taulukon i:s alkio; A[i.. j] osataulukko (A[i], A[i + 1],..., A[j]) Jos rakenteella C on esim. kentät key ja data, niihin viitataan key[c] ja data[c] (Javassa C.key ja C.data) loogiset ehdot evaluoidaan vasemmalta oikealle oikosulkuisesti : jos esim. x on epätosi ja y ei määritelty, niin x and y on epätosi esimerkki oikosulkemisesta: if p Nil and key[p] =... missä Nil on nollaosoitin (ts. viite olioon, jota ei ole olemassa) silmukan for i 1 to n jälkeen muuttujan i arvona on n + 1 (olettaen n 1) 21
22 Algoritmista Find-Smallest näkee suoraan, että se on oikeellinen eli tuottaa halutun tuloksen ja aikavaativuudeltaan suunnilleen niin hyvä kuin mahdollista. Käytämme sitä kuitenkin esimerkkinä havainnollistamaan oikeellisuuden ja aikavaativuuden analysoinnissa käytettäviä tekniikoita: silmukkainvariantti funktion kertaluokka ( iso-o-notaatio ) 22
23 Silmukkainvariantti Invarianteilla voidaan todistaa algoritmin oikeellisuus haluttaessa hyvinkin formaalisti. Meidän kannaltamme on kiinnostavampaa käyttää niitä algoritmien laatimiseen ja toimintaperiaatteen kuvailemiseen. Algoritmin Find-Smallest for-silmukan invariantti on kirjoitettu kommentiksi silmukan alkuun: missä on käytetty merkintää A[ind] = min A[1.. i 1], min A[i.. j] = min { A[i], A[i + 1],..., A[j] } = pienin luvuista A[i], A[i + 1],..., A[j]. 23
24 Intuitiivisesti algoritmin Find-Smallest silmukkainvariantti A[ind] = min A[1.. i 1], kertoo, että silmukan periaate on seuraava: 1. Ensimmäisellä kierroksella (i = 2) oletetaan, että silmukan ulkopuolella on saatettu voimaan A[ind] = min A[1..2 1] = A[1], ja oletusta hyväksikäyttäen saatetaan voimaan A[ind] = min A[1..(2 + 1) 1] = min A[1..2]. 2. Toisella kierroksella (i = 3) oletetaan, että edellisellä kierroksella on saatettu voimaan A[ind] = min A[1..3 1] = min A[1..2], ja oletusta hyväksikäyttäen saatetaan voimaan A[ind] = min A[1..(3 + 1) 1] = min A[1..3]
25 Yleisemmin silmukan invariantti on (ohjelman tietorakenteita koskeva looginen) väittämä, joka 1. on voimassa kun silmukkaan tullaan ensimmäistä kertaa 2. pysyy voimassa kun silmukkaa suoritetaan yksi kierros ja 3. yhdessä silmukan lopetusehdon kanssa sanoo jotain mielenkiintoista. Huomaa, että ehdoista 1 ja 2 yhdessä seuraa, että invariantti on voimassa silmukan jokaisen suorituskerran alussa ja myös silmukasta poistuttaessa. (Tämä on analogista luonnollisten lukujen induktion kanssa.) Silmukkainvariantti on samanhenkinen suunnittelu- ja todistustekniikka kuin aliohjelmien esi- ja jälkiehdot (precondition, postcondition). 25
26 Esimerkin invariantilla on halutut ominaisuudet: 1. Aluksi ind = 1 ja i = 2, joten min A[1.. i 1] = min A[1..1] = A[1] = A[ind]. 2. Silmukan runkoa suoritettaessa joko (a) A[i] < min A[1.. i 1], jolloin min A[1..(i + 1) 1] = A[i] ja ind saa arvon i, tai (b) A[i] min A[1.. i 1], jolloin min A[1..(i + 1) 1] = min A[1.. i 1] ja ind pysyy ennallaan, joten kummassakin tapauksessa invariantti pysyy voimassa. 3. Silmukan päättyessä i = length[a] + 1, joten min A[1.. i 1] on haluttu taulukon pienin alkio. 26
27 Algoritmin vaativuus Vaativuutta tarkastellaan erilaisten resurssien kannalta: laskentaan kuluva aika laskennan vaatima muistitila tarvittavan tietoliikenteen määrä... Tällä kurssilla esiintyvillä algoritmeilla mielenkiintoiset erot ovat yleensä aikavaativuudessa, joten keskitymme siihen. Myös tilavaativuutta (muistintarvetta) tarkastellaan jonkin verran. Jos algoritmien tilavaativuudessa on suuria eroja, tämä on usein ratkaisevaa. 27
28 Tarkastelemme resursseja lähinnä skaalautuvuuden kannalta: kuinka algoritmin/tietorakenteen resurssitarve kasvaa, kun syötteen koko kasvaa. Arvioimme siis aika- ja tilavaativuutta syötteen koon n funktiona. Esim. kutsulla Find-Smallest(A) syötteen kooksi ajatellaan n = length[a]. Olemme kiinnostuneet tapauksesta, jossa n on suuri. Tämä antaa yleiskuvan siitä, mitkä algoritmit ja tietorakenteet soveltuvat minkinlaisiin tilanteisiin. Yksittäisessä sovelluksessa on tietysti tärkeämpää suorituskyky: millaiset vasteajat saadaan sillä kuormalla, joka järjestelmässä oikeasti esiintyy. 28
29 Esimerkki 1.4: Tarkastellaan edelleen algoritmia Find-Smallest. Oletetaan ensin, että pseudokoodin kunkin riviin i suorittaminen yhden kerran vaatii ajan c i. Tarkastellaan, montako kertaa kukin rivi suoritetaan, kun length[a] = n. Find-Smallest(A) aika suorituskertojen lkm. 1 ind 1 c for i 2 to length[a] c 2 n 1 3 do 0 n n 1 5 if A[i] < A[ind] c 5 n 1 6 then ind i c 6 0 lkm. n 1 7 return ind c 7 1 Tässä c 2 esittää for-silmukan laskurin kasvattamista ja testaamista ja c 5 if-ehdon testaamista jne. 29
30 Paras tapaus: Suoritusaika on pienin, jos A[1] on taulukon pienin alkio. Tällöin riviä 6 ei suoriteta kertaakaan. Aikaa kuluu T min (n) = (c 2 + c 5 )(n 1) + c 1 + c 7 = a 1 n + b 1, missä a 1 = c 2 + c 5 ja b 1 = c 1 c 2 c 5 + c 7. Pahin tapaus: Suoritusaika on suurin, jos A on laskevassa järjestyksessä, jolloin rivi 6 suoritetaan joka kerta. Aikaa kuluu T max (n) = (c 2 + c 5 + c 6 )(n 1) + c 1 + c 7 = a 2 n + b 2, missä a 2 = c 2 + c 5 + c 6 ja b 2 = c 1 c 2 c 5 c 6 + c 7. Tässä esimerkissä parhaan ja pahimman tapauksen välillä ei näyttäisi olevan suurta eroa. 30
31 Yleensä paras tapaus ei ole hyödyllinen algoritmien vertailussa, sillä mikä tahansa algoritmi yleensä toimii hyvin jollain syötteellä. Pahin tapaus taas on toisinaan turhankin pessimistinen. Voidaan analysoida myös keskimääräistä tapausta: mikä on aikavaativuuden odotusarvo, jos A on satunnaisessa järjestyksessä. Tämäkin on ongelmallista: tarvitaan kyseenalaisia ja epärealistisia oletuksia syötteen jakaumasta silti analyysi on teknisesti erittäin vaikeaa odotusarvo on usein huono tunnusluku jakaumalle (ja mediaanin tms. analysoiminen vielä vaikeampaa). Tyydymme siksi käyttämään pahimman tapauksen aikavaativuutta tehokkuusmittarina. Yleensä tämä antaa oikean kuvan tilanteesta. 31
32 Vakiot c 1,..., c 7 ovat monella tapaa ongelmallisia: todelliset ajat riippuvat laitteistosta ja ohjelmointikielestä annetulle laitteistolle jne. ajat riippuvat järjestelmän muusta kuormasta yms. tulokset ovat hankalia ja epähavainnollisia Siis vakioiden tarkka määrittäminen on (a) mahdotonta ja (b) hyödytöntä. Tämän takia määrittelemme kohta suuruusluokkamerkinnän, jota käyttäen unohdamme ikävät vakiot ja kirjoitamme T min (n) = O(n) ja T max (n) = O(n). Tämä sanoo suunnilleen, että suurilla n syötteen koon kaksinkertaistaminen kaksinkertaistaa myös laskenta-ajan. 32
33 Tarkastellaan oikeellisuutta ja aikavaativuutta vähemmän triviaalissa esimerkissä: Esimerkki 1.5: Lisäysjärjestäminen (insertion sort): Algoritmi järjestää taulukon A[1.. n] vaiheittain. Vaiheessa j oletetaan, että A[1.. j] on järjestyksessä järjestetään A[1.. j + 1] työntämällä A[j + 1] sopivaan väliin A[1.. j]:ssä Seuraavan sivun kuva esittää lisäysjärjestämisen vaihetta j, kun A[1] A[2]... A[k] A[j + 1] A[k + 1]... A[j]. 33
34 A[1] A[1] A[2] A[2] A[3] A[3] järjestyksessä A[k] A[k] järjestyksessä A[k + 1] A[j + 1]... A[k + 1] A[j]... A[j + 1] A[j] A[j + 2] A[j + 2] A[n] A[n] 34
35 Lisäysjärjestäminen pseudokoodina: Insertion-Sort(A) 1 for j 2 to length[a] do Invariantti: A[1.. j 1] järjestyksessä 2 key A[j] 3 i j 1 4 while i > 0 and A[i] > key do 5 A[i + 1] A[i] 6 i i 1 7 A[i + 1] key 35
36 Merkitään n = length[a]. Silmukasta poistuttaessa j = n + 1, joten jos invariantti on voimassa, koko taulukko A = A[1..(n + 1) 1] on järjestyksessä. Silmukkaan ensi kertaa tullessa j = 2. Siis A[1.. j 1] on yhden alkion kokoinen ja invariantti varmasti pätee. Oletetaan, että kierroksen j 1 jälkeen A[1.. j] on järjestyksessä. Olkoon k kuten edellä: A[1] A[2]... A[k] A[j + 1] < A[k + 1]... A[j]; jos A[j + 1] A[j], niin k = j ja A[1] A[2]... A[j] A[j + 1]. 36
37 Tarkastelemalla while-silmukkaa nähdään, että sen suorituksen jälkeen A[1.. k] on sama kuin ennen uusi A[k + 1] on vanha A[j + 1] uusi A[k j + 1] on vanha A[k j]. Oletuksen mukaan vanha A[1.. k] ja vanha A[k j] ovat järjestyksessä ja Vanhat A[k], A[k + 1] ja A[j + 1] ovat järjestyksessä A[k] A[j + 1] < A[k + 1]. Siis uusi A[1.. j + 1] on järjestyksessä. Olemme todenneet, että algoritmi toimii oikein. 37
38 Arvioidaan suoritusaikaa samoin kuin edellä. Olkoon t j while-silmukan ehtotestien suorituskerrat kierroksella j. Insertion-Sort(A) aika kertaa 1 for j 2 to length[a] c 1 n do... 0 n 1 2 key A[j] c 2 n 1 3 i j 1 c 3 n 1 4 while i > 0 and A[i] > key c n 4 j=2 t j do 5 A[i + 1] A[i] c 5 6 i i 1 c 6 n j=2 (t j 1) n j=2 (t j 1) 7 A[i + 1] key c 7 n 1 38
39 Aikaa siis kuluu n c 1 n + (c 2 + c 3 + c 7 )(n 1) + c 4 t j + (c 5 + c 6 ) j=2 n (t j 1). Paras tapaus: Jos taulukko on valmiiksi järjestyksessä, niin t j = 1 kaikilla j. Aikavaativuus on j=2 T min (n) = (c 1 + c 2 + c 3 + c 4 + c 7 )n (c 2 + c 3 + c 4 + c 7 ) = a n + b, missä a = c 1 + c 2 + c 3 + c 4 + c 7 ja b = (c 2 + c 3 + c 4 + c 7 ). Kuten edellisessä esimerkissä, parhaan tapauksen aikavaativuus on lineaarinen ja syötteen kaksinkertaistaminen kaksinkertaistaa laskenta-ajan. 39
40 Pahin tapaus: Jos taulukko on käänteisessä järjestyksessä, niin t j = j kaikilla j. Aikavaativuus on T max (n) = c 1 n + (c 2 + c 3 + c 7 )(n 1) n n + c 4 j + (c 5 + c 6 ) (j 1) j=2 j=2 n + 2 = c 1 n + (c 2 + c 3 + c 7 )(n 1) + c 4 (n 1) 2 + (c 5 + c 6 ) n + 1 (n 1) 2 = an 2 + bn + c, missä a = (c 4 + c 5 + c 6 )/2, b = c 1 + c 2 + c 3 + c 4 /2 + c 7 ja c = c 2 c 3 c 4 c 5 /2 c 6 /2 c 7. Tässä on käytetty kaavaa q k=p k = p + q (q p + 1). 2 Siis T max (n) on neliöllinen: pahimmassa tapauksessa syötteen kaksinkertaistaminen suunnilleen nelinkertaistaa laskenta-ajan. 40
41 Funktioiden kertaluokat Haluamme päästä eroon edellisten aikavaativuusarvioiden vakioista c 1, c 2 jne. Olkoot f ja g funktioita N R. Ajatus on, että f on jonkin algoritmin aikavaativuus (esim. T max edellä) ja g sen sopivasti yksinkertaistettu versio. Sanomme, että f kuuluu kertaluokkaan O(g), ja kirjoitamme f = O(g), jos voidaan valita sellaiset vakiot d > 0 ja n 0 > 0, että kaikilla n N pätee: Motivaatio: jos n n 0 niin 0 f(n) dg(n). algoritmin käyttäytyminen pienillä syötteillä usein epätyypillistä, joten liian pienet syötteet (n < n 0 ) voidaan jättää huomiotta suurillakin syötteillä vakiokertoimet jätetään edellä esitetyistä syistä huomiotta. 41
42 Esimerkki 1.6: Olkoon T(n) = an + b ja g(n) = n kaikilla n, missä b 0 ja c 0. Valitaan d = a + 1 ja n 0 = b. Jos nyt n n 0, niin T(n) = an + b = an + n 0 an + n = (a + 1)n = dn. Siis T = O(g). Yleensä merkitsemme tämän yksinkertaisemmin (ja epätäsmällisemmin) T(n) = O(n). Esimerkki 1.7: Olkoon T(n) = an 2 + bn + c, missä a, b ja c ovat ei-negatiivisia. Väitämme, että T(n) = O(n 2 ). Valitaan n 0 = 1 ja d = a + b + c. Kun n n 0, pätee T(n) = an 2 + bn + c an 2 + bn n + c n 2 = (a + b + c)n 2 = dn 2 eli haluttu yläraja. 42
43 Yleisemminkin polynomifunktiossa ylimmänasteinen termi antaa kertaluokan: jos T(n) = a k n k + a k 1 n k a 1 n + a 0 missä a k > 0 ja k on vakio, niin T(n) = O(n k ). Toinen tapa ajatella sama asia: Kertaluokka antaa ylärajan funktion kasvunopeudelle. Jos funktiossa on useita eri nopeudella kasvavia termejä, nopeimmin kasvava voittaa. Edellisen perusteella voimme todeta, että algoritmin Find-Smallest aikavaativuus on O(n) sekä parhaassa että pahimmassa tapauksessa. Lisäysjärjestämisen pahimman tapauksen aikavaativuus on O(n 2 ), mutta parhaan tapauksen aikavaativuus vain O(n). 43
44 O-merkintä ilmaisee vain ylärajan funktion kasvunopeudelle. Jos T on lisäysjärjestämisen parhaan tapauksen aikavaativuus, niin sekä T(n) = O(n) että T(n) = O(n 2 ) ovat tosia väittämiä, mutta ensimmäinen on huomattavasti informatiivisempi. Otamme käyttöön vastaavan merkinnän alarajoille. Sanomme, että f kuuluu kertaluokkaan Ω(g), ja kirjoitamme f = Ω(g) (tai f(n) = Ω(g(n))), jos voidaan valita sellaiset vakiot d > 0 ja n 0 > 0, että kaikilla n N pätee: jos n n 0 niin 0 dg(n) f(n). Esimerkki 1.8: Olkoon T(n) = an + b, missä a, b > 0. Nyt T(n) = Ω(n), sillä valitsemalla n 0 = 1 ja d = a saadaan T(n) dn kun n n 0. Toisaalta ei päde T(n) = Ω(n 2 ): Olkoot d ja n 0 mielivaltaiset. Jos valitaan n = max {1, n 0,(a + b + 1)/d }, niin eli ehto ei toteudu. T(n) = an + b (a + b)n < dn 2 44
45 Määrittelemme vielä, että f kuuluu kertaluokkaan Θ(g), ja kirjoitamme f = Θ(g) (tai f(n) = Ω(g(n))), jos voidaan valita sellaiset vakiot d 1 > 0, d 2 > 0 ja n 0 > 0, että kaikilla n N pätee: jos n n 0 niin 0 d 1 g(n) f(n) d 2 g(n). Helposti nähdään, että seuraavat ehdot ovat yhtäpitäviä: f = Θ(g) f = O(g) ja f = Ω(g) f = O(g) ja g = O(f). Intuitiivisesti f = O(g) tarkoittaa, että f kasvaa korkeintaan yhtä nopeasti kuin g f = Ω(g) tarkoittaa, että f kasvaa ainakin yhtä nopeasti kuin g f = Θ(g) tarkoittaa, että f kasvaa tasan yhtä nopeasti kuin g. 45
46 Yleisesti esiintyviä aikavaativuusluokkia: O(1) (vakio) [alkion hakeminen taulukosta] O(log n) (logaritminen) [indeksoitu haku tietokannasta, jossa n tietuetta] O(n) (lineaarinen) [yksinkertainen perustietojenkäsittely] O(nlog n) [tehokkaat järjestämisalgoritmit jne.] O(n 2 ), O(n 3 ) jne. (polynominen) [tehokkaat verkkoalgoritmit] O(2 n ), O(3 n ) jne. (eksponentiaalinen) [tekoälyongelmat jne.] Polynomisten ja eksponentiaalisten algoritmien skaalautuvuudessa on merkittävä ero. Eksponentiaaliset (ja korkea-asteiset polynomiset) käytännöllisiä vain pienillä syötteillä Pieni voi olla esim. n = 50 tai n = 5000 Eksponentiaalisilla aikavaativuuksilla on eroja! 3 n ei ole O(2 n )! 46
47 1 1.5e-3*x*log(x)/log(2) 1e-4*x**2 1e-6*x**3 1e-3*2**(x/10) Tarkastellaan neljää algoritmia, joiden aikavaativuudet ovat T 1 (n) = anlog 2 n, T 2 (n) = bn 2, T 3 (n) = cn 3 ja T 4 (n) = d2 n/10. Vakiot a, b, c ja d valittu siten, että jokainen algoritmi vie yhden yksikön aikaa, kun n =
48 10 1.5e-3*x*log(x)/log(2) 1e-4*x**2 1e-6*x**3 1e-3*2**(x/10) Kuinka paljon suurempia syötteitä voidaan käsitellä, jos aikaa onkin 10 yksikköä? Algoritmi 1: n 710; algoritmi 2: n 320; algoritmi 3: n 220; algoritmi 4: n
49 Pikakertaus: logaritmi Koulumatematiikasta muistetaan, että log a x on sellainen luku z, jolla a z = x. Tässä oletetaan yleentä a > 0 ja x > 0. Luonnollinen logaritmi on ln x = log e x, missä kantalukuna on Neperin luku e = lim n (1 + 1/n) n 2,718. Kaksikantainen logaritmi log 2 n kertoo luonnollisen luvun n pituuden bitteinä (miinus 1) montako kertaa n pitää puolittaa, että päästään alle 2:n. Laskusääntöjä: log a (xy) = log a x + log a y log a (x y ) = y log a x log a x = log b x log b a 49
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
1.4 Funktioiden kertaluokat
1.4 Funktioiden kertaluokat f on kertaluokkaa O(g), merk. f = O(g), jos joillain c > 0, m N pätee f(n) cg(n) aina kun n m f on samaa kertaluokkaa kuin g, merk. f = Θ(g), jos joillain a, b > 0, m N pätee
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
3. Laskennan vaativuusteoriaa
3. Laskennan vaativuusteoriaa tähän asti puhuttu siitä, mitä on mahdollista laskea äärellisessä ajassa siirrytään tarkastelemaan laskemista kohtuullisessa ajassa vaihtoehtoisesti voidaan laskenta-ajan
Esimerkkejä polynomisista ja ei-polynomisista ongelmista
Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia
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
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ä
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:
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
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
Algoritmit 2. Luento 1 Ti Timo Männikkö
Algoritmit 2 Luento 1 Ti 14.3.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin valinta Algoritmin analysointi Algoritmin suoritusaika Peruskertaluokkia Kertaluokkamerkinnät Kertaluokkien ominaisuuksia
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
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
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
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
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
58131 Tietorakenteet ja algoritmit. Kevät 2016 Jyrki Kivinen
58131 Tietorakenteet ja algoritmit Kevät 2016 Jyrki Kivinen 1 Sisällys 1. Johdanto ja kertausta: tietoa kurssista, matematiikan kertausta, rekursio 2. Johdanto tietorakenteisiin: algoritmien oikeellisuus,
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
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.
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
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
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
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
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,
811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
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
811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
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
Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja
58053-7 Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja Malliratkaisut ja pisteytysohje: Jyrki Kivinen Tentin arvostelu: Jouni Siren (tehtävät 1 ja 2) ja Jyrki Kivinen (tehtävät
811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu
811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 3, Ratkaisu Harjoituksessa käsitellään algoritmien aikakompleksisuutta. Tehtävä 3.1 Kuvitteelliset algoritmit A ja B lajittelevat syötteenään
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
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
Tietorakenteet, laskuharjoitus 2,
Tietorakenteet, laskuharjoitus, 6.-9.1 Muista TRAKLA-tehtävien deadline 31.1. 1. Tarkastellaan ensin tehtävää yleisellä tasolla. Jos funktion T vaativuusluokka on O(f), niin funktio T on muotoa T (n) =
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
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):
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
Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9
Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Tuntitehtävät 9-10 lasketaan alkuviikon harjoituksissa ja tuntitehtävät 13-14 loppuviikon harjoituksissa. Kotitehtävät 11-12 tarkastetaan loppuviikon
Esimerkkejä vaativuusluokista
Esimerkkejä vaativuusluokista Seuraaville kalvoille on poimittu joitain esimerkkejä havainnollistamaan algoritmien aikavaativuusluokkia. Esimerkit on valittu melko mielivaltaisesti laitoksella tehtävään
58131 Tietorakenteet ja algoritmit (syksy 2015)
58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen
Algoritmit 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
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
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
(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ä.
Loppu seuraa suoralla laskulla: n n Tave TR = p j (1 + b (i, j)) j=1 = 1 + 1 i
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ä.
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
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 =
Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna
Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna. q 0 x solmuina laskennan mahdolliset tilanteet juurena alkutilanne lehtinä tilanteet joista ei siirtymää,
Tutkimusmenetelmät-kurssi, s-2004
Algoritmitutkimuksen menetelmistä Tutkimusmenetelmät-kurssi, s-2004 Pekka Kilpeläinen Kuopion yliopisto Tietojenkäsittelytieteen laitos Algoritmitutkimuksen menetelmistä p.1/20 Sisällys Tänään Tietojenkäsittelytiede
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
811312A 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,
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
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
TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit
TIE-20100 Tietorakenteet ja algoritmit 1 TIE-20100 Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 2 Lähteet Luentomoniste pohjautuu vahvasti prof. Antti Valmarin vanhaan luentomonisteeseen
2. Johdanto tietorakenteisiin
2. Johdanto tietorakenteisiin Kaikki epätriviaalit ohjelmat joutuvat tallettamaan ja käsittelemään tietoa suoritusaikanaan Esim. "puhelinluettelo": numeron lisäys numeron poisto numeron muutos numeron
58131 Tietorakenteet ja algoritmit. Kevät 2015 Patrik Floréen ja Jyrki Kivinen
58131 Tietorakenteet ja algoritmit Kevät 2015 Patrik Floréen ja Jyrki Kivinen 1 Sisällys 1. Johdanto ja kertausta: tietoa kurssista, matematiikan kertausta, rekursio 2. Johdanto tietorakenteisiin: algoritmien
Algoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 1 25.-26.1.2017 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka laskee kahden kokonaisluvun välisen jakojäännöksen käyttämättä lainkaan jakolaskuja Jaettava m, jakaja n Vähennetään luku
7.4 Sormenjälkitekniikka
7.4 Sormenjälkitekniikka Tarkastellaan ensimmäisenä esimerkkinä pitkien merkkijonojen vertailua. Ongelma: Ajatellaan, että kaksi n-bittistä (n 1) tiedostoa x ja y sijaitsee eri tietokoneilla. Halutaan
Tietorakenteet, 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
Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).
Esimerkki Lomitusjärjestäminen merge-sort(a, p, q): var k % paikallinen muuttuja, vakiotila 1. if p < q then 2. r := (p + q)/2 3. merge-sort(a, p, r) 4. merge-sort(a, r + 1, q) 5. merge(a, p, r, q) Olkoon
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
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
Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö
Algoritmit 1 Luento 10 Ke 11.2.2015 Timo Männikkö Luento 10 Algoritminen ongelman ratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu
On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen.
6. Järjestäminen On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen. Tämä on eräs klassisimpia tietojenkäsittelyongelmia,
582206 Laskennan mallit
582206 Laskennan mallit luennot syksylla 2006, periodit I{II Jyrki Kivinen tietojenkasittelytieteen aineopintokurssi, 6 op, paaaineopiskelijoille pakollinen esitietoina Tietorakenteet (ja sen esitiedot)
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
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
58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet
58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe 15.6.2018 malliratkaisut ja arvosteluperusteet 1. [10 pistettä] Hakemistorakenteet. Vertaa linkitettyjen listojen, tasapainoisten hakupuiden ja
A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007
Kurssiesittely Tietojenkäsittelytieteiden laitos Tampereen yliopisto A215 Tietorakenteet Periodit I-II, syksy 2007 Luennot/vastuuhenkilö: Heikki Hyyrö Sähköposti: heikki.hyyro@cs.uta.fi Kurssin kotisivu:
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.
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
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ä
Tietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
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
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
Algoritmit 2. Luento 13 Ti Timo Männikkö
Algoritmit 2 Luento 13 Ti 8.5.2018 Timo Männikkö Luento 13 Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys Kertaus ja tenttivinkit Algoritmit 2 Kevät
(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
ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2
Johdatus diskreettiin matematiikkaan Harjoitus 4, 7.10.2015 1. Olkoot c 0, c 1 R siten, että polynomilla r 2 c 1 r c 0 on kaksinkertainen juuri. Määritä rekursioyhtälön x n+2 = c 1 x n+1 + c 0 x n, n N,
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
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
Nopea kertolasku, Karatsuban algoritmi
Nopea kertolasku, Karatsuban algoritmi Mikko Männikkö 16.8.2004 Lähde: ((Gathen and Gerhard 1999) luku II.8) Esityksen kulku Algoritmien analysointia (1), (2), (3), (4) Klassinen kertolasku Parempi tapa
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()
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
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:
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
Tietorakenteet, laskuharjoitus 10, ratkaisuja. 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
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
4.3. Matemaattinen induktio
4.3. Matemaattinen induktio Matemaattinen induktio: Deduktion laji Soveltuu, kun ominaisuus on osoitettava olevan voimassa luonnollisilla luvuilla. Suppea muoto P(n) : Ominaisuus, joka joka riippuu luvusta
Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.
4.2 Fibonacci-kasat Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla. Pääsiallinen ero on, että paljon Decrease-Key-operaatioita sisältävät jonot nopeutuvat. Primin algoritmi pienimmälle
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
7. Aikavaativuus. Ohjelmistotekniikan laitos OHJ-2300 Johdatus tietojenkäsittelyteoriaan, syksy
212 7. Aikavaativuus Edellä tarkasteltiin ongelmien ratkeavuutta kiinnittämättä huomiota ongelman ratkaisun vaatimaan aikaan Nyt siirrytään tarkastelemaan ratkeavien ongelmien aikavaativuutta Periaatteessa
Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö
Johdatus diskreettiin matematiikkaan Harjoitus 5, 14.10.2015 1. Ratkaise rekursioyhtälö x n+4 2x n+2 + x n 16( 1) n, n N, alkuarvoilla x 1 2, x 2 14, x 3 18 ja x 4 42. Ratkaisu. Vastaavan homogeenisen
Algoritmit 2. Demot Timo Männikkö
Algoritmit 2 Demot 1 27.-28.3.2019 Timo Männikkö Tehtävä 1 (a) 4n 2 + n + 4 = O(n 2 ) c, n 0 > 0 : 0 4n 2 + n + 4 cn 2 n n 0 Vasen aina tosi Oikea tosi, jos (c 4)n 2 n 4 0, joten oltava c > 4 Kokeillaan
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
JOHDATUS TEKOÄLYYN TEEMU ROOS
JOHDATUS TEKOÄLYYN TEEMU ROOS KURSSIN PERUSTIEDOT VALINNAINEN AINEOPINTOTASOINEN KURSSI, 4 OP PERIODI 1: 6.9.2012-12.10.2012 (6 VIIKKOA) LUENNOT (B123, LINUS TORVALDS -AUDITORIO): TO 10-12, PE 12-14 LASKUHARJOITUKSET
Tietorakenteet, laskuharjoitus 1,
Tietorakenteet, laskuharjoitus 1, 19.-22.1 Huom: laskarit alkavat jo ensimmäisellä luentoviikolla 1. Taustaa http://wiki.helsinki.fi/display/mathstatkurssit/matukurssisivu Halutaan todistaa, että oletuksesta
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
Pienin virittävä puu (minimum spanning tree)
Pienin virittävä puu (minimum spanning tree) Jatkossa puu tarkoittaa vapaata puuta (ks. s. 11) eli suuntaamatonta verkkoa, joka on yhtenäinen: minkä tahansa kahden solmun välillä on polku syklitön: minkä
Algoritmit 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
useampi 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
1. Osoita, että joukon X osajoukoille A ja B on voimassa toinen ns. de Morganin laki (A B) = A B.
HY / Avoin yliopisto Johdatus yliopistomatematiikkaan, kesä 2015 Harjoitus 3 Ratkaisuehdotuksia Tehtäväsarja I Seuraavissa tehtävissä harjoitellaan muun muassa kahden joukon osoittamista samaksi sekä joukon