Sei sulla pagina 1di 38

Frmula de Cayley

De Wikipedia, la enciclopedia libre Saltar a: navegacin, bsqueda

Lista completa de todos los rboles con 2,3 y 4 vrtices etiquetados: rboles con 2 vrtices, rboles con 3 vrtices y rboles con 4 vrtices. En teora de grafos, la frmula de Cayley es un resultado llamado as en honor a Arthur Cayley, que establece que para cualquier entero positivo n, el nmero de rboles en n vrtices etiquetados es . Equivalentemente, la frmula cuenta el nmero de rboles de expansin de un grafo completo con vrtices etiquetados.

[editar] Demostracin
Se conocen muchas demostraciones para esta frmula. Una demostracin clsica utiliza el teorema de Kirchhoff. Las secuencias de Prfer otorgan una demostracin biyectiva de la frmula de Cayley. Otra demostracin biyectiva, de Andr Joyal, encuentra una demostracin uno-a-uno entre rboles de n vrtices con dos nodos distinguibles y [pseudobosque]]s dirigidos.

[editar] Historia
La frmula fue descubierta por Carl Wilhelm Borchardt en 1860, y demostrada a travs de un determinante. En una pequea nota de 1889, Cayley extendi la frmula en muchas direcciones, tomando en cuenta el grado de los vrtices. Aunque Cayley referenci el artculo original de Borchardt, es el nombre de "frmula de Cayley" el que se convirti en estndar dentro del campo.

rbol de expansin
De Wikipedia, la enciclopedia libre Saltar a: navegacin, bsqueda

Un rbol de expansin (aristas azules gruesas) de un grafo de rejilla. En el campo matemtico de la teora de grafos, un rbol de expansin T de un grafo conexo, no dirigido G es un rbol compuesto por todos los vrtices y algunas (quiz todas) de las aristas de G. Informalmente, un rbol de expansin de G es una seleccin de aristas de G que forman un rbol que cubre todos los vrtices. Esto es, cada vrtice est en el rbol, pero no hay ciclos. Por otro lado, todos los puentes de G deben estar contenidos en T. Un rbol de expansin o rbol recubridor de un grafo conexo G puede ser tambin definido como el mayor conjunto de aristas de G que no contiene ciclos, o como el mnimo conjunto de aristas que conecta todos los vrtices. En ciertos campos de la teora de grafos es til encontrar el mnimo rbol de expansin de un grafo ponderado. Tambin se han abordado otros problemas de optimizacin relacionados con los rboles de expansin, como el mximo rbol de expansin, el mximo rbol que cubre al menos k vrtices, el mnimo rbol de expansin con k aristas por vrtice como mximo (rbol de expansin de mnimo grado, MDST por sus siglas en ingls), el rbol de expansin con el mximo nmero de hojas (estrechamente relacionado con el problema del menos conjunto dominante y conexo), el rbol de expansin con el menor nmero de hojas (relacionado con el problema del camino hamiltoniano), el rbol de expansin de mnimo dimetro o el rbol de expansin de la mnima dilacin.

Contenido
[ocultar]

1 Ciclos fundamentales y cortes fundamentales

2 Bosques de expansin 3 Conteo de rboles de expansin 4 rboles de expansin uniforme 5 Algoritmos

[editar] Ciclos fundamentales y cortes fundamentales


Si se aade una sola arista a un rbol de expansin, se crea un ciclo: los ciclos de ese tipo se denominan ciclos fundamentales. Hay un ciclo fundamental distinto para cada arista; es decir, hay una correspondencia biyectiva (uno a uno) entre ciclos fundamentales y aristas ausentes del rbol de expansin. Para un grafo conexo con V vrtices, cualquier rbol de expansin tiene V-1 aristas, y as, un grafo con E aristas tiene E-V+1 ciclos fundamentales. En cualquier rbol de expansin dado, esos ciclos forman una base del espacio de ciclos. De manera dual a la nocin de ciclo fundamental, existe el concepto de corte fundamental. Al eliminar una arista del rbol de expansin, los vrtices se dividen en dos conjuntos disjuntos (desconectados). El corte fundamental se define como el conjunto de aristas que deben ser eliminados de un grafo G para llegar a la misma divisin. Por tanto, hay exactamente V-1 cortes fundamentales en un grafo, uno por cada arista del rbol de expansin. La dualidad entre cortes y ciclos fundamentales se manifiesta al observar que las aristas de un ciclo que no pertenece al rbol de expansin slo pueden aparecer en los cortes de otras aristas del ciclo, y viceversa: las aristas en un corte slo pueden aparecer en aquellos ciclos no contenidos en la arista correspondiente al corte.

[editar] Bosques de expansin


Un bosque de expansin es un tipo de subgrafo que generaliza el concepto de rbol de expansin. Hay dos definiciones de uso comn:

Segn la primera, un bosque de expansin es un subgrafo que consiste en un rbol de expansin en cada componente conexo del grafo (equivalentemente, es un subgrafo libre de ciclos maximal). Esta definicin es frecuente en informtica y optimizacin, as como la que se emplea habitualmente al tratar los bosques mnimos de expansin, la generalizacin a subgrafos disconexos de rboles de expansin minimales. Otra definicin, empleada en teora de grafos, es la de un bosque de expansin es un subgrafo que es a la vez bosque (es decir, no contiene ciclos) y de expansin (es decir, incluye a todos los vrtices).

[editar] Conteo de rboles de expansin

El nmero t(G) de rboles de expansin de un grafo conexo es un invariante importante. En algunos casos, es fcil calcular t(G) directamente, y es un elemento de uso frecuente en estructuras de datos en distintos lenguajes de programacin. Trivialmente, si G es un rbol, entonces t(G)=1. Si G es un ciclo entonces t(G)=n. con n vrtices,

Para un grafo genrico G, el nmero t(G) puede obtenerse a travs del teorema de matriz-rbol de Kirchhoff. La frmula de Cayley es una frmula para obtener el nmero de rboles de expansin en un grafo completo con n vrtices. La frmula establece que . Otra prueba de la frmula de Cayley es la existencia de exactamente rboles etiquetados con n vrtices. La frmula de Cayley puede ser demostrada mediante el teorema de matriz-rbol de Kirchhoff o mediante el cdigo de Prfer. Si G es un grafo completo bipartido G es el grafo hipercbico n-dimensions , entonces se cumple , entonces se verifica que . Si

. Estas frmulas son tambin corolarios del teorema matriz-rbol. Si G es un multigrafo y e es una arista de G, entonces el nmero t(G) satisface la recurrencia de supresin-contraccin:

donde G-e es el multigrafo que se obtiene al eliminar la arista e, y G/e es la contraccin de G sobre e, en la que las mltiples aristas de esta contraccin no son eliminadas.

[editar] rboles de expansin uniforme


Un rbol de expansin escogido aleatoriamente, con igual probabilidad, entre todos los rboles de expansin se denomina rbol de expansin uniforme (AEU). Este modelo ha sido ampliamente investigado en los mbitos de la Probabilidad y la Fsica matemtica.

[editar] Algoritmos
El algoritmo clsico para los rboles de expansin, Depth-First Search (DFS, bsqueda priorizando la profundidad en espaol), fue diseado por Robert Tarjan. Otro algoritmo relevante est basado en la bsqueda priorizando la amplitud (Breadth-First Search, BFS). Obtenido de http://es.wikipedia.org/w/index.php?title=%C3%81rbol_de_expansi%C3%B3n&oldid =53626144

Ver las calificaciones de la pgina

Evala este artculo


Qu es esto?

