811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Samankaltaiset tiedostot
811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 4, Ratkaisu

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit - syksy

811312A Tietorakenteet ja algoritmit I Johdanto

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

Algoritmit 1. Luento 12 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

Ohjelmoinnin peruskurssi Y1

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

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

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

811120P Diskreetit rakenteet

Algoritmit 2. Luento 2 Ke Timo Männikkö

58131 Tietorakenteet ja algoritmit (syksy 2015)

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

811120P Diskreetit rakenteet

Algoritmit 1. Demot Timo Männikkö

811312A Tietorakenteet ja algoritmit II Algoritmien analyysi

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

811120P Diskreetit rakenteet

5 Kertaluokkamerkinnät

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 2, Ratkaisu

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

4. Joukkojen käsittely

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Ohjelmoinnin perusteet Y Python

4 Tehokkuus ja algoritmien suunnittelu

2. Perustietorakenteet

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

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

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

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

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran 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.

4. Algoritmien tehokkuus

ITKP102 Ohjelmointi 1 (6 op)

Tarkennamme geneeristä painamiskorotusalgoritmia

Johdatus lukuteoriaan Harjoitus 11 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 3 Ti Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

(iv) Ratkaisu 1. Sovelletaan Eukleideen algoritmia osoittajaan ja nimittäjään. (i) 7 = , 7 6 = = =

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Ohjelmoinnin perusteet Y Python

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

Ohjelmoinnin perusteet Y Python

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

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

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

13. Loogiset operaatiot 13.1

Algoritmit 2. Luento 11 Ti Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Nopea kertolasku, Karatsuban algoritmi

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

Tietorakenteet ja algoritmit

C.C. McGeoch, Toward an experimental method for algorithm simulation. algorithm simulation = algoritmin testaus, experimental algorithmics

Algoritmit 2. Luento 8 To Timo Männikkö

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Algoritmit 1. Luento 14 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Ohjelmoinnin perusteet Y Python

Tietorakenteet, laskuharjoitus 3, ratkaisuja

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

A TIETORAKENTEET JA ALGORITMIT

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Ohjelmoinnin perusteet Y Python

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Tutkimusmenetelmät-kurssi, s-2004

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

13. Loogiset operaatiot 13.1

Algoritmit 2. Luento 10 To Timo Männikkö

Transkriptio:

811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta

II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden aikakompleksisuus Esimerkkitehtävä 1. Olkoon L yhteen suuntaan linkitetty lista. Kirjoita algoritmi, joka kääntää listan L järjestyksen päinvastaiseksi, kun käytettävissä on pino S. Listan pää on L.head, sen solmussa x on linkki x.next seuraavaan solmuun listassa. Pinon S operaatiot ovat S.pop(), S.push(x) ja S.empty(), joka palauttaa arvon TRUE mikäli S on tyhjä ja arvon FALSE mikäli S ei ole tyhjä.

III Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen Algoritmin oikeaksi todistaminen = Todistettava algoritmin päättyminen ja oikea tulos Osattava todistaa algoritmi vääräksi Päättymisen todistaminen: usein käytetään konvergenttia, joka takaa toistorakenteen tai rekursion päättymisen Oikea tulos: Toistorakenteisissa algoritmeissa usein invariantti, joka takaa oikean tuloksen kun algoritmi päättyy Invariantin muotoilu ja oikeaksi osoittaminen

Esimerkkitehtäviä (2) Seuraavan algoritmin tulisi laskea summa 1+2+ +n aina kun n on positiivinen kokonaisluku. Todista algoritmi vääräksi. Syöte: Kokonaisluku n >= 1 Tuloste: Summa 1+2+...+n SUMMA(n) 1. s = 1 2. i = 1 3. if n == 1 4. return s 5. while i <= n do 6. s = s+i 7. i = i+1 8. return s

Esimerkkitehtäviä (3) Seuraava algoritmi laskee syötteenä saamansa taulukon alkioiden keskiarvon. Todista algoritmi oikeaksi. Syöte: Taulukko A[1,..,n], n >= 1 Tuloste: Taulukon alkioiden keskiarvo KESKIARVO(A) 1. s = 0 2. i = 1 3. ka = 0 4. while i <= n do 5. s = s+a[i] 6. i = i+1 7. ka = s/n 8. return ka

III Algoritmien analyysi: asymptoottinen merkintä Osattava O ja Ɵ-merkinnät (määritelmä ja käyttö) Olkoon g(n) jokin funktio. Silloin O(g(n)) ja Ɵ(g(n)) ovat seuraavat funktioiden joukot: O( g( n)) { f ( n) On olemassa positiivis et vakiot c ja 0 f,että ( n) c g( n),aina kun n n 0 sellaiset n 0 } ( g( n)) { f ( n) On olemassa sellaiset positiiviset vakiot c 1 g( n) f ( n) c c 2 1, c 2 ja n 0,että g( n),aina kun n n 0 }

