Algoritmit 2. Demot Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

9 Erilaisia tapoja järjestää

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

1 Puu, Keko ja Prioriteettijono

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

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

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

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

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

Algoritmit 2. Luento 12 To Timo Männikkö

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

4 Tehokkuus ja algoritmien suunnittelu

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

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

Algoritmit 1. Luento 7 Ti Timo Männikkö

1.4 Funktioiden kertaluokat

Algoritmit 2. Luento 6 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 6 Ke Timo Männikkö

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

Algoritmit 1. Luento 2 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Algoritmit 1. Luento 8 Ke Timo Männikkö

1 Erilaisia tapoja järjestää

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

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

A TIETORAKENTEET JA ALGORITMIT

Algoritmianalyysin perusteet

Algoritmit 2. Luento 14 To Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

4.3. Matemaattinen induktio

Algoritmit 2. Luento 13 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

4. Joukkojen käsittely

Algoritmi on periaatteellisella tasolla seuraava:

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

5 Kertaluokkamerkinnät

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Luento 10 Ke Timo Männikkö

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin peruskurssi Y1

Tutkimusmenetelmät-kurssi, s-2004

Numeeriset menetelmät

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

On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen.

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

3 Lajittelualgoritmeista

12. Javan toistorakenteet 12.1

Muuttujien roolit Kiintoarvo cin >> r;

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.

Numeeriset menetelmät

4 Lajittelualgoritmeista

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 1. Luento 13 Ma Timo Männikkö

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

12. Javan toistorakenteet 12.1

Algoritmit 2. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Lineaarinen optimointitehtävä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

811312A Tietorakenteet ja algoritmit, , Harjoitus 4, Ratkaisu

11. Javan toistorakenteet 11.1

Tietorakenteet, laskuharjoitus 2,

Transkriptio:

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 c = 5 n 2 n 4 0, joka on tosi, kun n 3 Siten vakiot c = 5 ja n 0 = 3 kelpaavat Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 2/22

Tehtävä 1 (b) n 3 + 2n 2 = Ω(n 2 ) c, n 0 > 0 : 0 cn 2 n 3 + 2n 2 n n 0 Vasen aina tosi Oikea tosi, jos n 3 + (2 c)n 2 0 n 2 (n + 2 c) 0 n c 2 Siten esimerkiksi vakiot c = 1 ja n 0 = 1 kelpaavat Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 3/22

Tehtävä 1 (c) 5n + 2 = o(n 2 ) c > 0 n 0 > 0 : 0 5n + 2 < cn 2 n n 0 Vasen aina tosi Oikea < tosi, jos cn 2 5n 2 > 0 n > (5 + 25 + 8c)/2c Siten vakio n 0 siten, että n 0 > (5 + 25 + 8c)/2c kelpaa Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 4/22

Tehtävä 1 (d) 3n 3 + n 2 = ω(n 2 ) c > 0 n 0 > 0 : 0 cn 2 < 3n 3 + n 2 n n 0 Vasen aina tosi Oikea < tosi, jos 3n 3 + (1 c)n 2 > 0 n 2 (3n + 1 c) > 0 n > (c 1)/3 Siten vakio n 0 siten, että n 0 > (c 1)/3 kelpaa Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 5/22

Tehtävä 1 (e) 2n 2 + 5n = Θ(n 2 ) c 1, c 2, n 0 > 0 : 0 c 1 n 2 2n 2 + 5n c 2 n 2 n n 0 Vasen aina tosi Keskimmäinen tosi, jos (2 c 1 )n 2 + 5n 0 n((2 c 1 )n + 5) 0, joten oltava c 1 2 Kokeillaan c 1 = 2 n 0 Oikea tosi, jos (c 2 2)n 2 5n 0 n((c 2 2)n 5) 0, joten oltava c 2 > 2 Kokeillaan c 2 = 3 n 5 Siten vakiot c 1 = 2, c 2 = 3 ja n 0 = 5 kelpaavat Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 6/22

Tehtävä 2 (a) f (n) = n(n 1)/2, g(n) = n 2 lim n(n 1)/2 n 2 = lim ( 1 2 1 ) 2n = 1 2 f (n) = Θ(n 2 ), f (n) = O(n 2 ), f (n) = Ω(n 2 ) Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 7/22

Tehtävä 2 (b) f (n) = n 3/2 + n 1/2, g(n) = n 2 lim n 3/2 + n 1/2 n 2 = lim ( 1 n + 1 ) n n = 0 f (n) = O(n 2 ), f (n) = o(n 2 ) Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 8/22

Tehtävä 2 (c) f (n) = log 2 n + n, g(n) = n lim lim log 2 n n = lim 1/n ln 2 1/2 n 2 = lim = 0 n ln 2 log 2 n + n n = lim (l Hôpitalin sääntö) ( ) log2 n + 1 n = 1 f (n) = Θ( n), f (n) = O( n), f (n) = Ω( n) Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 9/22

Tehtävä 2 (d) f (n) = log 2 n + n, g(n) = log 2 n lim lim n log 2 n = lim 1/2 n 1/n ln 2 n ln 2 = lim = 2 log 2 n + ( n = lim 1 + log 2 n (l Hôpitalin sääntö) ) n log 2 n = f (n) = Ω(log 2 n), f (n) = ω(log 2 n) Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 10/22

Tehtävä 2 (e) f (n) = n 3 + n + n log 2 n, g(n) = n lim n 3 + n + n log 2 n n = lim ( n 2 + 1 + log 2 n ) = f (n) = Ω(n), f (n) = ω(n) Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 11/22