rbol binario de bsqueda


De Wikipedia, la enciclopedia libre Saltar a: navegacin, bsqueda Un rbol binario de bsqueda tambin llamados BST (acrnimo del ingls Binary Search Tree) es un tipo particular de rbol binario que presenta una estructura de datos en forma de rbol usada en informtica.

Contenido
[ocultar]

1 Descripcin 2 Operaciones o 2.1 Bsqueda o 2.2 Insercin o 2.3 Borrado o 2.4 Otras Operaciones o 2.5 Recorridos 3 Tipos de rboles binarios de bsqueda 4 Comparacin de rendimiento 5 Buscando el rbol binario de bsqueda ptimo 6 Vase tambin 7 Referencias 8 Enlaces externos

[editar] Descripcin
Un rbol binario de bsqueda (ABB) es un rbol binario definido de la siguiente forma:
Todo rbol vaco es un rbol binario de bsqueda. Un rbol binario no vaco, de raz R, es un rbol binario de bsqueda si: En caso de tener subrbol izquierdo, la raz R debe ser mayor que el valor mximo almacenado en el subrbol izquierdo, y que el subrbol izquierdo sea un rbol binario

de bsqueda. En caso de tener subrbol derecho, la raz R debe ser menor que el valor mnimo almacenado en el subrbol derecho, y que el subrbol derecho sea un rbol binario de bsqueda.

Un rbol binario de bsqueda de tamao 9 y profundidad 3, con raz 8 y hojas 1, 4, 7 y 13 Para una fcil comprensin queda resumido en que es un rbol binario que cumple que el subrbol izquierdo de cualquier nodo (si no est vaco) contiene valores menores que el que contiene dicho nodo, y el subrbol derecho (si no est vaco) contiene valores mayores. Para estas definiciones se considera que hay una relacin de orden establecida entre los elementos de los nodos. Que cierta relacin est definida, o no, depende de cada lenguaje de programacin. De aqu se deduce que puede haber distintos rboles binarios de bsqueda para un mismo conjunto de elementos. La altura h en el peor de los casos siempre el mismo tamao que el nmero de elementos disponibles. Y en el mejor de los casos viene dada por la expresin , donde ceil indica redondeo por exceso. El inters de los rboles binarios de bsqueda (ABB) radica en que su recorrido en inorden proporciona los elementos ordenados de forma ascendente y en que la bsqueda de algn elemento suele ser muy eficiente. Dependiendo de las necesidades del usuario que trate con una estructura de este tipo se podr permitir la igualdad estricta en alguno, en ninguno o en ambos de los subrboles que penden de la raz. Permitir el uso de la igualdad provoca la aparicin de valores dobles y hace la bsqueda ms compleja. Un rbol binario de bsqueda no deja de ser un caso particular de rbol binario, as usando la siguiente especificacin de rbol binario en maude:
fmod ARBOL-BINARIO {X :: TRIV}is sorts ArbolBinNV{X} ArbolBin{X} .

subsort ArbolBinNV{X} < ArbolBin{X} . *** generadores op crear : -> ArbolBin{X} [ctor] . op arbolBin : X$Elt ArbolBin{X} ArbolBin{X} -> ArbolBinNV{X} [ctor] . endfm

podemos hacer la siguiente definicin para un rbol binario de bsqueda (tambin en maude):
fmod ARBOL-BINARIO-BUSQUEDA {X :: ORDEN} is protecting ARBOL-BINARIO{VOrden}{X} . sorts ABB{X} ABBNV{X} . subsort ABBNV{X} < ABB{X} . subsort ABB{X} < ArbolBin{VOrden}{X} . subsort ABBNV{X} < ArbolBinNV{VOrden}{X} . *** generadores op crear : -> ArbolBin{X} [ctor] . op arbolBin : X$Elt ArbolBin{X} ArbolBin{X} -> ArbolBinNV{X} [ctor] . endfm

con la siguiente teora de orden:


fth ORDEN is protecting BOOL . sort Elt . *** operaciones op _<_ : Elt Elt -> Bool . endfth

para que un rbol binario pertenezca al tipo rbol binario de bsqueda debe cumplir la condicin de ordenacin siguiente que ira junto al mdulo ARBOL-BINARIOBUSQUEDA:
var R : X$Elt . vars INV DNV : ABBNV{X} . vars I D : ABB{X} . mb crear : ABB{X} . mb arbolBin(R, crear, crear) : ABBNV{X} . cmb arbolBin(R, INV, crear) : ABBNV{X} if R > max(INV) . cmb arbolBin(R, crear, DNV) : ABBNV{X} if R < min(DNV) . cmb arbolBin(R, INV, DNV) : ABBNV{X} if (R > max(INV)) and (R < min(DNV)) . ops min max : ABBNV{X} -> X$Elt . eq min(arbolBin(R, crear, D)) = R . eq min(arbolBin(R, INV, D)) = min(INV) . eq max(arbolBin(R, I, crear)) = R . eq max(arbolBin(R, I, DNV)) = max(DNV) .

[editar] Operaciones
Todas las operaciones realizadas sobre rboles binarios de bsqueda estn basadas en la comparacin de los elementos o clave de los mismos, por lo que es necesaria una subrutina, que puede estar predefinida en el lenguaje de programacin, que los compare y pueda establecer una relacin de orden entre ellos, es decir, que dados dos elementos

sea capaz de reconocer cual es mayor y cual menor. Se habla de clave de un elemento porque en la mayora de los casos el contenido de los nodos ser otro tipo de estructura y es necesario que la comparacin se haga sobre algn campo al que se denomina clave.

[editar] Bsqueda
La bsqueda consiste acceder a la raz del rbol, si el elemento a localizar coincide con ste la bsqueda ha concluido con xito, si el elemento es menor se busca en el subrbol izquierdo y si es mayor en el derecho. Si se alcanza un nodo hoja y el elemento no ha sido encontrado se supone que no existe en el rbol. Cabe destacar que la bsqueda en este tipo de rboles es muy eficiente, representa una funcin logartmica. El maximo nmero de comparaciones que necesitaramos para saber si un elemento se encuentra en un rbol binario de bsqueda estara entre [log2(N+1)] y N, siendo N el nmero de nodos. La bsqueda de un elemento en un ABB (rbol Binario de Bsqueda) se puede realizar de dos formas, iterativa o recursiva. Ejemplo de versin iterativa en el lenguaje de programacin C, suponiendo que estamos buscando una clave alojada en un nodo donde est el correspondiente "dato" que precisamos encontrar:
data Buscar_ABB(abb t,clave k) { abb p; dato e; e=NULL; p=t; if (!estaVacio(p)) { while (!estaVacio(p) && (p->k!=k) ) { if (k < p->k) { p=p->l; } if (p->k < k) { p=p->r; } } if (!estaVacio(p) &&(p->d!=NULL) ) { e=copiaDato(p->d); } } return e; }

Vase ahora la versin recursiva en ese mismo lenguaje:


int buscar(tArbol *a, int elem) { if (a == NULL) return 0; else if (a->clave < elem) return buscar(a->hDerecho, elem); else if (a->clave > elem)

return buscar(a->hIzquierdo, elem); else return 1; }

Otro ejemplo en Python:


def search_binary_tree(node, key): if node is None: return None # not found if key < node.key: return search_binary_tree(node.left, key) else if key > node.key: return search_binary_tree(node.right, key) else: return node.value

En Pascal:
Function busqueda(T:ABR, y: integer):ABR begin if (T=nil) or (^T.raiz=y) then busqueda:=T; else if (^T.raiz<y) then busqueda:=busqueda(^T.dch,y); else busqueda:=busqueda(^T.izq,y); end;

