Jernej Golja, 2008
Kompresija podatkov <ul><li>Je postopek, kako enake podatke zapisati z manj zlogi. </li></ul><ul><li>Dve vrsti kompresije:...
Kompresija z izgubo <ul><li>Primerna za datoteke, kjer  vsaka informacija , ki predstavlja podatke,  ni ključnega pomena  ...
Kompresija brez izgube (1/2) <ul><li>Vse kar zakodiramo,  moramo  odkodirati v prvotno obliko. </li></ul><ul><li>Kje upora...
Kompresija brez izgube (2/2) <ul><li>Za  različne vrste datotek različni algoritmi  kodiranja: </li></ul><ul><ul><li>Bolj ...
Huffmanovo kodiranje (1/6) <ul><li>Uporablja  entropičen algoritem : </li></ul><ul><ul><li>Vsak znak  lahko zapišemo z  dr...
Huffmanovo kodiranje (2/6) <ul><li>Koraki pri izdelavi drevesa: </li></ul><ul><ul><li>Korake ponavljamo, dokler obstajata ...
Huffmanovo kodiranje (3/6) <ul><li>Primer: “ospo je ospo.”: </li></ul>“ o” (4) 0.308 “ j” (1) 0.077 “ e” (1) 0.077 “ .” (1...
Huffmanovo kodiranje (4/6) <ul><li>Koraki pri izdelavi drevesa: </li></ul><ul><ul><li>Vsem listom v drevesu dodamo  primer...
Huffmanovo kodiranje (5/6) <ul><li>Primer: “ospo je ospo.”: </li></ul>“ o” (4) 0.308 11 “ j” (1) 0.077 000 “ e” (1) 0.077 ...
Huffmanovo kodiranje (6/6) <ul><li>Kaj smo dobili? </li></ul><ul><ul><li>Binarno drevo listov z  unikatnim bitnim zapisom ...
Zapis kodirane datoteke (1/5) <ul><li>Drevo je za vsako datoteko unikatno, zato ga moramo zapisati zraven. </li></ul><ul><...
Zapis kodirane datoteke (2/5) <ul><li>Manipulacija bitov </li></ul><ul><ul><li>združujemo bitne kode naših znakov v zloge ...
Zapis kodirane datoteke (3/5) <ul><li>Primer zapisa: </li></ul>“ o” (4) 0.308 11 “ j” (1) 0.077 000 “ e” (1) 0.077 001 “ ....
Zapis kodirane datoteke (4/5) <ul><li>Manipulacija bitov </li></ul><ul><ul><li>ponavljamo  do konca </li></ul></ul><ul><ul...
Zapis kodirane datoteke (5/5) <ul><li>Rezultat? </li></ul><ul><ul><li>Odvisen od datoteke . </li></ul></ul><ul><ul><ul><li...
Dekodiranje(1/2) <ul><li>Iz glave ustvarimo  enosmerno povezan  seznam znakov  z njihovimi bitnimi kodami. </li></ul><ul><...
Slabosti & izboljšave <ul><li>Moja implementacija: </li></ul><ul><ul><li>Zagotovo dela samo z znakovnim kodiranjem, kjer j...
<ul><li>Vprašanja? </li></ul>
Upcoming SlideShare
Loading in …5
×

Kompresija tekstovnih datotek

1,389 views

Published on

Primer Huffmanove kompresije tekstovnih datotek.

Published in: Economy & Finance
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,389
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Kompresija tekstovnih datotek

  1. 1. Jernej Golja, 2008
  2. 2. Kompresija podatkov <ul><li>Je postopek, kako enake podatke zapisati z manj zlogi. </li></ul><ul><li>Dve vrsti kompresije: lossless (brez izgube) in lossy (z izgubo) kompresija. </li></ul>
  3. 3. Kompresija z izgubo <ul><li>Primerna za datoteke, kjer vsaka informacija , ki predstavlja podatke, ni ključnega pomena (slika, zvok, govor …). </li></ul><ul><li>Kodiramo tako, da je končni rezultat še vedno dovolj dober za prejemnika . </li></ul><ul><li>Primeri: JPEG, MPEG, MP3, WMA … </li></ul>
  4. 4. Kompresija brez izgube (1/2) <ul><li>Vse kar zakodiramo, moramo odkodirati v prvotno obliko. </li></ul><ul><li>Kje uporabljamo: tekstovne datoteke (.txt), zagonske datoteke (.exe), tam kjer so prvotni podatki ključnega pomena . </li></ul><ul><li>V principu bi vsak lossless algoritem lahko deloval nad vsemi vrstami podatkov . Vendar? </li></ul>
  5. 5. Kompresija brez izgube (2/2) <ul><li>Za različne vrste datotek različni algoritmi kodiranja: </li></ul><ul><ul><li>Bolj smo specifični , bolj smo učinkoviti . </li></ul></ul><ul><ul><li>Tekst, slika, zvok – vsak ima svoje lastnosti . </li></ul></ul><ul><li>Uporabno tudi pri kriptiranju (odstranimo logične vzorce v datoteki). </li></ul><ul><li>Ne moremo garantirati kompresije za vsako datoteko (posebej, če je že bila kodirana). </li></ul>
  6. 6. Huffmanovo kodiranje (1/6) <ul><li>Uporablja entropičen algoritem : </li></ul><ul><ul><li>Vsak znak lahko zapišemo z drugačnim zapisom (različno število zlogov). </li></ul></ul><ul><ul><li>Uporabimo statistiko za izračun verjetnosti in frekvence . </li></ul></ul><ul><li>Ustvari se prefix binarno drevo . </li></ul><ul><ul><li>Nobena vrednost lista v drevesu ne predstavlja začetka vrednosti v drugem listu. </li></ul></ul>
  7. 7. Huffmanovo kodiranje (2/6) <ul><li>Koraki pri izdelavi drevesa: </li></ul><ul><ul><li>Korake ponavljamo, dokler obstajata vsaj dva elementa za primerjat: </li></ul></ul><ul><ul><ul><li>1. najdi dva najmanjša elementa (z najmanjšo frekvenco) </li></ul></ul></ul><ul><ul><ul><li>2. seštej njuni frekvenci in jih združi v vozlišče </li></ul></ul></ul><ul><ul><ul><li>3. odstrani elementa iz prejšnjega seznama in upoštevaj vozlišče pri naslednjem iskanju </li></ul></ul></ul>
  8. 8. Huffmanovo kodiranje (3/6) <ul><li>Primer: “ospo je ospo.”: </li></ul>“ o” (4) 0.308 “ j” (1) 0.077 “ e” (1) 0.077 “ .” (1) 0.077 “ s” (2) 0.154 “ p” (2) 0.154 “ ” (2) 0.154 0.154 0.308 0.385 0.615 1 0.231
  9. 9. Huffmanovo kodiranje (4/6) <ul><li>Koraki pri izdelavi drevesa: </li></ul><ul><ul><li>Vsem listom v drevesu dodamo primerno bitno kodo , glede na to kje se nahajajo . </li></ul></ul>
  10. 10. Huffmanovo kodiranje (5/6) <ul><li>Primer: “ospo je ospo.”: </li></ul>“ o” (4) 0.308 11 “ j” (1) 0.077 000 “ e” (1) 0.077 001 “ .” (1) 0.077 010 “ s” (2) 0.154 011 “ p” (2) 0.154 100 “ ” (2) 0.154 101 0.154 0.308 0.385 0.615 1 0.231 0 0 0 0 0 0 1 1 1 1 1 1
  11. 11. Huffmanovo kodiranje (6/6) <ul><li>Kaj smo dobili? </li></ul><ul><ul><li>Binarno drevo listov z unikatnim bitnim zapisom svoje “kode”. </li></ul></ul><ul><ul><li>Večjo kot ima znak v izvorni datoteki frekvenco , manjšo bitno kodo mu dodelimo in obratno. </li></ul></ul>
  12. 12. Zapis kodirane datoteke (1/5) <ul><li>Drevo je za vsako datoteko unikatno, zato ga moramo zapisati zraven. </li></ul><ul><ul><li>Zapisati moramo zgolj znak in binarno kodo </li></ul></ul><ul><ul><li>Zraven pa zapišemo tudi št. izvornih znakov in odmik glave, za lažje dekodiranje </li></ul></ul>Primer: 000|j 001|e 010|. |18|3 itn…
  13. 13. Zapis kodirane datoteke (2/5) <ul><li>Manipulacija bitov </li></ul><ul><ul><li>združujemo bitne kode naših znakov v zloge in le-te zapisujemo </li></ul></ul>
  14. 14. Zapis kodirane datoteke (3/5) <ul><li>Primer zapisa: </li></ul>“ o” (4) 0.308 11 “ j” (1) 0.077 000 “ e” (1) 0.077 001 “ .” (1) 0.077 010 “ s” (2) 0.154 011 “ p” (2) 0.154 100 “ ” (2) 0.154 101 ospo je ospo. 11 011 100 1 byte
  15. 15. Zapis kodirane datoteke (4/5) <ul><li>Manipulacija bitov </li></ul><ul><ul><li>ponavljamo do konca </li></ul></ul><ul><ul><li>pazimo na zadnji zlog , ker ponavadi ni vseh 8 bitov zapisanih, zato mu dodamo lastne bite , kar s štetjem znakov upoštevamo pri dekodiranju . </li></ul></ul>
  16. 16. Zapis kodirane datoteke (5/5) <ul><li>Rezultat? </li></ul><ul><ul><li>Odvisen od datoteke . </li></ul></ul><ul><ul><ul><li>najboljši v primeru velike količine enakih znakov. </li></ul></ul></ul><ul><ul><ul><li>najslabši ko je malo znakov in so vsi različni. </li></ul></ul></ul><ul><ul><li>V povprečju vsaj 50% učinkovit pri naključnih podatkih (pri mojih lastnih testiranjih). </li></ul></ul>
  17. 17. Dekodiranje(1/2) <ul><li>Iz glave ustvarimo enosmerno povezan seznam znakov z njihovimi bitnimi kodami. </li></ul><ul><li>Potem pa relativno enak način kot kodiranje : </li></ul><ul><ul><li>bite sestavljamo v vzorce , ki jih potem primerjamo v našem seznamu. </li></ul></ul><ul><ul><li>v kolikor najdemo vzorec , v datoteko zapišemo njegov pravi znak . </li></ul></ul>
  18. 18. Slabosti & izboljšave <ul><li>Moja implementacija: </li></ul><ul><ul><li>Zagotovo dela samo z znakovnim kodiranjem, kjer je en znak predstavljen z enim zlogom (ANSI – ASCII). </li></ul></ul><ul><ul><li>Rešitev? Uporaba drugega tipa kot char, npr. int (4 zlogi – dovolj za UTF-8), itn. </li></ul></ul><ul><ul><li>Boljši zapis drevesa v “glavo” kodirane datoteke. </li></ul></ul><ul><ul><li>Buffer za pisanje v datoteke (za hitrejše delovanje) </li></ul></ul><ul><li>Huffmanov algoritem: </li></ul><ul><ul><li>Ni primeren za real-time kompresijo, saj moramo vsaj 2x skozi datoteko, da jo zakodiramo. </li></ul></ul>
  19. 19. <ul><li>Vprašanja? </li></ul>

×