Jenna Nyblom Katri Vanhatalo Oskari Anttalainen Huffman-koodaus Jenna Nyblom Katri Vanhatalo Oskari Anttalainen
1. Tehtävän kuvaus Huffman-koodaus on menetelmä, jota käytetään erittäin yleisesti datan tiivistämisessä Esim. ZIP, MP3, JPEG, MPEG... Tehtävässä on tarkoituksena toteuttaa ohjelma, jolla voi pakata ja purkaa tekstitiedostoja
2. Huffman-koodauksen vaiheet
Pakkaaminen
1. Esiintymien laskeminen Annetusta tiedostosta lasketaan kunkin merkin esiintymä Esiintymät järjestetään suurimmasta pienimpään
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen
1. Esiintymien laskeminen Toista uudelleen
2. Puun rakentaminen Esiintymien perusteella rakennetaan Huffman-puu Esiintymätaulukko käydään läpi lopusta alkuun Yhdistetään aina kaksi vähiten esiintyvää merkkiä yhdeksi ja lasketaan niiden esiintymä yhteen Syntynyt yhdistelmä lisätään esiintymätaulukkoon oikealle paikalleen ja yhdistety merkit poistetaan taulukosta
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
2. Puun rakentaminen
3. Merkkien koodaus Puun jokainen vasen haara merkitään 0:lla ja oikea haara 1:llä Jokaiselle merkille voidaan näin puun avulla tehdä lyhyt binäärikoodi
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus
3. Merkkien koodaus Toista uudelleen
4. Pakkaaminen Edellisessä vaiheessa tehtyjen binäärikoodien perusteella teksti voidaan pakata
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen
4. Pakkaaminen Toista uudelleen
5. Tallentaminen Pakattu teksti voidaan tallentaa tiedostoon Purkamista varten myös puu on tallennettava
Purkaminen
1. Tiedoston lukeminen Tiedostosta luetaan pakattu teksti sekä Huffman-puu Puu kootaan uudelleen
2. Purkaminen Pakattu binäärimuotoinen teksti käydään läpi alusta loppuun ja muunnettaan se puun avulla takaisin tekstiksi
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen
2. Purkaminen Toista uudelleen
3. Tallentaminen Lopuksi purettu teksti tallennetaan tiedostoon
3. Luokat ja metodit Tree BuildTree CreateBitCodes Rakentaa Huffman-puun esiintymätaulun pohjalta CreateBitCodes Tekee jokaiselle merkille binäärikoodin puun pohjalta
3. Luokat ja metodit Node Havainnointi- ja muutosmetodeita Viittaukset edelliseen ja seuraavaan
3. Luokat ja metodit Compress BuildFrequencyTable Laskee merkkien esiintymät ja tekee niistä taulukon Encode Suorittaa itse tekstin pakkaamisen
3. Luokat ja metodit Decompress Decode Purkaa tiedostosta saatavan binäärikoodin puun avulla takaisin tekstiksi
3. Luokat ja metodit FileIO ReadText WriteText ReadCompressed Lukee tavallista tekstitiedostoa WriteText Kirjoittaa tavalliseen tekstitiedostoon ReadCompressed Lukee pakattua tiedostoa bittitasolla WriteCompressed Kirjoittaa pakattua dataa tiedostoon bittitasolla SaveFrequencyTable Tallentaa puun esiintymätaulun tiedostoon LoadFrequencyTable Lataa puun esiintymätaulun tiedostosta
3. Luokat ja metodit UserInterface MainMenu Päävalikko CompressionMenu Pakkaamisen valikko Compress Pakkaa tiedoston käyttäen siitä itsestään muodostettua puuta Decompress Purkaa tiedoston CompressWithExistingTree Pakkaa tiedoston käyttäen erikseen ladattavaa puuta ProduceTree Tuottaa tiedostosta puun ja tallentaa sen
4. Testaus Testidatana käytetään tekstitiedostoja, jotka sisältävät DNA-jonoja ”GTAGGCAGGGAGAAATGAACAAAATCAACATTGTGGGggaaggaggaaaggatgggtggaaagagggaaggggaggggaggggagggaagcaagaatgaa” Testitiedostot ovat noin 1,5Mt ja 16Mt kokoisia Verrataan pakatun ja pakkaamattoman tiedoston kokoeroa
5. Työnjako Ohjelma jaettiin kolmeen kokonaisuuteen Puun muodostus, merkkien koodaus, puun tallentaminen Pakkaaminen, purkaminen ja käyttöliittymä Tiedostojen luku ja kirjoitus ja esiintymien laskeminen