Una especificacin en maude para la operacin de bsqueda quedara de la siguiente forma:


op esta? : X$Elt ABB{X} -> Bool . var R R1 R2 : X$Elt . vars I D : ABB{X} . eq esta?(R, crear) = false . eq esta?(R1, arbolBin(R2, I, D)) = if R1 == R2 then true else if R1 < R2 then esta?(R1, I) else esta?(R1, D) fi fi .

[editar] Insercin
La insercin es similar a la bsqueda y se puede dar una solucin tanto iterativa como recursiva. Si tenemos inicialmente como parmetro un rbol vaco se crea un nuevo nodo como nico contenido el elemento a insertar. Si no lo est, se comprueba si el elemento dado es menor que la raz del rbol inicial con lo que se inserta en el subrbol izquierdo y si es mayor se inserta en el subrbol derecho. De esta forma las inserciones se hacen en las hojas.

Evolucin de la insercin del elemento "5" en un ABB. Como en el caso de la bsqueda puede haber varias variantes a la hora de implementar la insercin en el TAD (Tipo Abstracto de Datos), y es la decisin a tomar cuando el elemento (o clave del elemento) a insertar ya se encuentra en el rbol, puede que ste sea modificado o que sea ignorada la insercin. Es obvio que esta operacin modifica el ABB perdiendo la versin anterior del mismo. A continuacin se muestran las dos versiones del algoritmo en pseudolenguaje, iterativa y recursiva, respectivamente.
PROC InsertarABB(rbol:TABB; dato:TElemento) VARIABLES nuevonodo,pav,pret:TABB clavenueva:Tclave ele:TElemento INICIO nuevonodo <- NUEVO(TNodoABB) nuevonodo^.izq <- NULO nuevonodo^.der <- NULO nuevonodo^.elem <- dato SI ABBVaco (rbol) ENTONCES rbol <- nuevonodo ENOTROCASO clavenueva <- dato.clave pav <- rbol // Puntero Avanzado pret <- NULO // Puntero Retrasado MIENTRAS (pav <- NULO) HACER pret <- pav ele = pav^.elem SI (clavenueva < ele.clave ) ENTONCES pav <- pav^.izq EN OTRO CASO pav <- pav^.dch FINSI FINMIENTRAS ele = pret^.elem SI (clavenueva < ele.clave ) ENTONCES pret^.izq <- nuevonodo EN OTRO CASO pret^.dch <- nuevonodo FINSI FINSI

FIN PROC InsertarABB(rbol:TABB; dato:TElemento) VARIABLES ele:TElemento INICIO SI (ABBVaco(rbol)) ENTONCES rbol <- NUEVO(TNodoABB) rbol^.izq <- NULO rbol^.der <- NULO rbol^.elem <- dato EN OTRO CASO ele = InfoABB(rbol) SI (dato.clave < ele.clave) ENTONCES InsertarABB(rbol^.izq, dato) EN OTRO CASO InsertarABB(rbol^.dch, dato) FINSI FINSI FIN

Se ha podido apreciar la simplicidad que ofrece la versin recursiva, este algoritmo es la traduccin en C. El rbol es pasado por referencia para que los nuevos enlaces a los subrboles mantengan la coherencia.
void insertar(tArbol **a, int elem) { if (*a == NULL) { *a = (tArbol *) malloc(sizeof(tArbol)); (*a)->clave = elem; (*a)->hIzquierdo = NULL; (*a)->hDerecho = NULL; } else if ((*a)->clave < elem) insertar(&(*a)->hDerecho, elem); else if ((*a)->clave > elem) insertar(&(*a)->hIzquierdo, elem); }

Ejemplo en Python:
def binary_tree_insert(node, key, value): if node is None: return TreeNode(None, key, value, None) if key == node.key: return TreeNode(node.left, key, value, node.right) if key < node.key: return TreeNode(binary_tree_insert(node.left, key, value), node.key, node.value, node.right) else: return TreeNode(node.left, node.key, node.value, binary_tree_insert(node.right, key, value))

Otro ejemplo en Pascal:


Procedure Insercion(var T:ABR, y:integer) var ultimo:ABR; actual:ABR;

nuevo:ABR; begin ultimo:=nil; actual:=T; while (actual<>nil) do begin ultimo:=actual; if (^actual.raiz<y) then actual:=^actual.dch; else actual:=^actual.izq; end; new(nuevo); ^nuevo.raiz:=y; ^nuevo.izq:=nil; ^nuevo.dch:=nil; if ultimo=nil then T:=nuevo; else if ^ultimo.raiz<y then ^ultimo.dch:=nuovo; else ^ultimo.izq:=nuevo; end;

Vase tambin un ejemplo de algoritmo recursivo de insercin en un ABB en el lenguaje de programacin Maude:
op insertar : X$Elt ABB{X} -> ABBNV{X} . var R R1 R2 : X$Elt . vars I D : ABB{X} . eq insertar(R, crear) = arbolBin(R, crear, crear) . eq insertar(R1, arbolBin(R2, I, D)) = if R1 < R2 then arbolBin(R2, insertar(R1, I), D) else arbolBin(R2, I, insertar(R1, D)) fi .

La operacin de insercin requiere, en el peor de los casos, un tiempo proporcional a la altura del rbol.

[editar] Borrado
La operacin de borrado no es tan sencilla como las de bsqueda e insercin. Existen varios casos a tener en consideracin:

Borrar un nodo sin hijos nodo hoja: simplemente se borra y se establece a nulo el apuntador de su padre.

Nodo a eliminar 74

Borrar un nodo con un subrbol hijo: se borra el nodo y se asigna su subrbol hijo como subrbol de su padre.

Nodo a eliminar 70

Borrar un nodo con dos subrboles hijo: la solucin est en reemplazar el valor del nodo por el de su predecesor o por el de su sucesor en inorden y posteriormente borrar este nodo. Su predecesor en inorden ser el nodo ms a la derecha de su subrbol izquierdo (mayor nodo del subarbol izquierdo), y su sucesor el nodo ms a la izquierda de su subrbol derecho (menor nodo del subarbol derecho). En la siguiente figura se muestra cmo existe la posibilidad de realizar cualquiera de ambos reemplazos:

Nodo a eliminar 59 El siguiente algoritmo en C realiza el borrado en un ABB. El procedimiento reemplazar busca la mayor clave del subrbol izquierdo y la asigna al nodo a eliminar.
void reemplazar(tArbol **a, tArbol **aux); /*Prototipo de la funcion ''reemplazar''*/ void borrar(tArbol **a, int elem) { tArbol *aux; if (*a == NULL) return; if ((*a)->clave < elem)

borrar(&(*a)->hDerecho, elem); else if ((*a)->clave > elem) borrar(&(*a)->hIzquierdo, elem); else if ((*a)->clave == elem) { aux = *a; if ((*a)->hIzquierdo == NULL) *a = (*a)->hDerecho; else if ((*a)->hDerecho == NULL) *a = (*a)->hIzquierdo; else reemplazar(&(*a)->hIzquierdo, &aux); free(aux); } } void reemplazar(tArbol **a, tArbol **aux) { if ((*a)->hDerecho == NULL) { (*aux)->clave = (*a)->clave; *aux = *a; *a = (*a)->hIzquierdo; } else reemplazar(&(*a)->hDerecho, aux); }

Otro ejemplo en Pascal.


