Tietorakenteet ja algoritmit - syksy 2015 1

Samankaltaiset tiedostot
Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Algoritmit 1. Luento 1 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

811312A Tietorakenteet ja algoritmit I Johdanto

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

Algoritmianalyysin perusteet

1 Erilaisia tapoja järjestää

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

A TIETORAKENTEET JA ALGORITMIT

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

4 Tehokkuus ja algoritmien suunnittelu

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

REKURSIO. Rekursiivinen ohjelma Kutsuu itseään. Rekursiivinen rakenne. Rakenne sisältyy itseensä. Rekursiivinen funktio. On määritelty itsensä avulla

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Tietorakenteet ja algoritmit

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

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

A TIETORAKENTEET JA ALGORITMIT

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

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

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet

Tieto- ja tallennusrakenteet

Algoritmit 1. Luento 8 Ke Timo Männikkö

2. Perustietorakenteet

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 8 To Timo Männikkö

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

A TIETORAKENTEET JA ALGORITMIT

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.

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

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

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

Algoritmit 2. Luento 1 Ti Timo Männikkö

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

Nopea kertolasku, Karatsuban algoritmi

Tietorakenteet, laskuharjoitus 3, ratkaisuja

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Algoritmi on periaatteellisella tasolla seuraava:

Esimerkkejä vaativuusluokista

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

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

Tarkennamme geneeristä painamiskorotusalgoritmia

Tiraka, yhteenveto tenttiinlukua varten

A TIETORAKENTEET JA ALGORITMIT

4. Algoritmien tehokkuus

Tietorakenteet ja algoritmit

Zeon PDF Driver Trial

Tutkimusmenetelmät-kurssi, s-2004

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

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

MS-A0402 Diskreetin matematiikan perusteet

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

Lyhyt kertaus osoittimista

A TIETORAKENTEET JA ALGORITMIT

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

58131 Tietorakenteet ja algoritmit (syksy 2015)

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Algoritmit 2. Luento 4 Ke Timo Männikkö

1.4 Funktioiden kertaluokat

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

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

Ohjelmoinnin peruskurssien laaja oppimäärä

TIE Tietorakenteet ja algoritmit 25

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?

Binäärihaun vertailujärjestys

8. Lajittelu, joukot ja valinta

5 Kertaluokkamerkinnät

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Algoritmit 1. Luento 11 Ti Timo Männikkö

Mukautuvat järjestämisalgoritmit

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

18. Abstraktit tietotyypit 18.1

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 1. Demot Timo Männikkö

Transkriptio:

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ä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki: lineaarinen vs. eksponentiaalinen toteutus Tietorakenteet ja algoritmit - syksy 2015 4

1.1 Määritelmiä Algoritmi: Epäformaalisti: täsmällinen menettelytapa, joka ratkaisee jonkin hyvin määritellyn laskennallisen ongelman. Määritelmä: Algoritmi on äärellinen jono yksikäsitteisiä, äärellisellä työllä suoritettavissa olevia käskyjä, jotka laskevat funktion ƒ: I O I on syötejoukko O on tulosjoukko kaikilla i I, algoritmi pysähtyy s.e., o = ƒ(i) O Tietorakenteet ja algoritmit - syksy 2015 5

1.1 Määritelmiä... Tietorakenne: Funktion ƒ tehokas laskenta edellyttää, että syötejoukko I on hyvin organisoitu Päteekö sama tulosjoukolle O? Voidaan kuvata tietotyyppeinä Alkeistyypit, perustietotyypit, (tietorakenteet), abstraktit tietotyypit Määritelmä: Tietorakenne on joukko muuttujia, joiden keskinäiset suhteet on määritelty täsmällisesti. Huomaa, että em. määrittelyssä yksittäisen muuttujan tyyppi voi olla toinen tietorakenne (rakenteellinen kompositio). Tietorakenteet ja algoritmit - syksy 2015 6

