Tietorakenteet ja algoritmit I 10.

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.