Procedure Borrar(var T:ABR, x:ABR) var aBorrar:ABR; anterior:ABR; actual:ABR; hijo:ABR; begin if (^x.izq=nil) or (^x.dch=nil) then aBorrar:=x; else aBorrar:=sucesor(T,x); actual:=T; anterior:=nil; while (actual<>aBorrar) do begin anterior:=actual; if (^actual.raiz<^aBorrar.raiz) then actual:=^actual.dch; else actual:=^actual.izq; end; if (^actual.izq=nil) then hijo:=^actual.dch; else hijo:=^actual.izq; if (anterior=nil) then T:=hijo; else if (^anterior.raiz<^actual.raiz) then ^anterior.dch:=hijo;

else ^anterior.izq:=hijo; if (aBorrar<>x) then ^x.raiz:=^aBorrar.raiz; free(aBorrar); end;

Vase tambin un ejemplo de algoritmo recursivo de borrado en un ABB en el lenguaje de programacin Maude, considerando los generadores crear y arbolBin. Esta especificacin hace uso de la componente clave a partir de la cual se ordena el rbol.
op eliminar : X$Elt ABB{X} -> ABB{X} . varS R M : X$Elt . vars I D : ABB{X} . vars INV DNV : ABBNV{X} . ops max min : ArbolBin{X} -> X$Elt . eq min(arbolBin(R, crear, D)) = R . eq max(arbolBin(R, I, crear)) = R . eq min(arbolBin(R, INV, D)) = min(INV) . eq max(arbolBin(R, I, DNV )) = max(DNV) . eq eliminar(M, crear) = crear . ceq eliminar(M, arbolBin(R, crear, D)) = D if M == clave(R) . ceq eliminar(M, arbolBin(R, I, crear)) = I if M == clave(R) . ceq eliminar(M, arbolBin(R, INV, DNV)) = arbolBin(max(INV), eliminar(clave(max(INV)), INV), DNV) if M == clave(R) . ceq eliminar(M, arbolBin(R, I, D)) = arbolBin(R, eliminar(M, I), D) if M < clave(R) . ceq eliminar(M, arbolBin(R, I, D)) = arbolBin(R, I, eliminar(M, D)) if clave(R) < M .

[editar] Otras Operaciones


Otra operacin sera por ejemplo comprobar que un rbol binario es un rbol binario de bsqueda. Su implementacin en maude es la siguiente:
op esABB? : ABB{X} -> Bool . var R : X$Elt . vars I D : ABB{X} . eq esABB?(crear) = true . eq esABB?(arbolbBin(R, I, D)) = (Max(I) < R) and (Min(D) > R) and (esABB?(I)) and (esABB?(D)) .

[editar] Recorridos
Se puede hacer un recorrido de un rbol en profundidad o en anchura. Los recorridos en anchura son por niveles, se realiza horizontalmente desde la raz a todos los hijos antes de pasar a la descendencia de alguno de los hijos. El recorrido en profundidad lleva al camino desde la raz hacia el descendiente ms lejano del primer hijo y luego contina con el siguiente hijo. Como recorridos en profundidad tenemos inorden, preorden y postorden.

Una propiedad de los ABB es que al hacer un recorrido en profundidad inorden obtenemos los elementos ordenados de forma ascendente.

Ejemplo rbol binario de bsqueda Resultado de hacer el recorrido en: Inorden = [6, 9, 13, 14, 15, 17, 20, 26, 64, 72]. Preorden = [15, 9, 6, 14, 13, 20, 17, 64, 26, 72]. Postorden =[6, 13, 14, 9, 17, 26, 72, 64, 20, 15].

Recorridos en Visual Basic .Net


'funcion de recorrido en PREORDEN Public Function preorden() As String cadenasalida = "" rePreorden(raiz) Return cadenasalida End Function Private Sub rePreorden(ByVal padre As Nodo) If IsNothing(padre) Then Return End If cadenasalida = cadenasalida & "-" & padre.dato rePreorden(padre.ant) rePreorden(padre.sig) End Sub 'funcion de recorrido en POSTORDEN Public Function postorden() As String cadenasalida = "" reposorden(raiz) Return cadenasalida End Function Private Sub repostorden(ByVal padre As Nodo) If IsNothing(padre) Then Return End If repostorden(padre.ant) repostorden(padre.sig) cadenasalida = cadenasalida & "-" & padre.dato End Sub 'funcion de recorrido en INORDEN

Public Function inorden() As String cadenasalida = "" reinorden(raiz) Return cadenasalida End Function Private Sub reinorden(ByVal padre As Nodo) If IsNothing(padre) Then Return End If reinorden(padre.ant) cadenasalida = cadenasalida & "-" & padre.dato reinorden(padre.sig) End Sub

Recorridos en C con funciones recursivas


struct Nodo{ char nombre[30]; struct Nodo *izq; struct Nodo *der; }; typedef struct Nodo Nodo; typedef Nodo *Arbol; void preOrden(Arbol abb){ if(abb) { printf("%s\n", abb->nombre); preOrden(abb->izq); preOrden(abb->der); } } void postOrden(Arbol abb){ if(abb) { postOrden(abb->izq); postOrden(abb->der); printf("%s\n", abb->nombre); } } void inOrden(Arbol abb){ if(abb) { inOrden(abb->izq); printf("%s\n", abb->nombre); inOrden(abb->der); } }

[editar] Tipos de rboles binarios de bsqueda

Hay varios tipos de rboles binarios de bsqueda. Los rboles AVL, rbol rojo-negro, son rboles autobalanceables . Los rbol biselado son rboles tambin autobalanceables con la propiedad de que los elementos accedidos recientemente se acceder ms rpido en posteriores accesos. En el montculo como en todos los rboles binarios de bsqueda cada nodo padre tiene un valor mayor q sus hijos y adems es completo, esto es cuando todos los niveles estn llenos con excepcin del ltimo que puede no estarlo. Hay muchos tipos de rboles binarios de bsqueda. Los rboles AVL y los rbol rojonegro son ambos formas de rboles binarios de bsqueda autobalanceables. Un rbol biselado es un rbol binario de bsqueda que automticamente mueve los elementos a los que se accede frecuentemente cerca de la raz. En los montculos, cada nodo tambin mantiene una prioridad y un nodo padre tiene mayor prioridad que su hijo. Otras dos maneras de configurar un rbol binario de bsqueda podra ser como un rbol completo o degenerado. Un rbol completo es un rbol con "n" niveles, donde cada nivel d <= n-1; el nmero de nodos existentes en el nivel "d" es igual que 2d. Esto significa que todos los posibles nodos existen en esos niveles, no hay ningn hueco. Un requirimiento adicional para un rbol binario completo es que para el nivel "n", los nodos deben estar ocupados de izquierda a derecha, no pudiendo haber un hueco a la izquierda de un nodo ocupado. Un rbol degenerativo es un rbol que, para cada nodo padre, slo hay asociado un nodo hijo. Por lo que se comporta como una lista enlazada.

[editar] Comparacin de rendimiento


D. A. Heger(2004)1 realiza una comparacin entre los diferentes tipos de rboles binarios de bsqueda para encontrar que tipo nos dara el mejor rendimiento para cada caso. Los montculos se encuentran como el tipo de rbol binario de bsqueda que mejor resultado promedio da, mientras que los rboles rojo-negro los que menor rendimiento medio nos aporta.

[editar] Buscando el rbol binario de bsqueda ptimo