Tehtävä 2 (f) f (n) = (n + 1) 2, g(n) = n p, (p > 0) lim (n + 1) 2 n p = lim ( n 2 p + 2n 1 p + n p) =, 0 < p < 2 1, p = 2 0, p > 2 f (n) = Ω(n p ), f (n) = ω(n p ), 0 < p < 2 f (n) = Θ(n p ), f (n) = O(n p ), f (n) = Ω(n p ), p = 2 f (n) = O(n p ), f (n) = o(n p ), p > 2 Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 12/22

Tehtävä 3 (a) palautatoiseksipienin: Palauttaa alkion, jolla on toiseksi pienin prioriteetti, mutta ei poista sitä prioriteettijonosta Poistetaan kaksi pienintä alkiota Lisätään molemmat alkiot takaisin Aputilaa tarvitaan vain vakiomäärä (kaksi muuttujaa) palautatoiseksipienin(pjono) { if (size(pjono) < 2) return error; a = poistapienin(pjono); b = poistapienin(pjono); lisaaalkio(a,pjono); lisaaalkio(b,pjono); return b; } Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 13/22

Tehtävä 3 (b) poistasuurin: Poistaa ja palauttaa alkion, jolla on suurin prioriteetti Siirretään ensin alkiot apujonoon (tai aputaulukkoon) Viimeinen alkio on haettu suurin alkio Sitten siirretään muut alkiot takaisin Aputilan koko on samaa kertaluokkaa kuin alkuperäisen prioriteettijonon koko Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 14/22

Tehtävä 3 (b) jatkuu poistasuurin(pjono) { n = size(pjono); if (n <= 0) return error; for (i = 1; i < n; i++) { // n-1 alkiota a = poistapienin(pjono); lisaaalkio(a,apu); } b = poistapienin(pjono); // viimeinen alkio for (i = 1; i < n; i++) { a = poistapienin(apu); lisaaalkio(a,pjono); } return b; } Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 15/22

Tehtävä 3 (c) onkoprioriteetti: Tutkii, onko prioriteettijonossa alkiota, jolla on jokin tietty prioriteetti Siirretään alkioita apujonoon (tai aputaulukkoon), kunnes haettu prioriteetti löytyy (tai todetaan, että ei löydy) Lopuksi siirretään alkiot takaisin Aputilan koko samaa kertaluokkaa kuin alkuperäisen prioriteettijonon koko Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 16/22

Tehtävä 3 (c) jatkuu onkoprioriteetti(priori,pjono) { vastaus = false; // jos ei löydy while (!isempty(pjono)) { a = poistapienin(pjono); lisaaalkio(a,apu); if (a.prioriteetti == priori) { vastaus = true; break; // löytyi, joten lopetetaan silmukka } if (a.prioriteetti > priori) break; // ei enää löydy } while (!isempty(apu)) { a = poistapienin(apu); lisaaalkio(a,pjono); } return vastaus; } Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 17/22

Tehtävä 4 (a) Tutkitaan, muodostavatko taulukossa olevat luvut keon Lapsisolmujen arvot eivät saa olla pienempiä kuin niiden vanhempien arvot Käydään läpi melkein koko taulukko Θ(n) n = a[0]; // oletetaan, että n > 0 for (i = 2; i <= n; i++) { // lapsisolmut if (a[i] < a[i/2]) return false; } return true; // jos päästään tänne asti, taulukko on keko Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 18/22

Tehtävä 4 (b) Etsitään keon suurin alkio Suurin alkio on jossakin lehtisolmussa Ensimmäinen lehtisolmu on paikassa n/2 + 1 Käydään läpi noin puolet taulukosta Θ(n) n = a[0]; // oletetaan, että n > 0 suurin = a[n/2+1]; // ensimmäinen lehtisolmu for (i = n/2+2; i <= n; i++) { // muut lehtisolmut if (a[i] > suurin) suurin = a[i]; } Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 19/22

Tehtävä 4 (c) Lasketaan keon pienimmän ja suurimman alkion keskiarvo Pienin alkio on juuressa Suurin alkio löytyy edellisen kohdan mukaisesti Θ(n) pienin = a[1]; suurin = etsisuurin(a); // edellinen algoritmi keskiarvo = 0.5*(pienin + suurin); Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 20/22

Tehtävä 5 (a) Lisätään kekoon alkiot 15, 22, 7, 21, 5, 8, 18, 30, 16 ja 9 Käytetään jokaiselle alkiolle lisaakekoon-algoritmia: a 0 1 2 3 4 5 6 7 8 9 10 1 15 2 15 22 3 7 22 15 4 7 21 15 22 5 5 7 15 22 21 6 5 7 8 22 21 15 7 5 7 8 22 21 15 18 8 5 7 8 22 21 15 18 30 9 5 7 8 16 21 15 18 30 22 10 5 7 8 16 9 15 18 30 22 21 Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 21/22

Tehtävä 5 (b) Lisätään kekoon alkiot 15, 22, 7, 21, 5, 8, 18, 30, 16 ja 9 Käytetään teekeko-algoritmia: korjaakeko(a,5), korjaakeko(a,4), korjaakeko(a,3), korjaakeko(a,2), korjaakeko(a,1) a 0 1 2 3 4 5 6 7 8 9 10 10 15 22 7 21 5 8 18 30 16 9 10 15 22 7 21 5 8 18 30 16 9 10 15 22 7 16 5 8 18 30 21 9 10 15 22 7 16 5 8 18 30 21 9 10 15 5 7 16 9 8 18 30 21 22 10 5 9 7 16 15 8 18 30 21 22 Algoritmit 2 Kevät 2019 Demot 1 27.-28.3.2019 22/22