Algoritmy komprese dat Kanonický Huffmanův kód 1.3.2001 SWI072 Algoritmy komprese dat
SWI072 Algoritmy komprese dat Příklad a:11 d:14 c:13 27 b:12 f:26 e:24 23 47 100 53 1 1.3.2001 SWI072 Algoritmy komprese dat
SWI072 Algoritmy komprese dat Prefixové kódy Huffmanův kód Izomorfní kód Jiný optimální prefixový kód 1.3.2001 SWI072 Algoritmy komprese dat
Kanonický Huffmanův kód - větší příklad první[6] := 0; for i:=5 downto 1 do prvni[i]:=(prvni[i+1]+pocet[i+1])/2 1.3.2001 SWI072 Algoritmy komprese dat
SWI072 Algoritmy komprese dat Dekódování i:= 1; načti první bit do v; while v<první[i] do načti další bit a připoj ho do v; i++ od i = délka kódového slova v-první[i]= pořadí dekódovaného znaku v i-té skupině Příklad: vstup 00110 i=1, v=0 i = 2, v = 00 i = 3, v = 001 i = 4, v = 0011 i = 5, v = 00110 v-první[5]=6-4=2 3. znak se skupině s 5bitovými kódovými slovy 1.3.2001 SWI072 Algoritmy komprese dat
Kódování - výpočet délek kódových slov A.Sieminski(1988) n znaků - halda v poli A[1..2n] 5 9 11 13 20 17 25 A[n+1..2n] četnosti A[1..n] halda, A[i] obsahuje ukazatel, hodnota je tedy uložena v A[A[i]] 1.3.2001 SWI072 Algoritmy komprese dat
SWI072 Algoritmy komprese dat Algoritmus h:=n; najdi dvě nejmenší četnosti min1, min2; A[h]:=min1+min2; h--; halda se zmenší o 1 prvek 1.3.2001 SWI072 Algoritmy komprese dat
SWI072 Algoritmy komprese dat Příklad 1.3.2001 SWI072 Algoritmy komprese dat
Příklad - závěrečný stav Použití: velká abeceda rychlé dekódování 1.3.2001 SWI072 Algoritmy komprese dat