Algoritmit 1. Demot Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 1. Demot Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö

11. Javan toistorakenteet 11.1

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

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

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

Algoritmit 2. Luento 12 To Timo Männikkö

1 Lukujen jaollisuudesta

Tekijä Pitkä Matematiikka 11 ratkaisut luku 2

Algoritmit 2. Luento 2 To Timo Männikkö

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

ITKP102 Ohjelmointi 1 (6 op)

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

= 3 = 1. Induktioaskel. Induktio-oletus: Tehtävän summakaava pätee jollakin luonnollisella luvulla n 1. Induktioväite: n+1

Algoritmit 2. Luento 8 To Timo Männikkö

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Merkitse kertolasku potenssin avulla ja laske sen arvo.

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Nopea kertolasku, Karatsuban algoritmi

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

LUKUTEORIA johdantoa

Ohjelmointiharjoituksia Arduino-ympäristössä

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 9 Ti Timo Männikkö

Tekijä MAA2 Polynomifunktiot ja -yhtälöt = Vastaus a)

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua.

Algoritmit 2. Luento 10 To Timo Männikkö

Tietorakenteet (syksy 2013)

Algoritmit 1. Luento 3 Ti Timo Männikkö

ITKP102 Ohjelmointi 1 (6 op)

Algoritmit 2. Luento 3 Ti Timo Männikkö

1.4 Funktioiden kertaluokat

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

58131 Tietorakenteet ja algoritmit (syksy 2015)

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Tarkennamme geneeristä painamiskorotusalgoritmia

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Merkkijonon tutkiminen matches-metodilla

Ohjelmoinnin peruskurssi Y1

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

3.4 Rationaalifunktion kulku ja asymptootit

1 Ensimmäisen asteen polynomifunktio

Algoritmit 2. Luento 3 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Sisältö. 2. Taulukot. Yleistä. Yleistä

Python-ohjelmointi Harjoitus 2

Java-kielen perusteet

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Ohjelmoinnin perusteet Y Python

13. Loogiset operaatiot 13.1

Ohjelmoinnin peruskurssi Y1

Tietorakenteet, laskuharjoitus 2,

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 12 Ke Timo Männikkö

c) 22a 21b x + a 2 3a x 1 = a,

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx

Algoritmit 2. Luento 11 Ti Timo Männikkö

Ohjelmoinnin peruskurssi Y1

Kuljetustehtävä. Materiaalia kuljetetaan m:stä lähtöpaikasta n:ään tarvepaikkaan. Kuljetuskustannukset lähtöpaikasta i tarvepaikkaan j ovat c ij

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

Python-ohjelmointi Harjoitus 5

Muuttujien roolit Kiintoarvo cin >> r;

Ohjausrakenteet. Valinta:

Listarakenne (ArrayList-luokka)

Algoritmit 1. Luento 13 Ti Timo Männikkö

Ohjelmoinnin peruskurssi Y1

Luvuilla laskeminen. Esim. 1 Laske

Java-kielen perusteet

Algoritmit 1. Luento 13 Ma Timo Männikkö

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

Transkriptio:

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 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 Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 2/25

Tehtävä 1 (a) jatkuu int m, n; // oletetaan, että molemmat > 0 while (m >= n) { m = m - n; if (m == 0) return true; else return false; Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 3/25

Tehtävä 1 (b) Algoritmi, joka laskee montako samaa merkkiä merkkijonon alussa on peräkkäin Lasketaan lukumäärää laskuriin Aluksi osoitin c merkkijonon alkuun Siirretään c:tä yhdellä askeleella eteenpäin ja verrataan ensimmäiseen merkkiin Jatketaan kunnes tulee eri merkki tai kunnes merkkijono loppuu Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 4/25

Tehtävä 1 (b) jatkuu string mjono; // oletetaan, että pituus > 0 laskuri = 1; // ainakin yksi sama merkki c = ensimmainen(mjono); while (c!= viimeinen(mjono) { c = seuraava(c); if (c == ensimmainen(mjono)) laskuri = laskuri + 1; else break; // lopetetaan silmukka return laskuri; Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 5/25

Tehtävä 2 (a) Taulukossa on lukuja satunnaisessa järjestyksessä Algoritmi, joka laskee taulukon suurimman ja pienimmän luvun välisen erotuksen Käydään taulukko läpi ja etsitään sekä suurin että pienin luku Lasketaan erotus Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 6/25

Tehtävä 2 (a) jatkuu // taulukko t, koko n > 0 suurin = t[0]; pienin = t[0]; for (i = 1; i < n; i++) { if (t[i] > suurin) suurin = t[i]; if (t[i] < pienin) pienin = t[i]; erotus = suurin - pienin; // Suoritusaika: // silmukka n-1 kertaa // joka kierroksella // vain tarvittaessa // joka kierroksella // vain tarvittaessa Suoritusaika muotoa T (n) = n t 1 + t 2 = O(n) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 7/25

Tehtävä 2 (b) Taulukossa on positiivisia lukuja suuruusjärjestyksessä Algoritmi, joka nollaa kaikki duplikaatit Lisäksi lasketaan nollattujen lukujen lukumäärä Muuttuja j osoittaa viimeisimpään eri lukuun Muuttuja i käy läpi taulukon loput luvut Jos i ja j osoittavat samansuuruiseen lukuun, paikka i nollataan ja j ei muutu Muuten j siirtyy i:n kohdalle Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 8/25

Tehtävä 2 (b) jatkuu // taulukko t, koko n > 0 j = 0; laskuri = 0; for (i = 1; i < n; i++) { // Suoritusaika: // silmukka n-1 kertaa if (t[i] == t[j]) { // joka kierroksella t[i] = 0; // vain tarvittaessa laskuri++; // vain tarvittaessa else j = i; // vain tarvittaessa // nollien lukumäärä on nyt muuttujassa laskuri Suoritusaika muotoa T (n) = n t 1 + t 2 = O(n) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 9/25

