Está en la página 1de 18

CODIGOS DE HUFFMAN

Definicin : La codificacin de Huffman es una tcnica para la compresin de datos, ampliamente usada y muy efectiva Ejemplo : Fichero con 100.000 caracteres. Se sabe ue aparecen ! caracteres diferentes y la frecuencia de aparicin de cada uno de ellos es : a $% b 1& c 1' d 1! e ( f %

Frecuencia

" en miles #

) *mo codificar los caracteres para comprimir el espacio ocupado utili+ando un cdigo inario , Solucin 1 : *di-o de lon-itud fi.a /ara ! caracteres se necesitan & bits "&00000 bits#
Fija

000 001 010 011 100 101

Solucin 2 : *di-o de lon-itud variable en el ue los m0s frecuentes tienen el cdi-o m0s corto. 1estriccin : nin-2n cdi-o es prefi.o de otro. " ''$000 bits #
!aria le

101 100 111 1101 1100

3sta tcnica de codificacin se denomina cdigo prefijo. Codificacin : 4asta con concatenar el cdi-o de cada uno de los caracteres. Ejemplo : aabacd 001010100111 001010100111 De"codificacin : F0cil por ue nin-2n cdi-o es prefi.o de otro cdi-o 56 hay ambi-7edad. Ejemplo : 101011101111011100 badadcf 8 3s la 2nica posibilidad 9 Un #r ol inario es una forma de representar el cdi-o prefi.o ue simplifica el proceso de descodificacin : las hojas son los caracteres, el camino de la ra:+ a la ho.as con la interpretacin 0 a la i+ uierda y 1 a la derecha nos da el cdi-o de cada ho.a.

'