Si nosotros no tenemos en mente planificar un rbol binario de bsqueda, y sabemos exactamente como de frecuente sern visitados cada elemento podemos construir un rbol binario de bsqueda ptimo con lo que conseguiremos que la media de gasto generado a la hora de buscar un elemento sea minimizado. Asumiendo que conocemos los elementos y en qu nivel est cada uno, tambin conocemos la proporcin de futuras bsquedas que se harn para encontrar dicho elemento. Si es as, podemos usar una solucin basada en la programacin dinmica. En cambio, a veces slo tenemos la estimacin de los costes de bsqueda, como pasa con los sistemas que nos muestra el tiempo que ha necesitado para realizar una bsqueda. Un ejemplo, si tenemos un ABB de palabras usado en un corrector ortogrfico, deberamos balancear el rbol basado en la frecuencia que tiene una palabra en el Corpus lingstico, desplazando palabras como "de" cerca de la raz y palabras

como "vesnico" cerca de las hojas. Un rbol como tal podra ser comparado con los rboles Huffman que tratan de encontrar elementos que son accedidos frecuentemente cerca de la raz para producir una densa informacin; de todas maneras, los rboles Huffman slo puede guardar elementos que contienen datos en las hojas y estos elementos no necesitan ser ordenados. En cambio, si no sabemos la secuencia en la que los elementos del rbol van a ser accedidos, podemos usar rboles biselados que son tan buenos como cualquier rbol de bsqueda que podemos construir para cualquier secuencia en particular de operaciones de bsqueda. rboles alfabticos son rboles Huffman con una restriccin de orden adicional, o lo que es lo mismo, rboles de bsqueda con modificacin tal que todos los elementos son almacenados en las hojas.

[editar] Vase tambin


rbol (programacin) rbol Binario rbol AVL rbol 2-3 rbol B rbol Rojo-Negro rbol Splay rbol Multirrama

[editar] Referencias
1. Heger, Dominique A. (2004), A Disquisition on The Performance Behavior of Binary Search Tree Data Structures, European Journal for the Informatics Professional 5 (5), http://www.upgrade-cepis.org/issues/2004/5/up5-5Mosaic.pdf

[editar] Enlaces externos


rboles binarios de bsqueda en google Implementacin de rboles binarios de bsqueda en distintos lenguajes Aplicacin JAVA de rboles

Obtenido de http://es.wikipedia.org/w/index.php?title=%C3%81rbol_binario_de_b%C3%BAsqued a&oldid=53962142 Ver las calificaciones de la pgina

Evala este artculo


Qu es esto? Confiable Objetivo

Completo Bien escrito

Estoy muy bien informado sobre este tema (opcional) Enviar calificaciones Guardado correctamente Tu valoracin an no ha sido enviada Categora:

rboles (estructura)

Herramientas personales

Iniciar sesin / crear cuenta

Espacios de nombres

Artculo Discusin

Variantes Vistas

Leer Editar Ver historial

Acciones Buscar
Especial:Buscar

Navegacin

Portada Portal de la comunidad Actualidad Cambios recientes Pginas nuevas Pgina aleatoria Ayuda Donaciones Notificar un error

Imprimir/exportar

Crear un libro Descargar como PDF Versin para imprimir

Herramientas

Lo que enlaza aqu Cambios en enlazadas Subir archivo Pginas especiales Enlace permanente Citar este artculo Evala este artculo

En otros idiomas

Catal esky Dansk Deutsch English Suomi Franais Bahasa Indonesia Italiano Nederlands Polski Portugus Romn Slovenina Svenska Ting Vit Esta pgina fue modificada por ltima vez el 19 feb 2012, a las 20:07. El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0; podran ser aplicables clusulas adicionales. Lee los trminos de uso para ms informacin. Wikipedia es una marca registrada de la Fundacin Wikimedia, Inc., una organizacin sin nimo de lucro.

Contacto Poltica de privacidad Acerca de Wikipedia Limitacin de responsabilidad Versin para mviles

Montculo binario
De Wikipedia, la enciclopedia libre Saltar a: navegacin, bsqueda Para otros usos de este trmino, vase Montculo (desambiguacin). Los Montculos binarios (binary heaps en ingls) son un caso particular y sencillo de la estructura de datos Montculo, y est basada en un rbol binario balanceado, que puede verse como un rbol binario con dos restricciones adicionales: Propiedad de montculo Cada nodo contiene un valor superior al de sus hijos (para un montculo por mximos) o ms pequeo que el de sus hijos (para un montculo por mnimos). rbol semicompleto El rbol est balanceado y en un mismo nivel las inserciones se realizan de izquierda a derecha. Los montculos por mximos se utilizan frecuentemente para representar colas de prioridad. A continuacin se muestran dos montculos uno por mnimos y otro por mximos que representan el mismo conjunto de valores.
1 / 2 / \ 4 8 5 / \ / \ 9 10 11 \ 3 / \ 6 7 / 11 \ 9 10 / \ / \ 5 6 7 8 / \ / \ 1 2 3 4

El orden de los nodos hermanos en un montculo no est especificado en la propiedad de montculo, de manera que los subrboles de un nodo son intercambiables.

Contenido
[ocultar]

1 Operaciones sobre montculos o 1.1 Insercin de un elemento 1.1.1 Ejemplo o 1.2 Eliminacin del elemento mximo 2 Representacin de montculos 3 Enlaces externos

[editar] Operaciones sobre montculos


[editar] Insercin de un elemento
La insercin de un elemento se realiza agregando el elemento en la posicin que respeta la restriccin de rbol semicompleto pero posiblemente invalidando la propiedad de montculo, para luego remontar hacia la raz restaurando la propiedad de montculo por intercambio del valor de la posicin desordenada por el valor de su padre. Esta reorganizacin se realiza en tiempo O(log n). [editar] Ejemplo En el siguiente montculo por mximos la posicin donde se puede insertar est marcada con una letra X.
11 / 5 / \ / 3 4 X \ 8

Para insertar el valor 15 en este montculo, se inserta el valor en la posicin marcada con lo cual se invalida la propiedad de montculo dado que 15 es mayor que 8. Para restaurar la propiedad de montculo se intercambia primero el 15 con el 8, obtenindose el siguiente rbol:
11 / 5 / \ / 3 4 8 \ 15

Sin embargo, la propiedad de montculo todava no se cumple, dado que 15 es mayor que 11, de manera que hay que realizar un nuevo intercambio:
15 / 5 / \ / \ 11

4 8

El resultado si es un montculo por mximos.

[editar] Eliminacin del elemento mximo


Para borrar el elemento mximo del montculo, de la manera ms eficiente se puede tomar el elemento de la posicin que debe quedar vaca, colocndolo en la raz (as cumpliendo la propiedad de rbol completo), y luego intercambiar ese valor con el mximo de sus hijos hasta satisfacer la propiedad de montculo (si es de mximos), o intercambiarlo con el mnimo de sus hijos (si es de mnimos). Esta reorganizacin se puede realizar tambin en tiempo O(log n). Partiendo del mismo montculo que antes:
11 / 5 / \ 3 4 \ 8

Al eliminarse el 11, ste se remplaza por 4 (el valor del nodo que se debe eliminar):
4 / 5 / 3 \ 8

En este rbol no se cumple la propiedad de montculo dado que 8 es mayor que 4. Al intercambiarse estos dos valores se obtiene un montculo:

8 / 5 / 3 \ 4

[editar] Representacin de montculos


Si bien se puede utilizar un rbol binario para representar un montculo, la condicin de rbol completo permite representar fcilmente un montculo en un vector colocando los elementos por niveles y en cada nivel, los elementos de izquierda a derecha.

Un rbol binario completo guardado como arrreglo