Koodin luku- ja kirjoitustaito Tavoitteena nähdä mitä algoritmi tekee/notaation taakse Erilaisia näkökulmia Notaatio (Miten algoritmi on esitetty? vrt. syntaksi, tyyli) Oikeellisuus (Mitä algoritmi tekee? Kaikilla syötteillä?) Abstraktiot/reduktio (Minkä päälle algoritmi rakentuu ja miksi se toimii?) Analyysi (Kuinka tehokas algoritmi on?) Eleganssi (Millaiseen oivallukseen algoritmi perustuu?) Brute force vs. Elegancy Esim. lineaarinen haku vs. binäärihaku Koodin lukutaito (Ymmärrys miten algoritmi toimii) Tietorakenteet ja algoritmit - syksy 2015 7

Koodin luku- ja kirjoitustaito Esimerkiksi järjestäminen (domain) Useita eri menetelmiä Miten ne eroavat toisistaan? koodi näkemys domain swap järjestämis- tmp = A[i] (vaihdetaan menetelmä A[i] = A[min] kahden alkion A[min] = tmp paikkaa) Tietorakenteet ja algoritmit - syksy 2015 8

Koodin luku- ja kirjoitustaito... Esim. valintajärjestäminen C-kieltä muistuttava Pseudo-koodi Järjestää taulukon A alkiot (N kpl) suuruusjärjestykseen Taulukon alkuosa järjestyksessä; uloin silmukka määrää jakopisteen; loppuosasta haetaan pienin alkio, joka vaihdetaan jakopisteen kanssa. (N-1) + (N-2) +... + 2 + 1 = N(N-1)/2 Brute force - raakaa voimaa 0 selection_sort(a, N) { 1 for (i=0; i<n-1; i++) { 2 min = i; 3 for (j=i+1; j<n; j++) 4 if (A[j] < A[min]) 5 min = j; 6 swap(min, i); 7 } 8 } Tietorakenteet ja algoritmit - syksy 2015 9

1.2 Tietorakenteen ja algoritmin valinta Sama asia tai toiminto voidaan toteuttaa lukemattoman monella eri tavalla tietokoneohjelmana Eri ratkaisujen paremmuutta voidaan verrata monessa suhteessa, mm. : 1. toimintojen nopeus (algoritmit) 2. vaadittu muistitila (tietorakenteet) 3. ohjelmakoodin laatu ja ylläpidettävyys 4. toteutuksen avoimuus laajennuksille Tällä kurssilla keskitytään kahteen ensimmäiseen näkökulmaan ÄLÄ MIKRO-OPTIMOI - VALITSE PAREMPI ALGORITMI Tietorakenteet ja algoritmit - syksy 2015 10

Koodin luku- ja kirjoitustaito... Esim. Kumpi algoritmeista on tehokkaampi? Miksi? Tietorakenteet ja algoritmit - syksy 2015 11

Usein valitsemalla sopiva tiedon esitysrakenne voidaan merkittävästi vaikuttaa jonkin algoritmin tehokkuuteen Esimerkki 1: Lineaarinen haku vs. puolitushaku Edellisessä hakuaika on suoraan suhteessa talletettujen alkioiden lukumäärään Jälkimmäisessä hakuaika on suhteessa talletettujen alkioiden lukumäärän logaritmiin N log 2 N 1.000 10 1.000.000 20 Tietorakenteet ja algoritmit - syksy 2015 12

Esimerkki 2: Miten tallentaa maantieverkko? Seuraajalistana, eli luetellaan jokaiselle solmulle ne solmut, joihin kyseisestä solmusta pääsee Vierusmatriisina (2-ulotteisena taulukkona), jolloin jokaiselle solmuparille merkitään, onko niiden välillä yhteyttä (1) vai ei (0) Seuraajalista vaatii tilaa sen verran kuin yhteyksiä on olemassa Vierusmatriisi vaatii tilaa suhteessa solmujen lukumäärän neliöön riippumatta yhteyksien määrästä Vierusmatriisi voi olla tehokkaampi, jos verkko on tiheä, mutta se vie paljon tilaa, jos verkko on suuri. Tietorakenteet ja algoritmit - syksy 2015 13

1.3 Algoritmit ja tiedon määrä Algoritmin nopeus riippuu tiedon määrästä: Mikä tahansa algoritmi on nopea pienillä syötteillä Esimerkki 3: Taulukon alkioiden järjestäminen Valintajärjestäminen on helppo ymmärtää ja toteuttaa Quicksort on paljon mutkikkaampi Valintajärjestämisen tehokkuus on suhteessa alkioiden lukumäärän N neliöön Quicksortin tehokkuus (keskimäärin) lukuun N log N N N*log 2 (N) N 2 10 30 100 10 3 1*10 4 10 6 10 6 2*10 7 10 12 Tietorakenteet ja algoritmit - syksy 2015 14

