Tömörítési algoritmusok

Szempontok

Milyen szempontokat érdemes figyelembe venni egy tömörítési algoritmus tervezése/használata esetén?

Hibajavítás

A tömörítési eljárások érzékenyek a tömörített adatokben keletkezett hibákra.

Licenszek

Bizonyos tömörítési eljárásokat licensz véd.

Futáshossz kódolás

Lempel-Ziv algoritmus

LZW

LZMA

LZSS

Huffman kódolás

Kiegészítő algoritmusok

Move-To-Front transzformáció

Burrows-Wheeler transzformáció

Az algoritmus lépései:

  • Soroljuk fel a bemeneti szöveg összes forgatását!
  • Rendezzük őket növekvő sorrendbe az első karakterük szerint!
  • A kimenetet az utolsó karakterek adják.

DEFLATE

ZIP implementációk

Feladatok

1. Leghosszabb egyezés keresése

  • Implementáljunk egy algoritmust, amelyik bemenetként kap egy hosszabb szöveget (window) és egy rövidebbet (input), majd megkeresi a leghosszabb prefix indexét és annak hosszát!
  • Párhuzamosítsuk a számítást OpenCL segítségével!
  • Készítsük el ennek segítségével az LZ77 algoritmus egy egyszerűbb változatát!

2. Futáshossz kódolás implementációk

3. Gyakoriságok számítása

  • Készítsünk egy programot OpenCL segítségével, amely egy bináris tömbben meghatározza az előforduló byte értékek gyakoriságát!

4. Huffman kódolás

  • A gyakoriságok alapján készítsünk Huffman kódoláshoz kódfát!
  • Valósítsuk meg a kódolást és dekódolást!

5. Blokkméret optimalizáció

  • OpenCL és mérések segítségével próbáljunk meg becslést adni Huffman kódolás esetén az optimális blokkméretre!
  • Magát a mérést párhuzamosítsuk!
  • Egyszerűbb esetben byte, kompikáltabb változatban bit alapon kódoljunk!

6. Entrópia csökkentése

  • Vizsgáljuk meg mérések segítségével, hogy a Move-To-Front algoritmus hogyan csökkenti az entrópiát!
  • Összegezzük, ábrázoljuk a kapott eredményeket!