Kompresija podataka Da li su bitovi stiljivi DR
Kompresija podataka - Da li su bitovi stišljivi? DR MARKO D. PETKOVIĆ DEPARTMAN ZA RAČUNARSKE NAUKE PRIRODNO-MATEMATIČKI FAKULTET, NIŠ dexterofnis@gmail. com www. pmf. ni. ac. rs/dexter
Kompresija podataka Cilj: Smanjiti veličinu fajla / fajlova! Možda ovako: Veličina: 11 k. B 01010001101011110001010… Veličina: 11 k. B ? !? ! 01010001101011110001010…
Primene kompresije Nekad (pre ~25 god): Sad: Hard disk: 80 MB Hard disk: 800 GB Diskete 1. 44 MB, 1. 2 MB, 360 k. B Flash memorija: 8 -64 GB Masovno “zipovanje” fajlova “U pozadini” DOCX, XLSX, PPTX, … “Ručni” alati za kompresiju i dekompresiju GIF, PNG, JPEG, MP 3, MPEG Deljenje i prenos podataka na Installacije programa više disketa “Brzi” modemi. . . E – mail Veliki serveri (Google, FB, … ) Cloud servisi…
Postavka problema
Postavka problema Ideja 1: Kodirati simbol po simbol; Dužina kodne reči zavisi od učestalosti pojavljivanja simbola! Primer: Tekst se sastoji od slova A, B, C i D. Broj pojavljivanja slova: A(65), B (20), C (10) i D (5). Ušteda: 25%!!!
(De)kodiranje Kod 1 (A: 00, B: 01, C: 10, D: 11) ABDBC 0001110110 00|01|11|01|10 A | B| D| B| C Dekodiranje je jednoznačno i bez vraćanja jer su oba koda prefiksna Kod je prefiksni ako nijedna prefiksni kodna reč nije prefiks druge Kod 2 (A: 0, B: 10, C: 110, D: 111) AACDCB 001011111010 101 je prefiks od 1010001 0|0|10|111|110|10 A|A| C| D| C| B Zadatak: Naći prefiksni kod koji daje najmanju dužinu kodiranog teksta!!
Hafmanov algoritam Za date učestalosti (brojeve) pojavljivanja svakog slova u fajlu konstruiše optimalni prefiksni kod! Autor: David A. Huffman (1925 – 1999) – seminarski rad iz teorije informacija kod prof. Roberta Fanoa. Primer: Slova: A, B, C, D, E, F Broj pojavljivanja: A(10), B(20), C(30), D(40), E(50), F(60) Ukupna veličina fajla: 210 slova David A. Huffman Robert Fano
Hafmanov algoritam A 10 B 20 C 30 D 40 E 50 F 60
Hafmanov algoritam X 30 A 10 B 20 C 30 D 40 E 50 F 60
Hafmanov algoritam Y 60 X 30 A 10 B 20 D 40 C 30 E 50 F 60
Hafmanov algoritam D 40 E 50 Y 60 X 30 A 10 B 20 F 60 C 30
Hafmanov algoritam Z 90 D 40 E 50 Y 60 X 30 A 10 B 20 F 60 C 30
Hafmanov algoritam Y 60 X 30 A 10 B 20 F 60 C 30 Z 90 D 40 E 50
Hafmanov algoritam W 120 Y 60 X 30 A 10 B 20 F 60 C 30 Z 90 D 40 E 50
Hafmanov algoritam Z 90 D 40 W 120 E 50 Y 60 X 30 A 10 B 20 F 60 C 30
Hafmanov algoritam V 210 0 Z 90 0 D 40 1 W 120 1 1 0 E 50 Y 60 0 X 30 0 A 10 1 F 60 C 30 1 B 20
Hafmanov algoritam A B C D E F : : : v. A v. B v. C v. D v. E v. F = = = 1000 1001 101 00 01 11 V 210 0 Z 90 0 D 40 W 120 1 1 0 E 50 Y 60 0 Kodna reč za svako slovo (A-E) je put od korena (V) do tog slova 1 X 30 0 A 10 1 F 60 C 30 1 B 20
Vrste simbola Simboli: A, B, C, D, … 0, 1, 2, … , 9 Alfanumerički karakteri (ASCII) …, ’ 0’, ’ 1’, …, ’ 9’, …, ’A’, ’B’, …, ’Z’, …, ’a’, ’b’, …, ’z’, … Unicode Grupe bitova (bajtova) 0000, 0001, 0010, 0011, 0100, … , 1111 (4 b) 0, 1, 2, …, 255 (1 B) 0, 1, 2, …, 32767 (2 B) Fajl: Iz našeg ugla: Niz simbola određene dužine (N) U memoriji: Niz bajtova!!
Učestalost i informativnost
Teorijske granice Claude Shannon
Mane Huffmanovog kodiranja
Lempel – Ziv algoritmi Eliminišu zavisnost među simbolima Kompaktna implementacija LZ 77, LZ 78 – osnovni algoritmi Izvedeni: LZW LZJB, LZMA, LZO, LZRW, LZSS, LZWL LZX LZ 4 DEFLATE (ZIP) Statistical LZ (Ho, 2000) – polifone melodije u starim telefonima Koriste se u programima za kompresiju (ZIP, RAR, …) kod kompresije slike kao bešumna komponenta (JPEG, PNG, …) Abraham Lempel Jacob Ziv
LZ 77 – Sliding window k j k W i (trenutna pozicija)
LZ 77 – primer (W=4) A B B B A A B A (0, A) (0, B) (1, 1, 1) (1, 3, 6) Dekodiranje: (1, 4, 2) (1, 1, 1) A B BB A … (1, 3, 2) (1, 2, 2)
LZ 78 – Dictionary based Formira rečnik do sada nađenih reči Učitava karaktere sve dok se ne dobije reč koja ne postoji u rečniku Reč ubacuje u rečnik, a na izlaz šalje poslednji karakter i poziciju prethodne reči u rečniku Output: …, (i, C), … C C
LZ 78 – Primer ABBCBCABABCAAB C=A P=… Korak 1 POS 1 Izlaz (0, A) POS = 1 Rečnik A
LZ 78 – Primer ABBCBCABABCAAB C=B P=… Korak 1 2 POS 1 2 Izlaz (0, A) (0, B) POS = 2 Rečnik A B
LZ 78 – Primer ABBCBCABABCAAB C=C P=B Korak 1 2 3 POS 1 2 3 Izlaz (0, A) (0, B) (2, C) POS = 3 Rečnik A B BC
LZ 78 – Primer ABBCBCABABCAAB C=A P = BC Korak 1 2 3 4 POS 1 2 3 5 Izlaz (0, A) (0, B) (2, C) (3, A) POS = 5 Rečnik A B BC BCA
LZ 78 – Primer ABBCBCABABCAAB C=A P=B Korak 1 2 3 4 5 POS 1 2 3 5 8 Izlaz (0, A) (0, B) (2, C) (3, A) (2, A) POS = 8 Rečnik A B BC BCA BA
LZ 78 – Primer ABBCBCABABCAAB C=A P = BCA Korak 1 2 3 4 5 6 POS 1 2 3 5 8 10 Izlaz (0, A) (0, B) (2, C) (3, A) (2, A) (4, A) POS = 10 Rečnik A B BC BCA BA BCAA
LZ 78 – Primer ABBCBCABABCAAB C=B P = BCAA Korak 1 2 3 4 5 6 7 POS 1 2 3 5 8 10 14 Izlaz (0, A) (0, B) (2, C) (3, A) (2, A) (4, A) (6, B) POS = 14 Rečnik A B BC BCA BA BCAAB
LZ 78 – dekompresija <(0, A)><(0, B)><(2, C)><(3, A)><(2, A)><(4, A)><(6, B)> A Korak POS 1 1 Ulaz (0, A) Izlaz A Rečnik A
LZ 78 – dekompresija <(0, A)><(0, B)><(2, C)><(3, A)><(2, A)><(4, A)><(6, B)> AB Korak POS 1 1 2 2 Ulaz (0, A) (0, B) Izlaz A B Rečnik A B
LZ 78 – dekompresija <(0, A)><(0, B)><(2, C)><(3, A)><(2, A)><(4, A)><(6, B)> ABBC Korak 1 2 3 POS 1 2 3 Ulaz (0, A) (0, B) (2, C) Izlaz A B BC Rečnik A B BC
LZ 78 – dekompresija <(0, A)><(0, B)><(2, C)><(3, A)><(2, A)><(4, A)><(6, B)> ABBCBCA Korak 1 2 3 4 POS 1 2 3 5 Ulaz (0, A) (0, B) (2, C) (3, A) Izlaz A B BC BCA Rečnik A B BC BCA
LZ 78 – dekompresija <(0, A)><(0, B)><(2, C)><(3, A)><(2, A)><(4, A)><(6, B)> ABBCBCABA Korak 1 2 3 4 5 POS 1 2 3 5 8 Ulaz (0, A) (0, B) (2, C) (3, A) (2, A) Izlaz A B BC BCA BA Rečnik A B BC BCA BA
LZ 78 – dekompresija <(0, A)><(0, B)><(2, C)><(3, A)><(2, A)><(4, A)><(6, B)> ABBCBCABABCAA Korak 1 2 3 4 5 6 POS 1 2 3 5 8 10 Ulaz (0, A) (0, B) (2, C) (3, A) (2, A) (4, A) Izlaz A B BC BCA BA BCAA Rečnik A B BC BCA BA BCAA
LZ 78 – dekompresija <(0, A)><(0, B)><(2, C)><(3, A)><(2, A)><(4, A)><(6, B)> ABBCBCABABCAAB Korak 1 2 3 4 5 6 7 POS 1 2 3 5 8 10 14 Ulaz (0, A) (0, B) (2, C) (3, A) (2, A) (4, A) (6, B) Izlaz A B BC BCA BA BCAAB Rečnik A B BC BCA BA BCAAB
LZ 78 – rečnik Predstavljanje preko stabla: 1 2 3 4 5 6 7 A B BC BCA BA BCAAB A 1 0 B 2 A 5 A C 3 A 4 6 B 7
LZW – primer (koder + dekoder) a Ulazni niz: b c a b c Izlaz: indeks nađene reči u rečniku Poslato: 1 Dekodirano: 2 3 5 a 5 b c a b Rečnik dekodera: Rečnik kodera: 1 a 6 bc 2 b 7 ca 3 c 8 aba 4 d a b 9 abc 4 d a b 5 5
Praktične realizacije ZIP: Najčešće DEFLATE (LZ 77 + Huffman) Ponekad: bzip 2, PPM (arithmetical), itd. GIF slike: LZW PNG: DEFLATE RAR: Neobjavljeno!! Nezvanično (LZSS + PPM, DEFLATE, …) 7 -ZIP: kao ZIP, poboljšan!!
Praktične realizacije JPEG:
“Korisna” redundansa? !? !
“Korisna” redundansa? !? ! Redundansa pomaže da se detektuju i/ili isprave greške (oštećenje medijuma, greške pri prenosu, itd. ) Svesno dodavanje “viška” informacija Cilj: Ispraviti što više grešaka sa minimalnom količinom unešene redundanse Detektovanje grešaka: CRC 32 (ZIP, RAR, mrežni protokoli, itd. ) MD 5, SHA (fajlovi sa interneta, passwordi, itd. ) Ispravljanje grešaka (zaštitni kodovi): Hammingov kod, LDPC kodovi, Turbo kodovi, Reed-Solomonovi kodovi, …
“Korisna” redundansa – primer
Kompresija – “viši nivo” Fajl (tekstualni): “ 1 4 9 16 25 36 49 … 10 000 000” ZIP: 425 k. B RAR: 381 k. B “Viši nivo”: 120 B Magija ? !? !? ! Ne: Kolmogorovljeva složenost!!! var f: text; i: integer; x: int 64; begin assign(f, 'brojevi. txt'); rewrite(f); for i: =1 to 99999 do begin x: =i; write(f, x*x, ' '); end; write(f, 100000); close(f); end.
CS @ PMF Osnovne akad. studije (Informatičar) – 3 godine Informacije o upisu: http: //www. pmf. ni. ac. rs/pmf/upis_rac. php Master akad. studije (Master informatičar) – 2 godine Doktorske akad. studije (Doktor nauka – računarske nauke) – 3 godine Naša orijentacija: Savremene tehnologije, Kako napisati DOBAR program Konstrukcija (dizajn) algoritama @
CS @ PMF Šta još nudimo: Rad na konkretnim projektima Rad u grupama Posebna pažnja najtalentovanijim studentima Aktivno učešće studenata u stručnim projektima i istraživački rad Ko treba da upiše naš fakultet: Svako ko voli programiranje Svako ko želi da nauči da programira Svako ko želi da kreira efikasan i koristan softver Svako ko je učestvovao na nekom takmičenju iz programiranja Svako ko želi da se zaposli bez problema
Teorija informacija i kodiranje Matematika + Tehnika + Programiranje Matematičke osnove teorije informacija Kompresija podataka (izvorno kodiranje) Zaštitno kodiranje Baza SVIH telekomunikacionih sistema!!! Na našem fakultetu: 1. god. MAS Računarske nauke (modul Upravljanje informacijama) Mogu da izaberu i studenti sa drugih studijskih programa
Hvala na pažnji!!!!
- Slides: 51