Till KTH:s startsida Till KTH:s startsida

Extralabb 2

Bättre Huffmankodning

I den här uppgiften ska du bygga på labb 3 med tre utvidgningar.

En komprimerad fil

Beskrivningen av Huffmanträdet ("kodfilen" i labb 3) och den komprimerade filen ska lagras tillsammans i en fil. Beskrivningen av Huffmanträdet ska dessutom vara i binärformat (lämpligen 32-bitars heltat) och inte i textformat. Du kan t.ex. använda ett filformat:

<n> <tecken 1> <frekvens> .. <tecken n> <frekvens> [den komprimerade filen]

där varje <> är ett tal av lämplig storlek.

Bättre komprimering

Programmet ska koda antingen en (som i labb 3) eller två bytes i taget. Testa för olika typer av filer och se vilken av dessa strategier som ger bäst komprimering.

Bättre effektivitet

För bättre effektivitet ska du använda en prioritetskö när du bygger Huffmanträdet.

Stefan Nilsson skapade sidan 10 januari 2017

kommenterade 18 februari 2017

Jag förstår inte riktigt vad som menas med: "Beskrivningen av Huffmanträdet ska dessutom vara i binärformat (lämpligen 32-bitars heltal) och inte i textformat.". Hur är det tänkt att man ska skriva ut informationen i filen? Allt som skrivs till en fil måste antingen vara en sträng eller en byte, men här nämns 32-bitars heltal (alltså Int's). Så som jag tolkar uppgiften ska man skriva ut beskrivningen som en sträng i binärformat. Typ: "01001001" "01011001" osv... för om man skriver ut det som en byte så kommer det inte skrivas ut som nollor och ettor utan som oläsbart nonsens (tex FS8exD7 aka som min komprimerade fil).

En användare har tagit bort sin kommentar
Lärare kommenterade 20 februari 2017

Det går att skriva alla Javas grundläggande datatyper direkt till fil. En int, som ju är ett 32-bitars heltal, lagras till exempel som 32 bitar i filen.