Övning 5

Mål:

  • Kunna använda grundläggande komprimeringsalgoritmer för enkla exempel, och avgöra vid vilka typer av komprimering dessa är lämpliga
    • RLE
    • Lempel-Ziv
    • Huffmankodning
  • Kunna förklara begreppen redundans, och demonstrera olika sätt att genomföra felkorrigering
  • Kunna använda hashning och anpassa den till ett givet problem
    • hashfunktion
    • tabellstorlek
    • krockhantering
  • Kunna avgöra när det är lämpligt att använda ett bloomfilter, och redogöra för hur ett bloomfilter fungerar för ett givet problem

Komprimering (inför KS4)


1. Felkorrektion

Vill man gardera sig mot fel kan man lägga till redundans (motsatsen till komprimering). Visa exempel på följande fyra metoder:

    1. Kontrollsiffra 
    2. Skicka kopior av hela meddelandet
    3. Paritetsbitar
    4. Hammingavstånd

 

 

2. Komprimera med Huffmankodning

"man är mans gamman" kan man läsa i Havamal. Konstruera en huffmankod för tecknen i detta uttryck (rita trädet) och skriv sedan upp det i kodad form. lösning

3. Underklädesreformen

korsett.png

Kampen för kvinnors rättigheter startade med klädreformen på 1850-talet, som hade syftet att minska komprimeringen av kvinnokroppar genom att byta den hårda korsetten mot mjukare ylleunderkläder.

a) Kan följdlängdskodning (RLE) användas vid komprimering av bilden ovan? Motivera ditt svar. 


b) Tabellen nedan visar bokstäver med förekomst i procent. Rita
upp ett Huffmanträd för bokstäverna, och koda ordet ”LIBERTY” med din
huffmankod.

L 8%
I 13%
B 4%
E 32%
R 9%
T 28%
Y 6%



c) Förklara principerna bakom LZ-metoder för komprimering och demonstrera LZW med ordet ”VALBENSSKENA”. 


Problemträd del 2

Sjuor till hundra

Det gäller att skriva talet 100 med enbart sjuor och dom fyra räknesätten, till exempel så här.

7 +7 /7 *7 *7 = 98 

Det var ett gott försök som inte nådde ända fram. För att man ska få använda / måste divisionen gå jämnt ut.

a) Rita problemträdet och diskutera bästa algoritm för att avgöra OM problemet är lösbart.

b) Om man dessutom vill veta hur lösningen ser ut krävs en mer komplicerad datastruktur. Beskriv den och skissa ett program.

lösning

a) lösning (kod från övning) Links to an external site.

b) lösning med utskrift (kod från övning) Links to an external site.


