DD1320VT201
    Laboration 6: Sökning och sortering
    Hoppa över till innehåll
    Översikt
    • Logga in
    • Översikt
    • Kalender
    • Inkorg
    • Hjälp
    Stäng
    • Min översikt
    • DD1320VT201
    • Uppgifter
    • Laboration 6: Sökning och sortering
    • Startsida
    • Uppgifter
    • Sidor
    • Filer
    • Moduler

    Laboration 6: Sökning och sortering

    • Inlämningsdatum Inget inlämningsdatum
    • Poäng 1
    • Lämnar in en filuppladdning
    • Filtyper py
    Mål Läs i kursboken
    Kunna jämföra algoritmer med avseende på tidskomplexitet, i teori och praktik. Se Föreläsning 4, Föreläsning 9, Övning 5

    Kapitel 2

    Kapitel 5 (utom 5.5)

    20190227_103414.jpg

    □ Sökning och sortering

    I denna labb ska du arbeta med större datamängder. Filen unique_tracks.txt (84MB) är hämtad från Million Song Dataset. Den innehåller data om en miljon låtar. Varje rad i filen har formatet:

         trackid<SEP>låtid<SEP>artistnamn<SEP>låttitel

    Ladda ner filen från webbläsaren genom att högerklicka och välja "Save link as..."

    Om du kör på skolans Ubuntu-datorer så ligger filen här: /info/tilda/unique_tracks.txt

    □ Lista med objekt

    Skriv en klass som representerar en låt enligt ovan. Förutom de vanliga metoderna ska du också implementera __lt__(self, other) som kan jämföra om objektet self är mindre än objektet other, med avseende på artistnamn.

    Läs in låtarna från filen, skapa ett objekt för varje rad och spara objekten i en lista. Testa att inläsningen har fungerat.

    □ Modulen timeit

    Läs i dokumentationen för Pythons modul timeit och svara på följande frågor:

    • Vad representerar parametern stmt?
    • Vad representerar parametern number?
    • Vad är det timeit tar tid på?
    • Vad skrivs ut av ett anrop av timeit?

    □ Tidtagningen

    Sökning

    Här ska du jämföra sökning på tre olika sätt:

    1. Linjärsökning i en osorterad lista.

    2. Binärsökning i en sorterad lista. Sortera listan först med pythons sort-metod.

    3. Sökning i hashtabell. Här kan du antingen använda pythons dict eller din egen hashtabell.

    Skriv ett program som tar tid på varje variant av sökning ovan. 

    Som hjälp för att komma igång har du följande exempel (kursiverade funktioner behöver du skriva själv). När man tar tid på en funktion som har parametrar kan man använda lambda.

    def main():
    
        filename = "/info/tilda/unique_tracks.txt"
    
        lista = readfile(filename)
        n = len(lista)
        print("Antal element =", n)
    
        sista = lista[n-1]
        testartist = sista.artist
    
        linjtid = timeit.timeit(stmt = lambda: linsok(lista, testartist), number = 10000)
        print("Linjärsökningen tog", round(linjtid, 4) , "sekunder")
    

    Du får själv välja vad du ska söka efter (låttitel alternativt artistnamn). Du får också välja vilket element du ska söka efter. Exemplet ovan söker efter den sista artisten. Är det en bra idé?

    Fyll i tiderna i följande tabell:

    n = 250 000  n = 500 000 n = 1 000 000
    Linjärsökning
    Binärsökning
    Sökning i hashtabell

    För att göra en kortare lista kan du använda slicing:

     mindreLista = storLista[0:250000]

    Sortering

    Här ska du jämföra två olika sorteringsmetoder. Du får välja vilka metoder du vill (som du kan förklara). Välj en långsammare och en snabbare metod. Du får gärna använda kod (för sorteringen) från föreläsningar, kursboken eller andra källor, men var noga med att ange var koden kommer från.

    Du kan välja att sortera på låttittel eller artistnamn. Modifiera din tidtagningskod från sökningen ovan. (Att sortera 1000 gånger kan ta lite väl lång tid.)

    Fyll i tiderna i följande tabell:

    n = 1000  n = 10 000 n = 100 000 n = 1 000 000

    Långsam sorteringsmetod:

     

    Snabbare sorteringsmetod:

     

    
    

    □ Analys

    Skriv upp tidskomplexiteten för de algoritmer du tagit tid på ovan. Stämmer dina resultat med teorin? Om inte - vad kan det bero på?

    Skriv en kommentar sist i ditt program där du analyserar dina resultat. Förklara skillnaden i tid mellan de olika momenten.

    Betyg

    Denna labb kan endast ge betyg E. Du måste lämna in den och redovisa den i tid för att få göra labbarna för högre betyg.

    Redovisning

    Labben lämnas in indivuellt med "Lämna in uppgift"-knappen högst upp på sidan, och ska redovisas muntligt av bägge gruppmedlemmarna. Skriv gruppmedlemmarnas namn i kommentarsfältet!

    Vid redovisningen ska du kunna

      • Visa hur dina sök-, och sorteringsfunktioner fungerar,
      • Förklara och redovisa vilken tidskomplexitet dina algoritmer har,
      • Förklara skillnaden i tid mellan de olika momenten.

     

    0
    Ytterligare kommentarer:
    Maxresultat för gradering till > poäng

    Matris

     
     
     
     
     
     
     
         
    Det går inte att ändra en matris efter att du börjat använda den.  
    Hitta en matris
    Hitta matris
    Titel
    Du har redan bedömt studenter med den här matrisen. Större ändringar kan påverka resultaten för deras uppgifter.
    Titel
    Kriterier Bedömningar Poäng
    Redigera beskrivning av kriterium Ta bort kriterium rad
    Det här kriteriet är länkat till ett lärandemål Beskrivning av kriterium
    tröskel: 5 poäng
    Redigera ranking Radera ranking
    5 till >0 poäng
    Full poäng
    blank
    Redigera ranking Radera ranking
    0 till >0 poäng
    Inga poäng
    blank_2
    Det här området kommer användas av utvärderaren för kommentarer relaterade till det här kriteriet.
    poäng
      / 5 poäng
    --
    Ytterligare kommentarer
    Poängsumma: 5 av 5