Tietorakenteet
/ syksy 2009 / Linna
Harjoitus 1, viikko 37
1. Ns. Cocktailsekoitinlajittelu (cocktail
shaker sort) on
kuplalajittelun muunnos, jossa taulukkoa käydään läpi vuorotellen alusta
loppuun ja lopusta alkuun. Joka
toisella kierroksella kuplat nousevat pintaan ja paluukierroksella painavat
alkiot painuvat pohjaan. esitä kyseinen lajittelualgoritmi.
2. Määritä seuraavien funktioiden suuruusluokka.
Toisin sanoen etsi jokaiselle funktiolle f
mahdollisimman yksinkertainen funktio g
siten, että f on O(g).
a) n3 + 3n b) log(n4) c)
nlogn
+ 5(log(n))3 d) log(3n).
3. Määritä n:n
funktiona seuraavien lausejonojen suoritusajan suuruusluokka.
a) for (i =0; i <n; i ++)
for (j=0; j< i; j++)
for (k=0; k<j; k++)
x=x+1;
b) i =1;
while (i <= n) {
x =x+1;
i = i +1;
}
4. Määritä
n:n funktiona (tarkka lauseke) kuinka
monta kertaa seuraavassa lausejonossa suoritetaan sijoituslause x = x+1 ? Määritä sen jälkeen saadun lausekkeen
suuruusluokka.
for (i=1; i<n;
i=i+2)
for (j=1; j<=i; j++)
for (k=1; k<=i+1;
k++)
x = x+1;
5. Oletetaan, että taulukon alkiot saavat
kokonaislukuarvoja väliltä 1, …, 10. Onko mahdollista lajitella taulukko, jossa
on n annettua lukua väliltä 1, …, 10,
suuruusjärjestykseen ajassa O(n). Perustele väitteesi.
6. Perustele seuraava väite:
Jos
T1(n) = O(f(n))
ja T2(n) = O(g(n)),
niin T1(n)*
T2(n) = O(f(n)* g(n)).