Esimerkki 4: Alkioiden (N kpl) talletus linkitettyyn listaan Jos kukin alkio talletetaan listan alkuun, eikä listaa pidetä järjestyksessä, alkioiden talletus käy lineaarisessa ajassa (yksittäisen alkion talletus vie vakioajan) Jos kukin alkio talletetaan listan loppuun ja paikka haetaan aina listan alusta lähtien, alkioiden talletus käy ajassa, joka on suhteessa listan pituuden neliöön Jos kukin alkio talletetaan listan loppuun ja samalla ylläpidetään osoitinta listan viimeiseen alkioon, alkioiden talletus käy taas lineaarisessa ajassa Tietorakenteet ja algoritmit - syksy 2015 15

1.4 Tietorakenteet ja toiminnot Tietorakenteen tehokkuus riippuu siihen kohdistuvista toiminnoista (oikea abstraktio, frekvenssit, dynaamisuus jne.) Esimerkki 5: Haetaan tiettyä tietuetta suuresta määrästä tietueita Jos tiedot ovat staattisia, ne voidaan tallentaa taulukkoon suuruusjärjestyksessä ja hakea sieltä vaikka binääri- eli puolitushaulla Hakuaika on silloin suhteessa taulukon koon logaritmiin Jos lisätään uusia tietueita tai poistetaan vanhoja, taulukko pitää järjestää kokonaan uudelleen. Tässä vaiheessa aikaa kuluu lineaarisesti suhteessa taulukon kokoon. Jos tiedot talletetaan tasapainotettuun binääriseen hakupuuhun, tieto voidaan edelleen hakea logaritmisessa ajassa, mutta myös lisäykset ja poistot voidaan tehdä logaritmisessa ajassa Tietorakenteet ja algoritmit - syksy 2015 16

1.5 Esimerkki: lineaarinen vs. eksponentiaalinen toteutus Esimerkki 6: Fibonacci-luvut: 1, 1, 2, 3, 5, 8, 13, 21, 34,... F(0) = F(1) = 1 F(N) = F(N-1) + F(N-2) Lineaarinen menetelmä, käytetään muuttujia x, y ja z ja pyöritetään niitä seuraavassa luupissa x = y = 1; for (i = 1; i<n; i++) { z = y + x; x = y; y = z; print (z); } suoritusaika verrannollinen N:ään Tietorakenteet ja algoritmit - syksy 2015 17

Exponentiaalinen menetelmä, sovelletaan suoraan määritelmää rekursiivisesti F6 F5 F4 Laskettaessa F6:n arvoa, lasketaan: F2 F4 F3 F3 F3 F2 F2 F1 F2 F1 F1 F1 F0 F1 F0 F1 F0 F2 F1 F0 F5 1 kerran F4 2 kertaa F3 3 kertaa F2 5 kertaa F1 8 kertaa F1 F0 Tietorakenteet ja algoritmit - syksy 2015 18

Exponentiaalinen menetelmä, sovelletaan suoraan määritelmää rekursiivisesti... Koska pätee, että F100 F 100, missä F 1.618, seuraa, että F100:n laskemiseen tarvitaan luokkaa 10 18 operaatiota... Eli algoritmien valinnalla on merkitystä... Huom! Ongelma ei ole rekursiossa vaan siinä, että algoritmi rikkoo yhtä rekursion kultaista sääntöä, jonka mukaan jokainen aliongelma tulee ratkaista vain kerran. Tämä ongelma voidaan ratkaista esim. dynaamisella ohjelmoinnilla, jossa varataan oma tietorakenne jo lasketuille arvoille. Tietorakenteet ja algoritmit - syksy 2015 19

Ensi kerraksi Muista ilmoittautua kurssille (WebOodissa)! Tutustu oppikirjan/oppimateriaalin avulla ensi kerraksi seuraaviin käsitteisiin Abstrakti tietotyyppi (Abstract Data Type, ADT) Lineaariset (perus)tietorakenteet Tietorakenteet ja algoritmit - syksy 2015 20