III Algoritmien analyysi: aikakompleksisuus Aikakompleksisuus = algoritmin suoritusaika (operaatioiden lukumäärä) suhteessa syötteen kokoon Ilmaistaan kompleksisuusluokkana O- tai Ɵ- merkinnällä Yleensä tarkastellaan huonointa tapausta Osattava määrittää yksinkertaisen iteratiivisen tai rekursiivisen algoritmin kompleksisuusluokka Tentissä aina tällainen tehtävä, enimmäkseen iteratiivisia algoritmeja

Esimerkkitehtäviä (4) a) Esitä mitä määritelmän mukaan tarkoittaa merkintä f(n) (n 2 ). b) Onko f(n) (n 2 ), kun f(n) = 2n 2 + n f(n) = n 3 +2n+1? Perustele vastauksesi.

Esimerkkitehtäviä (5) Mitkä ovat seuraavien algoritmien aikakompleksisuusluokat, kun syötteen koon mittarina on syötetaulukon A[1..n] koko n? SUM1(A) 1. sum = 0 2. for i=1 to n 3. sum = sum + A[i] 4. return sum SUM2(A) 1. sum = 0 2. for i=1 to n 3. for j=1 to n 4. sum = sum+a[i]-a[j] 5. return sum SUM3(A) 1. max = 0 2. for i=1 to n 3. sum = 0 4. for j=i to n 5. sum = sum+a[j] 6. if sum > max 7. max = sum 8. return sum

IV Lajittelualgoritmit Pikalajittelusta tunnettava idea: taulukko jaetaan saranaalkion suhteen ja osat lajitellaan rekursiivisesti Kekolajittelu: tunnettava maksimikeko tietorakenteena ja sen esittäminen taulukolla Kekolajittelun idea: Muodostetaan maksimikeko ja poistetaan siitä toistuvasti suurin alkio, sijoitetaan taulukon loppuun ja pienennetään keon kokoa

Esimerkkitehtäviä (6) Ovatko taulukot A=[15,10,12,7,5,9,8], B=[20,12,18,8,14,13] maksimikekojärjestyksessä? Sadistinen valmentaja harjoittaa 2n pelaajaa. Hän haluaa jakaa pelaajat kahteen joukkueeseen niin, että pelistä tulee mahdollisimman epätasainen. Minkälaista algoritmia hän voi käyttää jaon tekemiseen? Taulukossa on lukuja jotka halutaan järjestää niin, että negatiiviset luvut ovat taulukon alkuosassa ja positiiviset luvut loppuosassa. Anna tehokas algoritmi tämän tekemiseen.

Pikalajittelun muunnettu ositus Syöte: Taulukko A[1,..,n] n>=1 Tuloste: Taulukon vasemmalla puolella negatiiviset arvot ja oikealla positiiviset (ja nollat) OSITA(A) 1. i = 0 2. for j = 1 to n 3. if A[j] < 0 4. i = i + 1 5. vaihda A[i] A[j] 6. return 12

Esimerkkitehtäviä (7) Olkoon A[1..n] pienimmästä suurimpaan järjestetty kokonaislukutaulukko, jonka kaikki luvut ovat erisuuria. Suunnittele aikakompleksisuudeltaan luokkaa O(lg(n)) oleva algoritmi, joka vastaa kysymykseen, onko lukua i, jolle A[i] = i (kiintopiste).

Alkuperäinen puolitushaku Syöte: Taulukko A[1,..,n], n >= 1, A[1] <= A[2] <= <= A[n]. Luvut 1<=p<=q<=n. Luku x jota haetaan taulukosta väliltä A[p,..,q]. Tulostus: Alkion x indeksi taulukossa tai arvo NIL, jos x ei esiinny taulukossa välillä A[p,..,q]. HAKU(A,p,q,x) 1. if p==q 2. if A[p]==x return p 3. else return NIL 4. else 5. r = (p + q)/2 6. if x<=a[r] 7. return HAKU(A,p,r,x) 8. else 9. return HAKU(A,r+1,q,x)

Kiintopisteen hakemisalgoritmi Syöte: Taulukko A[1,..,n], n >= 1, A[1] < A[2] < < A[n]. Luvut 1<=p<=q<=n. Tulostus: TRUE jos A[i]=i jollakin i, FALSE muuten KIINTOPISTE(A,p,q) 1. if p==q 2. if A[p]==p 3. return TRUE 4. else return FALSE 5. else 6. r = (p + q)/2 7. if A[r]==r 8. return TRUE 9. else if A[r]>r 10. return KIINTOPISTE(A,p,r) 11. else 12. return KIINTOPISTE(A,r+1,q,x)