Dado que el rbol es completo, no es necesario almacenar apuntadores en el rbol. Siempre se puede calcular la posicin de los hijos o la del padre a partir de la posicin de un nodo en el arreglo (contando las posiciones del arreglo a partir de cero):

El nodo raz se almacena en la posicin 0 del arreglo. Los hijos de un nodo almacenado en la posicin k se almacenan en las posiciones 2k+1 y 2k+2 respectivamente.

Se deduce que el padre de un nodo que est en la posicin k (k>0) est almacenado en la posicin ((k-1) div 2).

[editar] Enlaces externos


http://mathworld.wolfram.com/Heap.html http://www.policyalmanac.org/games/binaryHeaps.htm

Obtenido de http://es.wikipedia.org/w/index.php?title=Mont%C3%ADculo_binario&oldid=405184 95 Ver las calificaciones de la pgina

Evala este artculo


Qu es esto? Confiable Objetivo Completo Bien escrito

Estoy muy bien informado sobre este tema (opcional) Enviar calificaciones Guardado correctamente Tu valoracin an no ha sido enviada Categora:

rboles (estructura)

Herramientas personales

Iniciar sesin / crear cuenta

Espacios de nombres

Artculo Discusin

Variantes Vistas

Leer Editar Ver historial

Acciones Buscar
Especial:Buscar

Navegacin

Portada Portal de la comunidad Actualidad Cambios recientes Pginas nuevas Pgina aleatoria Ayuda Donaciones Notificar un error

Imprimir/exportar

Crear un libro Descargar como PDF Versin para imprimir

Herramientas

Lo que enlaza aqu Cambios en enlazadas Subir archivo Pginas especiales Enlace permanente Citar este artculo Evala este artculo

En otros idiomas

Deutsch English Polski Esta pgina fue modificada por ltima vez el 25 sep 2010, a las 02:53.

El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0; podran ser aplicables clusulas adicionales. Lee los trminos de uso para ms informacin. Wikipedia es una marca registrada de la Fundacin Wikimedia, Inc., una organizacin sin nimo de lucro. Contacto Poltica de privacidad Acerca de Wikipedia Limitacin de responsabilidad Versin para mviles

Codificacin Huffman
De Wikipedia, la enciclopedia libre Saltar a: navegacin, bsqueda

rbol de Huffman generado para las frecuencias de apariciones exactas del texto "Esto es un ejemplo de rbol de Huffman". las frecuencias y cdigos de cada carcter se muestran abajo. Codificar esta frase usando este cdigo requiere 156 bits, sin contar con el espacio para el rbol. Carcter Frecuencia Cdigo Espacio 8 00 E 6 100 N 3 1100 O 3 1110 U 2 0100 A 2 0101 D 2 1010 F 2 1011

L M S B H J P R T

2 2 2 1 1 1 1 1 1

0110 0111 11010 110110 110111 111100 111101 111110 111111

En ciencias de la computacin y teora de la informacin, la codificacin Huffman es un algoritmo usado para compresin de datos. El trmino se refiere al uso de una tabla de cdigos de longitud variable para codificar un determinado smbolo (como puede ser un caracter en un archivo), donde la tabla ha sido rellenada de una manera especfica basndose en la probabilidad estimada de aparicin de cada posible valor de dicho smbolo. Fue desarrollado por David A. Huffman mientras era estudiante de doctorado en el MIT, y publicado en "A Method for the Construction of Minimum-Redundancy Codes". La codificacin Huffman usa un mtodo especfico para elegir la representacin de cada smbolo, que da lugar a un cdigo prefijo (es decir, la cadena de bits que representa a un smbolo en particular nunca es prefijo de la cadena de bits de un smbolo distinto) que representa los caracteres ms comunes usando las cadenas de bits ms cortas, y viceversa. Huffman fue capaz de disear el mtodo de compresin ms eficiente de este tipo: ninguna representacin alternativa de un conjunto de smbolos de entrada produce una salida media ms pequea cuando las frecuencias de los smbolos coinciden con las usadas para crear el cdigo. Posteriormente se encontr un mtodo para llevar esto a cabo en un tiempo lineal si las probabilidades de los smbolos de entrada (tambin conocidas como "pesos") estn ordenadas. Para un grupo de smbolos con una distribucin de probabilidad uniforme y un nmero de miembros que es potencia de dos, la codificacin Huffman es equivalente a una codificacin en bloque binaria, por ejemplo, la codificacin ASCII. La codificacin Huffman es un mtodo para crear cdigos prefijo tan extendido que el trmino "codificacin Huffman" es ampliamente usado como sinnimo de "cdigo prefijo", incluso cuando dicho cdigo no se ha producido con el algoritmo de Huffman. Aunque la codificacin de Huffman es ptima para una codificacin smbolo a smbolo dada una distribucin de probabilidad, su optimalidad a veces puede verse accidentalmente exagerada. Por ejemplo, la codificacin aritmtica y la codificacin LZW normalmente ofrecen mayor capacidad de compresin. Estos dos mtodos pueden agrupar un nmero arbitrario de smbolos para una codificacin ms eficiente, y en general se adaptan a las estadsticas de entrada reales. Este ltimo es til cuando las probabilidades no se conocen de forma precisa o varan significativamente dentro del flujo de datos.

Contenido
[ocultar]

1 Historia 2 Definicin del problema o 2.1 Descripcin informal o 2.2 Descripcin formal 2.2.1 Ejemplo 3 Tcnica bsica 4 Propiedades principales 5 Variaciones o 5.1 Cdigo Huffman n-ario o 5.2 Cdigo Huffman adaptable o 5.3 Algoritmo de Huffman de plantilla o 5.4 Cdigo de Huffman de tamao limitado o 5.5 Codificacin Huffman con costes desiguales o 5.6 rboles binarios alfabticos ptimos (codificacin Hu-Tucker) o 5.7 Cdigo cannico de Huffman 6 Aplicaciones 7 Ejemplo 8 Bibliografa 9 Vase tambin 10 Enlaces externos

[editar] Historia
En 1951, a David Huffman y sus compaeros de clase de la asignatura Teora de la Informacin se les permiti optar entre la realizacin de un examen final o la presentacin de un trabajo. El profesor Robert. M. Fano asign las condiciones del trbajo alto las condiciones del trabajo bajo la premisa de encontrar el cdigo binario ms eficiente. Huffman, ante la imposibilidad de demostrar qu cdigo era ms eficiente, se rindi y empez a estudiar para el examen final. Mientras estaba en este proceso vino a su mente la idea de usar rboles binarios de frecuencia ordenada y rpidamente prob que ste era el mtodo ms eficiente. Con este estudio, Huffman super a su profesor, quien haba trabajado con el inventor de la teora de la informacin Claude Shannon con el fin de desarrollar un cdigo similar. Huffman solucion la mayor parte de los errores en el algoritmo de codificacin Shannon-Fano. La solucin se basaba en el proceso de construir el rbol de abajo a arriba en vez de al contrario.

[editar] Definicin del problema


[editar] Descripcin informal
Dados

Un conjunto de smbolos y sus pesos (normalmente proporcionales a probabilidades). Encontrar Un cdigo binario prefijo (un conjunto de elementos del cdigo) con longitud de palabra esperada mnima (de forma equivalente, un rbol con longitud del camino mnima).

[editar] Descripcin formal


Entradas El alfabeto , que es el alfabeto de smbolos de tamao . El conjunto , que es el conjunto de pesos (positivos) de los smbolos (normalmente proporcionales a probabilidades), es decir . Salida El cdigo cdigo (binario), donde Objetivo , que es el conjunto de elementos del es la palabra del cdigo para .