3ste ser:a el 0rbol binario de la codificacin de longi$ud fija: 0 0 %< 0 a:$% 1 b:1& 0 c:1' <! 1 '< 1 d:1! 0 1$ e:( 100 1 0 1$ 1 f:%

; ste el de la codificacin de longi$ud %aria le : 0 100 a:$% '% 0 c:1' 1 b:1& 0 f:% 1$ 1 e:( 0 1 0 %% 1 &0 1 d:1!

&

=ado & el 0rbol binario ue corresponde a una codificacin prefi.o, es f0cil averi-uar el n2mero de bits necesarios para codificar el fichero : /ara cada car0cter c diferente del alfabeto C ue aparece en el fichero, sea f(c) la frecuencia de c en la entrada, sea dT(c)la profundidad de la ho.a c en el 0rbol >, entonces el n2mero de bits re ueridos es : 4"># = f(c) dT(c) c C 4"># nos da el coste de >.

Algori$mo Greed'
Huffman invent un al-oritmo vora+ ue construye una codificacin prefi.o ptima. *onstruye un 0rbol binario de cdi-os de lon-itud variable de manera ascendente de modo ue ?MIN@ 4">#. Ejemplo de funcionamiento Fa"e () : *aracteres colocados en orden creciente de frecuencia. f:% e:( c:1' b:1& d:1! a:$%

Fa"e *) ' po"$eriore" : Fusionar hasta obtener un slo 0rbol manteniendo la ordenacin creciente.
$

c:1'

b:1& 0 f:%

1$ 1 e:(

d:1!

a:$%

1$ 0 f:% 1 e:(

d:1! 0 c:1'

'% 1 b:1&

a:$%

'% 0 c:1' 1 b:1& 0 f:% 0 1$

&0 1 d:1! 1 e:(

a:$%

a:$% '% 0 c:1'

0 1 b:1&

%% 0 1$ 0 f:%

1 &0 1 d:1! 1 e:(

0 100 a:$% '% 0 c:1'

1 0 1 b:1& bb:1 0 & f:% 1$ 1 e:( %% 1 &0 0 1 d:1!

Implemen$acin del algori$mo Se usa una cola de prioridad, Q, con clave la frecuencia lo ue permite seleccionar los dos ob.etos de la cola con la frecuencia m0s ba.a. 3l resultado de fusionar dos ob.etos es un nuevo ob.eto cuya frecuencia es la suma de frecuencias de los dos ob.etos fusionados.

funcin COD+HUF " * es con.ABcar,frecC #


Pre : C est! "ien constr#ido $ no es %acio &

n :D *E *6:D ordenarAcrecAporAfrec"*# E '( se ordena crecientemente por frec#encia el conj#nto de caracteres de la entrada (' F :D GnsertarAtodos "*6#E '( la cola contiene todos los elementos (' /ara iD1 hasta nH1 hacer +:D crearAob.eto"#E '( eleccin de los candidatos (' I :D i+ "+# :D primero"F#E F:D avan+ar"F#E y:D der"+# :D primero"F#E F:D avan+ar"F#E frec?+@ :D frec?I@ J frec?y@E '( act#ali)ar sol#cin (' F:D insertarAordenado " F, +#E fpara Post : Q contiene #n *nico elemento +#e es #n !r"ol de codificacin de prefijo ptimo & dev " primero"F## ffuncin
K

Demo"$racin de op$imalidad del cri$erio Sea T un 0rbol binario de codificacin ptimo. Sean " y c dos ho.as hermanas en T ue se encuentran a profundidad m0Iima. Sean , e $ dos ho.as de T tales ue son los ' caracteres del alfabeto C con la frecuencia m0s ba.a. 0rbol T , $ " c

Lamos a ver ue T, ue es un 0rbol ptimo, se puede transformar en otro 0rbol T--, tambin ptimo, en el ue los ' caracteres, I e $, con la frecuencia m0s ba.a ser0n ho.as hermanas ue estar0n a la m0Iima profundidad 3l 0rbol ue -enera el al-oritmo vora+ cumple eIactamente esa condicin.

<

/odemos suponer ue f?"@ f?c@ y ue f?,@ f?$@. Mdem0s, se puede deducir ue f?,@ f?"@ y f?$@ f?c@. Se puede construir un nuevo 0rbol, T-, en el ue se intercambia la posicin ue ocupan en T las ho.as " y ,.

0rbol Tb $ x c

4"># N 4">O# D f?c@.d>"c# N f?c@.d>O"c# D


c* c*

D f?,@.d>",# J f?"@.d>""# N f?,@.d>O",# N f?"@.d>O""# D D f?,@.d>",# J f?"@.d>""# N

f?,@.d> ""# Nf?"@.d> ",# D D " f?b@ N f?I@ # . " d>""# N d> ",# # 0
=e forma similar, se construye el 0rbol T-intercambiando c e $.

0rbol T--

" c , y

*on este intercambio tampoco se incrementa el coste y 4">O# 4">OO# 0. /or tanto, 4">OO# 4"># y como > es ptimo, entonces >OO tambin lo es y 4">OO# D 4">#. ; ya para acabar la demostracin :

10

Sea T un 0rbol binario ue representa un cdi-o prefi.o ptimo para un alfabeto C. *onsideremos ' ho.as hermanas, , e $, de T y sea ) el padre de ambas. *onsideremos ue la frecuencia de ) es f?+@ D f?I@ J f?y@.

3ntonces, el 0rbol T- D TNP,.$Q representa un cdi-o prefi.o ptimo para el alfabeto C- D C N P,. $Q P)Q. /recisamente eso es lo ue hace el al-oritmo vora+ : una ve+ ue ha fusionado los dos caracteres de frecuencia m0s ba.a, inserta un nuevo elemento en el alfabeto con su frecuencia y repite el proceso de seleccionar los dos elementos con frecuencia m0s ba.a ahora para un alfabeto con un elemento menos.

11

CAMINOS MINIMOS
Shortest-paths problem Definicione" Sea RD"L,3# un -rafo diri-ido y eti uetado con valores naturales. Se define el peso del camino p, con pDBv0,v1,v', ...,vSC, como la suma de los valores de las aristas ue lo componen. S peso"p# D

valor"R,v

iH1

,vi#

iD1 Se define el camino de peso m:nimo del vrtice # al % en /, con #,% L, con la si-uiente funcin : MINP peso"p# : u >v Q si hay camino de # a % "u,v# D en otro caso 3l camino m0s corto, camino m,nimo, de # a % en /, se define como cual uier camino p tal ue peso"p# D "u,v#. -o" pro lema" de camino" m,nimo" 1T 0in1le2so#rce shortest2paths pro"lem :

1'

3ncontrar el camino m0s corto entre un vrtice fi.ado, so#rce, y todos los vrtices restantes del -rafo. 'T 0in1le2destination shortest2paths pro"lem 3ncontrar el camino m0s corto desde todos los vrtices a uno fi.ado, destination. &T 0in1le2pair shortest2paths pro"lem : Fi.ados dos vrtices del -rafo, so#rce y destination, encontrar el camino m0s corto entre ellos. $T 3ll2pairs shortest2paths pro"lem : 3ncontrar el camino m0s corto entre los vrtices # y %, para todo par de vrtices del -rafo. El algori$mo de Dij."$ra /(0102 1esuelve el problema de encontrar el camino m0s corto entre un vrtice dado y todos los restantes del -rafo.

funcin DI34S&5A " - es -rafoE vAini es vrtice # dev " = es vector?1..n@ de naturales #
Pre : 1=(4.E) es #n 1rafo eti+#etado con %alores nat#rales diri1ido5 0e s#pone +#e el 1rafo est! implementado en #na matri) $ +#e M6i.j7 contiene el %alor de la arista +#e %a del %8rtice i al j $. si no ha$ arista. contiene el %alor infinito & /ara cada vL hacer =?v@ :D U?vAini, v@ fparaE
1&

=?vAini@:D 0E LGS>6S :D aVadir" con.untoAvacio, vAini #E Inv : # : # V VIS !S: 96#7 contiene la lon1it#d del camino m!s corto desde %2ini a # +#e no sale de 4I0T:0. es decir. el camino est! formado por %2ini $ #na serie de %8rtices todos ellos pertenecientes a 4I0T:0 e,cepto el propio #5 # : # VIS !S: 96#7 contiene la lon1it#d del camino m!s corto desde %2ini a # & W? XLGS>6SX B XLX HHHC u :D UG5GU6" =, uLLGS>6S #E '( el candidato es el %8rtice #4;4I0T:0 +#e tiene 9 m<nima (' LGS>6S :D LGS>6S PuQE /ara cada v suc"-,u# t. . v LLGS>6S hacer '( 3j#star 9 : =ecalc#lar los %alores para aplicar la f#ncin de seleccin so"re los candidatos +#e +#edan (' ? =?v@ C =?u@ J valor" -,u,v # HHHC =?v@ :D =?u@ J valor" -,u,v #E ?@ =?v@ =?u@ J valor " -,u,v # HHHC se-uir @ fparaE @ Post : # : #4: 96#7 contiene la lon1it#d del camino m!s corto desde %2ini a # +#e no sale de 4I0T:0. $ como 4I0T:0 $a contiene todos los %8rtices. se tienen en 9 las distancias m<nimas definiti%as &
1$

dev " = # ffuncin Co"$e /rafo implementado en matri) "n'#: 3l bucle ue iniciali+a el vector 9 cuesta "n#. 3l bucle principal efect2a n;1 iteraciones. *oste de cada iteracin : la obtencin del m:nimo, coste lineal, y el a.uste de 9 ue tambin es "n#. /rafo implementado con listas > ?eap de m<nimos ""nJX3X#.lo- n# : La construccin del Heap "n.lo- n#, Seleccionar el m:nimo cuesta "1#, *ada operacin de a.uste re uerir0 "lo- n#. 3n total se efectuan "X3|# operaciones de a.ustar =. "emostracin# Sea # un vrtice tal ue #LLGS>6S. Supon-amos ue 96#7 contiene informacin cierta, es decir, contiene la distancia m:nima entre el vrtice inicial y # si-uiendo por un camino ue slo contiene vrtices ue pertenecen a LGS>6S. Si # es el vrtice con el valor de 9 m0s pe ueVo, el criterio de seleccin lo ele-ir0 como candidato e inmediatamente pasar0 a formar parte de LGS>6S y
1%

se considerar0 definitiva.

ue su 96#7 es una distancia

Supon-amos ue no es *G31>6, es decir, ue eIiste un camino m0s corto, a2n no considerado, desde el vrtice inicial a # ue pasa por %, obviamente %LLGS>6S. Si % se encuentra en el camino m0s corto desde el vrtice inicial a #, 8 es ue =?v@B=?u@ 9 lo ue contradice la eleccin de #. siempre ue 9 conten-a informacin correcta, la funcin de seleccin eli-e un vrtice con un valor de 9 ya definitivo "nin-uno de los vrtices ue no est0n en LGS>6S lo-rar0n ue se redu+ca #. Ejemplo de funcionamien$o

0 ' &

' % !

1 1 1 1 ' '

$ 1 %

Lrtice inicial : vrtice con eti ueta 0. =: 0 $ $ $ 1 ' 2 2 ' % & & & ' ' 2 $ & & % < !IS&OS P0Q P0,1Q P0,1,&Q
1!

$ $ $

2 2 2

% % %

2 2 2

& % %

% $ &

P0,1,&,'Q P0,1,&,',$Q P0,1,&, ',$,%Q

5ECONS&5UCCION DE CAMINOS MINIMOS 3n primer lu-ar hay ue almacenar informacin para saber ue vrtices forman parte del camino de lon-itud m:nima ue parte del vrtice inicial.

funcin DI34S&5A+CAM " - es -rafoE vAini es vrtice # dev " =, *MUG56 es vector?1..n@ de natural #
Pre : la misma +#e 9I@A0T=3 & /ara cada vL hacer =?v@ :D U?vAini, v@E *MUG56?v@:D vAiniE fparaE =?vAini@:D 0E LGS>6S :D aVadir" con.untoAvacio, vAini #E W? XLGS>6SX B XLX HHHC u :D UG5GU6" =, uLLGS>6S #E LGS>6S :D LGS>6SPuQE /ara cada v suc"-,u# t. . v LLGS>6S hacer ? =?v@ C =?u@ J valor" -,u,v # HHHC =?v@ :D =?u@ J valor" -,u,v #E *MUG56?v@:D uE ?@ =?v@ =?u@ J valor " -,u,v # HHHC se-uir @ fparaE @
1K

Post : Ba misma de 9ijCstra $ # : #4: C3MIN:6#7 contiene el otro %8rtice de la *ltima arista del camino m<nimo de %2ini a #& dev " =, *MUG56 # ffuncin 3n se-undo lu-ar utili+ar un procedimiento recursivo, 5ECONS&5UI5, ue recibe el vrtice para el cual se uiere reconstruir el camino, %, y el vector *MUG56. funcin 5ECONS&5UI5 " v, vAini es vrticeE *MUG56 es vector?1..n@ de vrtices # dev " s es secuenciaAaristas # ? v D vAini HHHC s :D secuenciaAvaciaE ?@ v vAini HHHC u :D *MUG56?v@E s :D 5ECONS&5UI5" u,vAini,*MUG56#E s :D concatenar" s, "u, v# #E @ Post : s contiene las aristas del camino m<nimo desde %2ini a % & dev " s # ffuncin

1<

También podría gustarte