Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen



Samankaltaiset tiedostot
Tietorakenteet ja algoritmit - syksy

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 3 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

811312A Tietorakenteet ja algoritmit I Johdanto

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmianalyysin perusteet

A TIETORAKENTEET JA ALGORITMIT

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

Algoritmit 1. Luento 6 Ke Timo Männikkö

1 Erilaisia tapoja järjestää

Algoritmit 1. Luento 14 Ke Timo Männikkö

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

Tietorakenteet ja algoritmit

Algoritmit 1. Luento 10 Ke Timo Männikkö

4 Tehokkuus ja algoritmien suunnittelu

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

A TIETORAKENTEET JA ALGORITMIT

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

Tieto- ja tallennusrakenteet

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

2. Perustietorakenteet

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

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

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

811120P Diskreetit rakenteet

Lyhyt kertaus osoittimista

811120P Diskreetit rakenteet

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.

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

Algoritmit 2. Luento 8 To Timo Männikkö

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

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Tiraka, yhteenveto tenttiinlukua varten

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

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Tarkennamme geneeristä painamiskorotusalgoritmia

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Luento 3 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö

Tietorakenteet ja algoritmit

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

4. Algoritmien tehokkuus

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

Nopea kertolasku, Karatsuban algoritmi

A TIETORAKENTEET JA ALGORITMIT

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

Tutkimusmenetelmät-kurssi, s-2004

MS-A0402 Diskreetin matematiikan perusteet

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

18. Abstraktit tietotyypit 18.1

Esimerkkejä vaativuusluokista

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

Zeon PDF Driver Trial

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

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

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

Tietorakenteet ja algoritmit

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

58131 Tietorakenteet ja algoritmit (syksy 2015)

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

A TIETORAKENTEET JA ALGORITMIT

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

5 Kertaluokkamerkinnät

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 2. Luento 4 Ke Timo Männikkö

Tietorakenteet ja algoritmit Y CSE- A1141 (5 op)

Muita linkattuja rakenteita

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

1.4 Funktioiden kertaluokat

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

Transkriptio:

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: lineaarinen vs. eksponentiaalinen toteutus 2

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 3

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, 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). 4

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) 5

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) 6

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 } 7

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 8

Koodin luku- ja kirjoitustaito... Esim. Kumpi algoritmeista on tehokkaampi? Miksi? 9

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 10

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

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 12

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 13

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 14

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 15

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 16

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. Voidaan ratkaista esim. dynaamisella ohjelmoinnilla, jossa varataan oma tietorakenne jo lasketuille arvoille. 17

Ensi kerraksi Muista ilmoittautua kurssille (WebOodissa)! Tutustu oppikirjan/oppimateriaalin avulla käsitteisiin Rekursio Abstrakti tietotyyppi (Abstract Data Type, ADT) Ensi kerralla Kertaus (taulukko, linkitetyn listan toteutus, rekursio) Peruskäsitteitä (kurssin keskeiset abstraktit tietotyypit) Perustietorakenteet (pino, jono) ja niiden sovelluksia 18