Tietorakenteet ja algoritmit I Harjoitus 2 10.-11.9.2015 Ohjausta ke 10-12 salissa T/B247. Tällä viikolla ei X-tehtävää, mutta seuraavalla viikolla on, tee tehtävät 11 ja 12 harjoituksen vuoksi. 7. Aseta seuraavat funktiot kasvunopeuden mukaiseen järjestykseen. Mikä funktioista ei kuulu joukkoon? √ 3 42loglogn n/logn (logn)2 √n √ n n×n n 2 n √ 2.5 3 n−logn n n nlogn √ log2 7 2 n 2015 log(n ) n/log2n n! (3/2)n n2 +n3 n2 −n3 Valmistaudu perustelemaan peräkkäisten funktioiden järjestys. 8. Määrää seuraavien ohjelmanosien suorituksen aikavaativuus kertaluokkana n:n suhteen: // A int sum = 0; for (int i = 1; i < 2∗n; i++) sum = sum+1; // C int sum = 1; while (sum < n) sum = sum + 2; // E int sum = 1; while (sum < n) sum = sum + sum; 1 2 3 4 // B int sum = 0; for (int i = 0; i < n; i++) for (int j = 1; j < i ; j++) sum = sum + 1; 1 2 3 4 5 1 2 3 4 1 // D int sum = 0; for (int i = −2; i < 2∗n+3; i++) for (int j = 2; j < n−5; j++) sum = sum + 1; 1 2 3 4 5 2 3 4 // F int sum = 0; for (int j = 1; j <= n; j++) for (int i = 1; i <= j ; i++) if ( i == j ) for (int k = 0; k < n; k++) sum = sum + 1; 1 2 3 4 5 6 7 9. Todista seuraavat väittämät määritelmään nojautuen todeksi tai epätodeksi (johda epäyhtälöt siten, että ylhäältä rajoittaminen tulee näytetyksi ja c ja n0 selviävät): (a) n2 +2n+1=O(n2) √ (b) n+n n−9=O(n2) √ √ (c) n+2n n+3=O(n n) (d) n3 −4n2 +2n=O(n3) 10. Todista seuraavat väittämät määritelmään nojautuen todeksi tai epätodeksi (johda epäyhtälöt siten, että ylhäältä/alhaalta rajoittaminen tulee näytetyksi ja c ja n0 selviävät): (a) 3n2 −n+2=Ω(n2) (b) n2 −n+2=Ω(n2) √ (c) n n−n+3=o(n2) (d) n2 −2n+2=Θ(n2) Seuraavissa “kirjoita algoritmi joka” tehtävissä tehdään toimiva Java-metodi joka saa parametrinaan syötteen ja palauttaa tehtävänannon mukaisen uuden kokoelman, mutta ei tee mitään muuta. Ei siis esimerkiksi muuta syötteitään tai tulosta (ainakaan lopullinen versio). Ota syötteen generoiva ja metodia kutsuva pääohjelma kurssi www-sivulta. Harjoitustilaisuuteen tietokoneella esitettäväksi ohjelma on näppärin tuoda tallentamalla se cs:lle, muualle verkkoon tai muistitikulle. 11. Kirjoita algoritmi (Java-metodi) joka saa parametrinaan kaksi kokonaislukutaulukkoa (Integer[] A, Integer[] B) ja joka luo ja palauttaa uuden kokonaislukutaulukon jossa on kaikki ne alkiot jotka löytyvät taulukosta A mutta eivät löydy taulukosta B (siis niiden erotuksen). Mikä on algoritmisi aikavaativuus? Voisiko sitä parantaa? Ota tehtävään pääohjelma kurssin www-sivulta. 12. Kertaa Ohjelmointi II -kurssilla käsitelty ArrayList -luokka. Lisätietoa: http://docs.oracle.com/ javase/6/docs/api/java/util/ArrayList.html. Muuta edellisen tehtävän 11 algoritmi toimimaan taulukoiden sijaan ArrayList -kokoelmilla. Älä käytä valmista .removeAll() -metodia. Mikä on algoritmisi aikavaativuus? Voisiko sitä parantaa? Ota tehtävään pääohjelma kurssin www-sivulta.
© Copyright 2024