Sea . Condicin: [editar] Ejemplo

la longitud del camino ponderado del cdigo para cualquier cdigo .

Smbolo (ai) a b c d e Peso (wi) 0.10 0.15 0.30 0.16 0.29 000 001 10 01 11 Palabras del cdigo (ci) Longitud de la palabra (en bits) 3 3 2 2 2 (li) Salida C Longitud del camino ponderado 0.30 0.45 0.60 0.32 0.58 (li wi ) Probabilidad 1/8 1/8 1/4 1/4 1/4 (2-li) Cantidad de informacin (en bits) 3.32 2.74 1.74 2.64 1.79 Optimalidad (log2 wi) Entropa 0.332 0.411 0.521 0.423 0.518 (wi log2 wi) Entrada (A, W)

Suma =1

L(C) = 2.25 = 1.00

H(A) = 2.205

Para cualquier cdigo biunvoco, aqul cdigo decodificable de forma nica, la suma de las probabilidades de todos los smbolos es siempre menor o igual que uno. En este ejemplo, es exactamente igual a uno; por lo que decimos que es un cdigo completo. Si no es el caso siempre se puede derivar un cdigo equivalente aadiendo smbolos extra (con probabilidades nulas asociadas), para hacer el cdigo completo a la vez que se mantiene biunvoco. Tal como defini Shannon (1948), la cantidad de informacin h (en bits) de cada smbolo ai con probabilidad no nula es

La entropa H (en bits) es la suma ponderada, de todos los smbolos ai con probabilidad no nula wi, de la cantidad de informacin de cada smbolo:

(Nota: un smbolo con probabilidad cero tiene una contribucin nula a la entropa. Cuando w = 0, L'Hpital : es una indeterminacin; aplicando la regla de

. Por simplicidad, los smbolos con probabilidad nula han sido dejados fuera de la frmula anterior). Como consecuencia del teorema de codificacin de fuente de Shannon, la entropa es una medida de la longitud de palabra ms pequea del cdigo que es tericamente posible para un alfabeto dado con unos pesos asociados. En este ejemplo, la longitud media de la palabra es 2,25 bits por smbolo, ligeramente mayor que la entropa calculada de 2,205 bits por smbolo. As que no slo este cdigo es ptimo en el sentido de que ningn otro cdigo posible funciona mejor, sino que adems est muy cercano al lmite terico establecido por Shannon. Ntese que, en general, un cdigo Huffman no necesita ser nico, pero si lo es siempre es uno de los cdigos que minimiza .

[editar] Tcnica bsica


La tcnica utilizada es el propio algoritmo de Huffman. Consiste en la creacin de un rbol binario en el que se etiquetan los nodos hoja con los caracteres, junto a sus frecuencias, y de forma consecutiva se van uniendo cada pareja de nodos que menos frecuencia sumen, pasando a crear un nuevo nodo intermedio etiquetado con dicha

