Inlämningsuppgift 1 - PK3 VT-03


Inlämningsuppgift 1 skall lämnas in senast söndag 25/5 kl. 24:00. Lämna in den med hjälp av inlämningssystemet i slutet av denna sida. Se till att läsa igenom kodkonventionerna innan du börjar. Dessa skall följas.

Redovisning

Uppgiften skall redovisas på vanligt sätt (med inlämningssystemet, se längst ner på sidan). Programmet skall vara välskrivet och välkommenterat. Dessutom skall det vara provkört och körexempel skall ingå i redovisningen. Ange också var källkoden finns så programmet kan provköras i samband med rättning.

Uppgiften skall lösas och redovisas individuellt. Naturligtvis är det acceptabelt att diskutera problem med varandra - men gör du detta så ange gärna vem du pratat med. Läs etik-reglerna för kursen.

Innan du börjar skriva kod, se till att läsa igenom hela uppgiften.

Allmänt

Radix-sort användes ursprungligen för att sortera hålkort. Man kan jämföra detta med att sortera ett antal tal vilka alla har samma antal siffror. Principen är att man sorterar talen först på den minst signifikanta siffran, sedan den näst minst signifikanta osv.
För att detta skall fungera är det nödvändigt att man använder en stabil sorteringsalgoritm. Med detta menas att den inbördes ordningen mellan två likadana tal skall behållas. Radix-sort beskrivs i Introduction to Algorithms sid 170.

Meningen med den här uppgiften är att implementera radix-sort, och undersöka dess effektivitet.

Uppgift

  1. Implementera radix-sort för heltalslistor: radixSort: int list -> int list
     
  2. Hur förväntar du dig att sorteringstiden skall bero av indata? Förklara eller ge ett matematisk uttryck.
     
  3. Undersök radix-sort genom att sortera listor med tal vilka alla har samma antal siffror. Sortera talen i stigande ordning, dvs predikatet som ska jämföra heltalen är <-operatorn. (Uppgiften kan utökas till att omfatta tal med olika antal siffror för den som vill.) Endast slumpade listor behöver sorteras. (Se uppgift 2 för exempel på hur du kan slumpa fram en heltalslista.)
     
    Exempeldata
    [6342, 2234, 1098, 1750], vilken sorterad ska bli: [1098, 1750, 2234, 6342].
     
  4. Jämför effektiviteten med någon av list-sorteringsalgoritmerna som användes i uppgift 2.
     
För att mäta exekveringstiden kan du använda funktionen timeit: ('a -> 'b) -> 'a -> real i filen ranTime.sml.

När man slumpar fram listor bör intervallet mellan största och minsta tal vara minst 100 ggr större än antalet tal, annars ökar risken att få många dubletter i listorna. Många dubletter gör att man undersöker ett extremfall istället för ett generellt, slumpat fall.

Din redovisning ska innehålla

Din inlämning ska vara körbar. Dvs det som inte är kod ska vara bortkommenterat! All kod som du använt för att lösa uppgiften ska redovisas och följa kodkonventionerna.

Inlämning

Hämta ett formulär för att lämna in uppgiften genom att fylla i fälten nedan.

ID:
PIN:
formulär för inlämning