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 c d e f
Frecuencia
" en miles #
$% 1& 1' 1! ( %
) *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 #
!ariale
0 101 100 111 1101 1100
1
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 porue 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 #rol 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:
; ste el de la codificacin de longi$ud %ariale :
&
100
<!
1$
%<
'<
1$
0
0
1
1
a:$% b:1& f:% c:1' d:1! e:(
0
0
0
0 1 1
1
a:$%
b:1& c:1' d:1!
e:( f:%
0
0
0
0
0
1
1
1
1
100
%%
'% &0
1$
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 d
T
(c)la profundidad de la ho.a c en el 0rbol
>, entonces el n2mero de bits reueridos es :
4"># = f(c) d
T
(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.
Fa"e *) ' po"$eriore" : Fusionar hasta obtener un
slo 0rbol manteniendo la ordenacin creciente.
$
f:% e:( c:1' b:1& d:1! a:$%

%
c:1' b:1& d:1! a:$% 1$
f:% e:(
0 1
1$
f:% e:(
0 1
d:1! a:$% '%
c:1' b:1&
0 1
'%
c:1' b:1&
0 1
a:$% &0
d:1! 1$
f:% e:(
0 1
0 1
!
&0
d:1! 1$
f:% e:(
0 1
0 1
'%
c:1' b:1&
0 1
a:$% %%
0 1
a:$%
b:1&
bb:1
&
c:1' d:1!
e:( f:%
0
0
0
0
0
1
1
1
1
100
%%
'% &0
1$
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
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.
<
$
" c
,
/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 T-
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
(
$
x c
b
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--
*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
c
,
y
"
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 etiuetado con valores
naturales.
Se define el peso del camino p, con pDBv
0
,v
1
,v
'
, ...,v
S
C,
como la suma de los valores de las aristas ue lo
componen.
S
peso"p# D valor"R,v
iH1
,v
i
#
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 cualuier camino p tal ue peso"p# D
"u,v#.
-o" prolema" 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 : # : # VVIS!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 reuerir0 "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 peueVo, el
criterio de seleccin lo ele-ir0 como candidato e
inmediatamente pasar0 a formar parte de LGS>6S y
1%
se considerar0 ue su 96#7 es una distancia
definitiva.
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 etiueta 0.
= : 0 1 ' & $ % !IS&OS
$ ' % ' P 0 Q
$ 2 & ' & P0,1Q
$ 2 & 2 & < P0,1,&Q
1!
$ 2 % 2 & % P0,1,&,'Q
$ 2 % 2 % $ P0,1,&,',$Q
$ 2 % 2 % & 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