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)).