Tehtävä 3 Funktioiden asymptoottiset ylärajat: Kertaluokan määrää termi, joka kasvaa nopeimmin kun n kasvaa Joidenkin peruskertaluokkien suuruusjärjestys on log 2 n, n, n log 2 n, n 2, n 3, 2 n Yleisesti n k kasvaa sitä nopeammin mitä suurempi k on Pätee myös kun k ei ole kokonaisluku, toisin sanoen n = n 1/2 on kertaluokaltaan pienempi kuin n Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 10/25

Tehtävä 3 jatkuu Tarkempi perustelu laskemalla raja-arvot: Tiedetään, että f (n) ja g(n) ovat samaa kertaluokkaa, jos lim f (n) g(n) = C 0 Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 11/25

Tehtävä 3 (a) f (n) = 3n 5 + 3n 3 + 24n lim 3n 5 + 3n 3 + 24n n 5 = lim ( 3 + 3 n + 24 ) 2 n 4 = 3 f (n) = O(n 5 ) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 12/25

Tehtävä 3 (b) f (n) = 800 + 50 n + 3n lim 800 + 50 n + 3n n = lim ( 800 n + 50 ) + 3 n = 3 f (n) = O(n) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 13/25

Tehtävä 3 (c) f (n) = 4n 3 + 2 n lim 4n 3 + 2 n 2 n = lim ( ) 4n 3 2 + 1 n = 1 f (n) = O(2 n ) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 14/25

Tehtävä 3 (d) f (n) = 4 log 2 n + 10n lim 4 log 2 n + 10n n = lim ( 4 log2 n n ) + 10 = 10 f (n) = O(n) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 15/25

Tehtävä 3 (e) f (n) = 3n log 2 n + 5n lim 3n log 2 n + 5n n log 2 n = lim ( 3 + 5 ) log 2 n = 3 f (n) = O(n log 2 n) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 16/25

Tehtävä 3 (f) f (n) = 2n/ log 2 n + n lim 2n/ log 2 n + n n = lim ( ) 2 log 2 n + 1 = 1 f (n) = O(n) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 17/25

Tehtävä 4 Neljä algoritmia, joiden laskutoimitusten lukumäärät: 25n, 5n 2, 1 2 n3, 2 n (a) (b) Yksi laskutoimitus kestää 1 ms (= 10 3 s) Minkä kokoinen tehtävä minuutissa? Tietyssä ajassa tehtävä, jonka koko 10 000 Nopeus kasvaa 10-kertaiseksi Minkä kokoinen tehtävä samassa ajassa? Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 18/25

Tehtävä 4 (a) Minuutti = 60 000 ms N = 60 000 kpl 25n = N n = N/25 = 2 400 2 400 5n 2 = N n = N/5 109,5 109 1 2 n3 = N n = 3 2N 49,3 49 2 n = N n = log 2 N = ln N/ ln 2 15,9 15 Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 19/25

Tehtävä 4 (b) Laskutoimitusten lkm kasvaa 10-kertaiseksi Merkitään n old = m = 10 000 25n = 10 25m n = 10m = 100 000 100 000 5n 2 = 10 5m 2 n = 10m 31 622,8 31 622 1 2 n3 = 10 1 2 m3 n = 3 10m 21 544,3 21 544 2 n = 10 2 m n = log 2 10 + m 10 003,3 10 003 Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 20/25

Tehtävä 5 (a) d = 0; for (i = 0; i < n; i++) { c[i] = 0; for (j = 0; j < n; j++) { c[i] += a[i][j]*b[j]; d += b[i]*c[i]; // silmukka n kertaa // silmukka n kertaa Sisimmän silmukan sisältö suoritetaan n n kertaa O(n 2 ) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 21/25

Tehtävä 5 (b) for (i = 0; i < n; i++) { if (i%2 == 0) { for (j = 0; j <= i; j++) a = 2*a; for (j = i; j < n; j++) b = b/2; // silmukka n kertaa // silmukka i+1 kertaa // silmukka n-i kertaa // (j-silmukat vain // jos i parillinen) Molemmat j-silmukat suoritetaan vain jos i on parillinen, ts. vain joka toisella i-silmukan kierroksella Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 22/25

Tehtävä 5 (b) jatkuu Sisempien silmukoiden sisällöt suoritetaan tai n 2 (i + 1 + n i) = 1 2 n2 + 1 n (jos n parillinen) 2 n + 1 2 (i + 1 + n i) = 1 2 n2 + n + 1 2 kertaa O(n 2 ) (jos n pariton) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 23/25

Tehtävä 5 (c) for (i = 1; i < n; i++) { for (j = n-1; j >= i; j--) { if (t[j] < t[j-1]) { swap(t[j-1], t[j]); // silmukka n-1 kertaa // silmukka n-i kertaa // tod.näk. vakio Sisemmän silmukan sisältö suoritetaan n 1 i=1 (n i) = (n 1)n (n 1)n 2 = 1 2 n2 1 2 n kertaa O(n 2 ) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 24/25

Tehtävä 5 (d) for (i = 1; i < n; i++) { k = 0; p = t[i]; for (j = i-1; j >= 0; j--) { if (t[j] <= p) leap(j, k); t[j+1] = t[j]; t[k] = p; i=1 // silmukka n-1 kertaa // silmukka i kertaa // tod.näk. vakio Sisemmän silmukan sisältö suoritetaan n 1 (n 1)n i = = 1 2 2 n2 1 2 n kertaa O(n 2 ) Algoritmit 1 Kevät 2018 Demot 1 31.1.-1.2.2018 25/25