Tietorakenteet / syksy 2009 / Linna

Harjoitus 2, viikko 38

 

 

1.    Tarkastellaan seuraavien kokonaislukujonojen lajittelua pikalajittelua käyttäen.

       Kuvaile lajittelun kulkua.

 

a)      7,6,10,1,9,12,8,3,11,2,4,5

b)      12,11,10,9,8,7,6,5,4,3,2,1

 

 

2.    Olkoon lajiteltavana edellisen tehtävän lukujonot. Kuvaile lajittelun kulkua, kun lajittelumenetelmänä on ShellSort.

 

 

3.    Mikä on pikalajittelun aikakompleksisuus, jos lajiteltavat alkiot ovat

 

       a) valmiiksi järjestyksessä,

 

       b) käänteisessä järjestyksessä ?

 

 

4.    Olkoon annettu lista L ja toinen lista P, joka sisältää positiivisia kokonaislukuja

       suuruusjärjestyksessä. Operaatio printLots(L,P) tulostaa listan L ne alkiot,

       joiden paikat määräytyvät listan P alkioiden mukaan. Jos siis esimerkiksi P = 1,

       3, 4, 6, niin listan L paikoissa 1, 3, 4 ja 6 olevat alkiot tulostuvat. Laadi ohjelma

       printLots(L,P).

 

 

5.    Laadi algoritmi Same(A,B), joka palauttaa arvon true, jos lineaarisen listan

       A sisältö on sama kuin lineaarisen listan B sisältö.

 

 

6.    Tarkastellaan seuraavaa peliä (Josephus problem): N henkilöä, numeroituna 1:stä N:ään istuvat pyöreän pöydän ympärillä. Alkaen henkilöstä 1 ojennetaan aina vieressä istuvalle kuuma peruna. Aina M:n askeleen jälkeen henkilö, jolla peruna on, putoaa pois pelistä ja peli jatkuu samalla periaatteella pudonneesta henkilöstä seuraavana olevasta. Viimeisenä pöytään jäävä on voittaja. Jos esimerkiksi M = 0 ja N = 5, niin pelaajat eliminoituvat järjestyksessä. Jos taas esimerkiksi M = 1 ja N = 5, niin eliminointijärjestys on 2, 4, 1, 5 ja siis henkilö numero 3 voittaa. Laadi ohjelma joka ratkaisee probleeman yleisillä arvoilla M ja N. Mikä on ohjelmasi vaatiman ajan suuruusluokka?