suma. Se procede a realizar esta accin hasta que no quedan nodos hoja por unir a ningn nodo superior , y se ha formado el rbol binario. Posteriormente se etiquetan las aristas que unen cada uno de los nodos con ceros y unos (hijo derecho e izquierdo, respectivamente, por ejemplo. El cdigo resultante para cada carcter es la lectura, siguiendo la rama, desde la raz hacia cada carcter (o viceversa) de cada una de las etiquetas de las aristas.

[editar] Propiedades principales


Las probabilidades usadas pueden ser genricas para el dominio de la aplicacin, que estn basadas en el caso promedio, o pueden ser las frecuencias reales encontradas en el texto que se est comprimiendo. (Esta variacin requiere que la tabla de frecuencias u otra estructura utilizada para la codificacin deben ser almacenadas con el texto comprimido; las implementaciones emplean varios mecanismos para almacenar tablas de manera eficiente). La codificacin Huffman es ptima cuando la probabilidad de cada smbolo de entrada es una potencia negativa de dos. Los cdigos prefijos tienden a ser ligeramente ineficientes en alfabetos pequeos, donde las probabilidades normalmente se encuentran entre esos puntos ptimos. El "empaquetado", o expansin del tamao del alfabeto concatenando mltiples smbolos en "palabras" de tamao fijo o variable antes de la codificacin Huffman, normalmente ayuda, especialmente cuando smbolos adyacentes estn correlacionados (como en el caso de un texto en lenguaje natural). El peor caso para una codificacin Huffman puede darse cuando la probabilidad de un smbolo excede 2-1 = 0.5, haciendo el lmite superior de ineficiencia ilimitado. Estas situaciones a menudo responden bien a una forma de paquete llamada codificacin run-length. La codificacin aritmtica produce una ligera ganancia sobre la codificacin Huffman, pero en la prctica esta ganancia raramente ha sido lo bastante grande como para utilizar la codificacin aritmtica que posee una complejidad computacional ms elevada y adems requiere el pago de royalties. (A julio de 2006, IBM posee patentes de muchos mtodos de codificacin aritmtica en varias jurisdicciones).

[editar] Variaciones
Existen muchas variaciones del cdigo de Huffman, algunos que utilizan Huffman como algoritmo, y otros que encuentra el cdigo prefijo ptimo. Tenga en cuenta que en este ltimo caso el mtodo no es necesariamente similar al de Huffmans y no tiene por qu terminar en tiempo polinmico.

[editar] Cdigo Huffman n-ario


El algoritmo n-ario de Huffman usa el alfabeto {0,1,.,n-1} para codificar el mensaje y construir un rbol n-ario. Este enfoque fue considerado por Huffman en su enfoque originario.

[editar] Cdigo Huffman adaptable

La variacin llamada cdigo de huffman adaptable calcula dinmicamente la probabilidad de la frecuencia de la cadena de origen basada en antiguas apariciones. Est relacionado con la familia de algoritmos LZ.

[editar] Algoritmo de Huffman de plantilla


La mayora de las veces, el tamao de las implementaciones del cdigo de Huffman estn representadas por probabilidades numricas, pero el algoritmo no lo exige; se requiere solo una manera de ordenar el tamao y aadirle. El algoritmo de plantilla de Huffman permite utilizar cualquier tipo de tamao (costos, frecuencias, los pares del tamao, tamaos no numricos) y uno de los muchos que combina mtodos (no solo la adicin). Tales algoritmos pueden resolver problemas de minimizacin, como la minimizacin de Max[ Wi + C (i)], un problema que se aplic por primera vez en el diseo de circuitos.

[editar] Cdigo de Huffman de tamao limitado


El Cdigo de Huffman de tamao de limitado es una variante donde el objetivo es lograr que el camino de coste mnimo con la restriccin de que la longitud de cada palabra sea menor que una constante. El algoritmo de package-merge lo soluciona con un algoritmo voraz, muy similar al usado por el algoritmo de Huffman. Su complejidad es del orden de O (nL), siendo L el tamao de la palabra ms larga. No se conoce algoritmo para resolver este problema en tiempo lineal, a diferencia de los problemas convencionales de Huffman.

[editar] Codificacin Huffman con costes desiguales


En el problema estndar de la codificacin Huffman, se asume que cada smbolo del alfabeto con el que se construye cada palabra del cdigo tiene igual costo de transmisin: una palabra del cdigo cuya longitud sea N dgitos siempre tendr un costo de N, sin importar cuntos de esos dgitos sean ceros, cuntos unos, etc. Cuando se trabaja bajo esta suposicin, minimizar el costo total del mensaje y minimizar el nmero total de dgitos es lo mismo. En la codificacin Huffman con costes desiguales la suposicin anterior ya no es verdadera: los smbolos del alfabeto pueden tener longitudes no uniformes, debido a caractersticas del medio de transmisin. Un ejemplo es el alfabeto del cdigo Morse, donde una 'raya' requiere ms tiempo para ser enviada que un 'punto', y por lo tanto el costo del tiempo de transmisin de una raya es mayor. El objetivo sigue siendo minimizar la longitud media de la palabra de cdigo, pero no es suficiente con minimizar el nmero de smbolos usado en el mensaje. No se conoce un algoritmo para solucionar esto de la misma manera o con la misma eficiencia que la codificacin Huffman convencional.

[editar] rboles binarios alfabticos ptimos (codificacin Hu-Tucker)


En una situacin de codificacin Huffman estndar, se asume que cualquier cdigo puede corresponderse con cualquier smbolo de entrada. En la versin alfabtica, el orden alfabtico de las entradas y salidas debe ser idntico. As, por ejemplo, a la

entrada

no se le puede asignar

, sino que le

correspondera o . Esto tambin se conoce como el problema de Hu-Tucker, por los autores de la publicacin que contiene la primera solucin lineartmica a este problema de optimalidad binaria alfabtica, que es similar al algoritmo de Huffman, pero no es una variacin del mismo. Estos rboles binarios alfabticos ptimos son usados a menudo como boles binarios de bsqueda.

[editar] Cdigo cannico de Huffman


Si los pesos correspondientes a las entradas (ordenadas alfabticamente) estn en orden numrico, los cdigos de Huffman tienen la misma longitud que los cdigos alfabtico ptimos, as que pueden calcularse como estas ltimas, haciendo que la codificacin Hu-Tucker sea innecesaria. El cdigo resultante de las entradas (re) ordenadas numricamente se conoce como cdigo cannico de Huffman y es el cdigo que normalmente se usa en la prctica, dada su facilidad para codificar y decodificar. La tcnica para encontrar este cdigo se conoce como codificacin de HuffmanShannon-Fano, ya que es ptima como la codificacin de Huffman, y alfabtica segn la probabilidad de los pesos, como la codificacin de Shannon-Fano.

[editar] Aplicaciones
La codificacin aritmtica puede considerarse como una generalizacin de la codificacin de Huffman, de hecho, en la prctica la codificacin Aritmtica viene precedida por la codificacin de huffman, pues es ms fcil encontrar una aritmtica para una entrada binaria que para una no binaria. Por otra parte aunque la codificacin de compresin ofrece mejor rendimiento que la codificacin de Huffman, la codificacin de Huffman se encuentra todava en uso generalizado debido a su simplicidad, alta velocidad, y falta de problemas de patentes. La codificacin de Huffman se utiliza a menudo en algn otro mtodo de compresin. Como la deflacin y cdec multimedia como JPEG y MP3 que tienen una cuantificacin digital basada en la codificacin de Huffman.

[editar] Ejemplo
Una sonda espacial ha sido lanzada al espacio para contar cierto tipo de perturbaciones estelares. Ha de contar cuntas se producen en cada minuto, y tiene cada da una ventana de tiempo bastante reducida para enviar los datos a Tierra; por tanto, interesa reducir al mximo el tiempo de transmisin, y para ello se recurre a codificar las muestras mediante un cdigo de Huffman. En la siguiente tabla se muestran los valores a transmitir, junto con sus frecuencias relativas, su cdigo en una codificacin binaria de 3 bits, y su cdigo en un posible cdigo Huffman para estos valores. Valor Frecuencia Cdigo binario Cdigo Huffman 0 10% 000 010

1 20% 2 30% 3 25% 4 10% 5 o ms 5%

001 010 011 100 101

10 00 11 0110 0111

Puede observarse que, en la codificacin binaria, todos los posibles valores reciben cdigos del mismo nmero de bits, mientras que en la codificacin Huffman, cada valor tiene un nmero diferente de bits: los cdigos ms frecuentes poseen dos bits, mientras que los menos frecuentes poseen cuatro bits. A continuacin se observa el cdigo necesario para transmitir la siguiente serie de valores:
5,4,2,3,2,2,1,0,1,3,2,4,3,4,3,2,3,4,2,4

Utilizando la codificacin binaria, sera una serie de 60 bits; es decir, 3 bits por smbolo.
101100010011010010001000001011010100011100011010011100010100

nota: se ha aadido la misma serie separada en bloques con la nica razn de facilitar una transcripcin manual libre de errores para un estudio por parte del lector interesado.
101.100.010.011.010.010.001.000.001.011.010.100.011.100.011.010.011.10 0.010.100

Utilizando, en cambio, la codificacin Huffman, se tendra que enviar una secuencia de 53 bits; es decir, 2,65 bits por smbolo.
01110110001100001001010110001101101101100110110000110

nota: la misma serie dividida en bloques de 4 bits para la misma observacin anterior.
0111.0110.0011.0000.1001.0101.1000.1101.1011.0110.0110.1100.0011.0

En este ejemplo, la media de bits por smbolo que cabra esperar de esta codificacin, en cadenas de valores ms largas, es de 2,4. Para su comparacin, la entropa del conjunto de smbolos es de 2,366; es decir, el mejor mtodo de compresin sera capaz de codificar estos valores utilizando 2,366 bits por smbolo. Es posible, tambin, apreciar cmo se pueden extraer sin ninguna ambigedad los valores originales a partir de la cadena codificada mediante Huffman. Hay que aadir que la codificacin de Huffman no puede ser aplicada a imgenes en blanco y negro porque es incapaz de producir compresin sobre un alfabeto binario.

[editar] Bibliografa

D.A. Huffman, "A method for the construction of minimum-redundancy codes", Proceedings of the I.R.E., sept 1952, pp 1098-1102

[editar] Vase tambin


Algoritmo de Huffman Cdigo cannico de Huffman Codificacin aritmtica

[editar] Enlaces externos


Generador de rboles de Huffman Huffman en PHP

Obtenido de http://es.wikipedia.org/w/index.php?title=Codificaci%C3%B3n_Huffman&oldid=548 89751 Ver las calificaciones de la pgina

Evala este artculo


Qu es esto? Confiable Objetivo Completo Bien escrito

Estoy muy bien informado sobre este tema (opcional) Enviar calificaciones Guardado correctamente Tu valoracin an no ha sido enviada Categora:

Teora de cdigos

Herramientas personales

Iniciar sesin / crear cuenta

Espacios de nombres

Artculo

Discusin

Variantes Vistas

Leer Editar Ver historial

Acciones Buscar
Especial:Buscar

Navegacin

Portada Portal de la comunidad Actualidad Cambios recientes Pginas nuevas Pgina aleatoria Ayuda Donaciones Notificar un error

Imprimir/exportar

Crear un libro Descargar como PDF Versin para imprimir

Herramientas

Lo que enlaza aqu Cambios en enlazadas Subir archivo Pginas especiales Enlace permanente Citar este artculo Evala este artculo

En otros idiomas

Azrbaycanca Catal esky Dansk

Deutsch English Eesti Suomi Franais Italiano Nederlands Norsk (bokm l) Polski Portugus Svenska Trke Ting Vit Esta pgina fue modificada por ltima vez el 26 mar 2012, a las 23:09. El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0; podran ser aplicables clusulas adicionales. Lee los trminos de uso para ms informacin. Wikipedia es una marca registrada de la Fundacin Wikimedia, Inc., una organizacin sin nimo de lucro. Contacto Poltica de privacidad Acerca de Wikipedia Limitacin de responsabilidad Versin para mviles

Potrebbero piacerti anche