Göm meny
Gäller för: VT21

Lektion 7

Övningar inför laboration 7.

Övning 1

Att läsa filer med mycket data tar tid och finns det ingen anledning till att tro att datat ändrats i filsystemet bör man undvika det. Syftet med denna övning är att du ska prova på att identifiera kod som gör detta och förhoppningsvis kunna undvika det i laboration 7.

I denna övning ska du jobba med koden i filen ovn1.py, samt data i filen webbnyheter2013_stats.tsv. Ladda ner filerna och se till att de ligger i samma katalog.

  • Filer till lektion 7 finns i /courses/TDDE44/kursmaterial/lektion7/
  • Distansläge: Filer till lektion 7

Ställ dig i den katalogen och kör koden. Nedan ser du en exempelkörning.

$ python3 ovn1.py
python: True
långsam: True
snabb: True
komplexitet: True
Körtid: 3.2699759006500244 sekunder.

Testkör koden några gånger och se hur lång tid det tar för den. Som koden är skriven behöver programmet läsa in innehållet i webbnyheter2013_stats.tsv flera gånger.

Din uppgift är att ändra i funktionen find_words_in_file() så att filen inte läses in flera gånger. Testkör koden så att du ser att det går fortare. I övningen ska du inte använda dig av globala variabler.

Att ta med till laboration 7: Om ditt program i laboration 7 går långsamt, se till så att du inte läser in ordfrekvensdata flera gånger. Det kan vara så att du bara har skrivit det på ett ställe, men om den koden anropas flera gånger spelar det ju ingen roll.

Att fundera över: Varför är inte körtiden exakt densamma för varje körning?

Se Wall time för förklaring och time (Unix) för vertyg att använda i Linux för att mäta körtid på vilket program som helst.

Övning 2

En annan ibland onödig “tidstjuv” är att det program man skriver bearbetar mer data än vad som egentligen behövs. Måste vi t.ex. räkna redigeringsavståndet mellan sökordet och alla andra ord, eller räcker det med ett begränsat antal?

I denna övning ska du jobba med filen ovn2.py, samt data i filen webbnyheter2013_stats.tsv. Ladda ner filerna och se till att de ligger i samma katalog.

  • Filer till lektion 7 finns i /courses/TDDE44/kursmaterial/lektion7/
  • Distansläge: Filer till lektion 7

Ställ dig i den katalogen och kör koden. Nedan ser du en exempelkörning.

$ python3 ovn2.py
Genomsnittslängden på ord som innehåller 'guld' är 11.621079046424091 tecken.
Genomsnittslängden på ord som innehåller 'funktion' är 16.27777777777778 tecken.
Genomsnittslängden på ord som innehåller 'python' är 13.833333333333334 tecken.
Genomsnittslängden på ord som innehåller 'program' är 16.581566068515496 tecken.
Genomsnittslängden på ord som innehåller 'programmering' är 18.285714285714285 tecken.
Genomsnittslängden på ord som innehåller 'start' är 12.28937728937729 tecken.
Genomsnittslängden på ord som innehåller 'avbryt' är 8.571428571428571 tecken.
Genomsnittslängden på ord som innehåller 'begränsa' är 14.066666666666666 tecken.
Genomsnittslängden på ord som innehåller 'stor' är 13.395426042050904 tecken.
Genomsnittslängden på ord som innehåller 'ord' är 12.682317467154856 tecken.
Genomsnittslängden på ord som innehåller 'ing' är 15.74066952936401 tecken.
Körtid: 0.48661208152770996 sekunder.

Testkör koden några gånger och se hur lång tid det tar för den att köra. Koden letar upp alla ord som innehåller en viss delsträng och räknar ut medellängden på dessa ord.

Uppgift

Din uppgift är ändra i funktionen average_len_of_matches() så programmet nöjer sig med att titta på medellängden av de första 5 orden som innehåller delsträngen. Testkör koden igen för att se att det går snabbare.

I laborationen kan en liknande situation att inträffa när du ska ta fram ersättningsförslag för ditt okända ord. Om ditt program tar väldigt lång tid på sig, tänk på det du gjort i denna övning.


Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2021-05-03