Fler problemträdsuppgifter


  1. Labyrint

    Tilda går ensam omkring i en labyrint, hennes kompisar har redan hittat ut. Det finns gångar och korsningar. En del gångar är blindgångar. Vid varje korsning kan man gå åt höger eller vänster alternativt gå tillbaka dit man kom ifrån. Tilda bestämmer sig för att hålla till höger i varje korsning tills hon hittar utgången. Vad kallas en sådan sökalgoritm? Väl hemma bestämmer sig Tilda för att skriva ett program som hittar vägen genom en labyrint. Vad behöver man för datastrukturer för att implementera en sådan algoritm?

    animation av labyrint Links to an external site.


  2. Taltävling

    Under sommaren har det gått en tävling i radio där det gäller att så snabbt som möjligt hitta ett tal som uppfyller två villkor. Första villkoret, som gäller hela tävlingen, är att siffrorna i talet måste vara strikt stigande (23578 är OK men inte 235578 eller 23587). Andra villkoret är nytt för varje dag och kan t ex vara att talet ska vara ett primtal, jämnt delbart med 599 eller en tvåpotens. Beskriv utförligt en breddenförst- eller djupetförstsökning (effektivare metod ger fler poäng) som hittar det minsta talet som uppfyller villkoren. Vilka klasser och metoder behövs?


  3. Patiens

    I patiensen "Rutan" använder man bara ess, kungar, damer och knektar, alltså sexton kort. Det gäller att lägga ut korten i en 4x4-matris så att två kort av samma färg eller valör aldrig finns i samma rad, kolumn eller någon av de båda diagonalerna. Man vill att ett program ska skriva ut alla lösningar till patiensen på nedanstående sätt.

          hj E   sp D   kl Kn  ru K
          kl K   ru Kn  hj D   sp E
          ru D   kl E   sp K   hj Kn
          sp Kn  hj K   ru E   kl D
    

    Du behöver inte skriva programkod, men du ska förklara algoritmen utförligt och beskriva datastrukturer, metoder och klasser.


  4. Sudoku

    Sudoku är ett spel som består av ett rutnät på 9x9 rutor, uppdelat i nio 3x3-rutor. Rutnätet har n siffror ifyllda från början och det gäller att fylla varje rad, varje kolumn och varje 3x3-ruta med siffrorna 1-9. En siffra får aldrig förekomma mer än en gång per rad, kolumn och 3x3-ruta. Beskriv en algoritm som hittar en lösning till ett givet Sudoku-problem, och tala om hur algoritmen skulle kunna implementeras.


  5. Pokémontränaren

    Du är så uppskattad i ditt arbete som pokémontränare att du kan välja och vraka bland erbjudandena. Givet ett antal förslag (anbudsgivare, startdag, slutdag, arvode) vill du planera nästa månad så att den blir så lönsam som möjligt. Rita först upp problemträdet (roten och några noder i de första två nivåerna räcker). Föreslå en algoritm som finner det schema som ger störst inkomster. Motivera ditt val av algoritm och beskriv hur du skulle implementera algoritmen.


  6. Aliententan 2015-03-20, uppgift 5 (betyg E)

    När rymdvarelserna reser använder de sig av maskhål (Einstein-Rosen-brygga aka wormhole) vilka förbinder två platser i rymden. De har en förteckning (graf) över vilka platser som är förbundna med varandra (det kan finnas fler än ett maskhål vid en plats). För att räkna ut en rymdfärdplan med så få maskhålsanvändningar som möjligt använder de följande algoritm tillsammans med maskhålsförteckningen samt en kö.

    • 1) Lägg startmaskhålet tillsammans med en tom föräldrareferens i en kö
    • 2) Plocka ut nästa maskhål och föräldrareferens ur kön och
    • 3) Om detta är destinationsmaskhålet:
      • a) Skicka föräldrareferens och maskhålet till en rekursiv färdutskriftsmetod som skriver ut reshoppsvägen:
      • b) Avsluta
    • 4) Annars:
      • a) Slå upp vilka andra maskhål som är förbundna med detta maskhål och lägg respektive nytt maskhål tillsammans med en föräldrareferens till detta maskhål i kön
    • 5) Upprepa från punkt 2.

    Rymdvarelserna berättar att algoritmen fungerar ibland men ibland är det som att de bara hoppar runt mellan samma platser utan att komma fram.

    • Vad är det som är problemet med deras algoritm?
    • Förbättra algoritmen så att problemet löses!
    • Vad kallas algoritmen?

  7. SL-tentan 2014-03-18, uppgift 2 (betyg E)

    Paris pendel- och tunnelbana är ett virrvarr av olika stationer som står i förbindelse med varandra. Beskriv översiktligt en effektiv algoritm som räknar ut en resväg från en station till en annan med så få stationsstopp som möjligt. Att byta linje på en station räknas som ett stopp. 


  8. Arkitektur bygger slott (C-uppgift från Tildatenta 2018-06-07)

    Ett magiskt sagoslott har många rum som är förbundna med varandra. En del rum angränsar till väldigt många rum och andra rum gränsar bara till ett enda. Ibland så ändras planlösningen magiskt. Det som händer då är att antingen så försvinner en förbindelse mellan två rum eller så tillkommer en ny förbindelse mellan två rum.

    • addVertex(node) Lägger till hörnet node till grafen.
    • addEdge(node1, node2) Drar en kant mellan hörnen node1 och node2.
    • v = getVertex(key) Hittar det hörn som har nyckeln key
    • vlist = getVertices() Returnerar en lista med alla hörn.

    En tildastudent får uppdraget att lagra hur rummen är förbundna med varandra i en graf. Man ska kunna

    • se om två rum är förbundna med varandra,
    • se vilka rum som är förbundna med ett givet rum,
    • uppdatera grafen när magi inträffar (rumsförbindelse försvinner/tillkommer).

    a) Rita och beskriv kortfattat hur grafen kan representeras som en grannlista.

    b) Rita och beskriv kortfattat hur grafen kan representeras som en grannmatris.

    c) Jämför grannlista och grannmatris med avseende på prestanda och minnesåtgång för de tre punkterna ovan.

    lösningsskiss (se uppg 8 C)