Informe de Algoritmos Huffman y Dijkstra

download Informe de Algoritmos Huffman y Dijkstra

of 15

Transcript of Informe de Algoritmos Huffman y Dijkstra

UNIVERSIDAD NACIONAL DE INGENIERIA

Introduccin al anlisis de algoritmos Algoritmos de Huffman y Dijkstra

Integrantes del grupo:

Bermdez Arana Gabriel Antonio Mendoza Lopez Ervin Antonio Marcia Lanzas Walter de Jesus Santos Vogl Alberto

Tutor Ing. Marlon Ramirez

Febrero, 2012

1

ContenidoAlgoritmo Dijkstra .......................................................................................................................... 3 Conceptos tericos .................................................................................................................... 3 Descripcin del algoritmo........................................................................................................... 5 Complejidad del algoritmo ......................................................................................................... 5 Aplicaciones del algoritmo. ........................................................................................................ 5 Pseudocdigo del algoritmo ....................................................................................................... 6 Corrida del algoritmo ................................................................................................................. 6 Cdigo Matlab del algoritmo. ..................................................................................................... 7 Algoritmo de Huffman ................................................................................................................... 7 Conceptos tericos .................................................................................................................... 7 Descripcin del algoritmo .......................................................................................................... 8 Orden del algoritmo ................................................................................................................... 9 Aplicaciones del algoritmo. ........................................................................................................ 9 Pseudocdigo del algoritmo ....................................................................................................... 9 Corrida del algoritmo ............................................................................................................... 10 Codigo Matlab ......................................................................................................................... 13

2

Algoritmo DijkstraConceptos tericosGrafica: En una grfica se distinguen bsicamente dos elementos: los nodos, mejor conocido como vrtices y los arcos, llamados aristas, que conectan un vrtice con otro. Los vrtices almacenan informacin y las aristas representan relaciones entre dicha informacin. Una grfica G consta de dos puntos: V(G) y A(G). El primero de ellos est formado por elementos llamados nodos o vrtices, mientras que el segundo conjunto est formado por arcos o aristas. Por lo tanto, podemos denotar una grfica como: G= (V,A)

3

Donde V simboliza el conjunto de vrtices y Al conjunto de aristas. Si no se hace ningn tipo de especificacin los conjuntos V y A son finitos. Cada arista est identificada por un nico par de nodos del conjunto de vrtices, el cual puede estar o no ordenado. Una arista que va del vrtice u al vrtice v se denota por medio de la expresin a=(u,v), donde u y v son vrtices adyacentes y los extremos de a. en este caso u y v estn conectados por a y se dice que a es incidente u y v. Las grficas dirigidas se caracterizan porque su aristas tienen asociada una direccin. Los vrtices se utilizan para representar informacin, mientras que las aristas representan una relacin con direccin o jerarqua entre los vrtices. Para las aristas de las diagraficas se aplica la siguiente terminologa: a) b) c) d) A empieza en u y termina en v U es el origen o punto inicial de a, y v es el destino o punto terminal de a. U es un predecesor de v y v es un sucesor o vecino de u. U es adyacente hacia v y v es adyacente desde u.

Para representar las grficas se utiliza con ms frecuencia las siguientes estructuras de datos: matriz de adyacencia y lista de adyacencia. La matriz de adyacencia es una matriz booleana donde se le da un orden arbitrario a los vrtices de la grfica, y se le asigna a los renglones y a las columnas de una matriz un mismo orden. Un elemento de la matriz ser 1 si los vrtices correspondientes al rengln y a la columna estn unidos por una arista (son adyacentes) y ser cero de lo contrario. A continuacin se muestra una grfica con su correspondiente matriz de adyacencia. Grafica dirigida Matriz de adyacencia a 0 0 0 0 0 b 1 0 1 0 0 c 1 0 0 0 1 d 0 1 1 0 1 E 0 1 0 0 0

A B C D E

La principal desventaja de la matrices de adyacencias el espacio que requieren para almacenar la informacin. Adems cuando se trata de graficas no dirigidas, la matriz resulta simtrica.

4

Tambin se emplea una matriz de distancia de la diagrafica de acuerdo a los valores de las aristas entre los vrtices. Se aplican las siguientes reglas para la construccin de la matriz: El peso del propio vrtice de origen es cero. Se registra el peso de cada vrtice entre el origen a sus vrtices adyacentes con el valor de la arista, cualquier otro vrtice no adyacente toma valor infinito. Grafica dirigida A 0 Matriz de distancia b 4 0 3 C 11 0 5 d 6 6 0 3 E 2 0

A B C D E

Descripcin del algoritmo.Este algoritmo encuentra el camino ms corto de un vrtice elegido a cualquier otro vrtice de la grfica, donde la longitud de un camino es la suma de los pesos der las aristas que lo forman. Las aristas deben tener un peso no negativo.

Complejidad del algoritmoEl algoritmo es de orden O(n2). Si se usa una matriz de distancias para representarla, cada ciclo toma tiempo de O(n) y son ejecutados n-1 veces. Si se emplea lista de adyacencia para representar la diagrafica el tiempo de recorrido ser del orden de O(log n) y el tiempo de los ciclos ser del orden de O (A log n)

Aplicaciones del algoritmo. Seleccionar la ruta ms corta entre dos ciudades: cada ciudad se representa con los vrtices y las aristas representan la duracin de los vuelos. Utilizado en redes en protocolos de enrutamiento dinmico como OSPF y IS-IS.

5

Pseudocdigo del algoritmo1. Agregar el vrtice 1 a S 2. Repetir con i desde 2 hasta n 2.1 sea el mnimo valor 2.2 agregar v a S 2.3 Repetir para cada vrtice w en V-S 2.3.1 hacer D[w] mnimo (D[w],D[v] + M[v,w]) 2.4 {Fin del ciclo del paso 2.3} 3. {fin del ciclo del paso 2}

Corrida del algoritmoDe acuerdo a la grfica dirigida que se presenta a continuacin

Se aplica el algoritmo de Dijkstra para encontrar el camino ms corto desde uno de los vrtices a cualquiera de los otros vrtices de una grfica dirigida, formada por 5 vrtices.

S {a} {a,b}

D[a] 0 0

D[b] 4 4

D[c] 11 11

D[d] 10

D[e] 6

{a,b,e}

0

4

11

10

6

Comentario Estado inicial Se encontr a,b,d y a,b,e No hay cambio 6

{a,b,e,d} {a,b,e,d,c}

0 0

4 4

11 11

9 9

6 6

Se encontr a,b,e,d Estado final: a,b,e,d,c

Cdigo Matlab del algoritmo.

Algoritmo de HuffmanConceptos tericosrbol binario El rbol binario de bsqueda es una estructura sobre la cual se pueden realizar eficientemente las operaciones de bsqueda, insercin y eliminacin. Comparando estas estructuras con otras, pueden observarse ciertas ventajas. Por ejemplo en un arreglo es posible localizar datos eficientemente si estos se encuentran ordenados, pero las operaciones de insercin y eliminacin resultan costosas. Formalmente se define un rbol binario de bsqueda de la siguiente manera para todo nodo T del rbol debe cumplirse que todos los valores de los nodos del subrbol izquierdo de T sern menores o iguales al valor del nodo T. de forma similar, todos los valores de los nodos del subrbol derecho de T deben ser mayores o iguales al valor del nodo T. Insercin en un rbol binario de bsqueda La insercin es una operacin que se puede realizar eficientemente en un rbol binario de bsqueda. La estructura crece conforme se inserten elemento a un rbol binario de bsqueda son los siguientes:

7

1. Debe compararse la clave a insertar con la raz del rbol. Si es mayor, debe avanzarse hacia el subrbol derecho. Si es menor, debe avanzarse hacia el subrbol izquierdo.} 2. Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las siguientes condiciones: 2.1 el subrbol derecho es igual a vaci, o el subrbol izquierdo es igual a vaci, en cuyo caso se proceder a insertar el elemento en el lugar que le corresponde. 2.2 La clave que quiere insertarse es igual a la raz del rbol, en cuyo caso no se realiza la insercin. Borrado en un rbol binario de bsqueda La operacin de borrado es un poco ms complicada que la de insercin. Esta consiste en eliminar un nodo sin violar los principios que definen un rbol binario de bsqueda. Se deben distinguir los siguientes casos: 1. Si el elemento a borrar es terminal u hoja, simplemente se suprime. 2. Si el elemento a borrar tiene un solo descendiente, entonces tiene que sustituirse por ese descendiente. 3. Si el elemento a borrar tienen los dos descendientes, entonces se tiene que sustituir por el nodo que se encuentra ms a la izquierda en el subrbol derecho o por el nodo que se encuentra ms a la derecha en el subrbol izquierdo.

Descripcin del algoritmoEl algoritmo de Huffman es un algoritmo para la construccin de cdigos de Huffmann, desarrollado por David A. Huffmann en 1952 y descrito en A Method for the Construction of Minimum-Redundancy Codes. El algoritmo consiste en la creacin de un rbol binario que tiene cada uno de los smbolos por hoja, y construido de tal forma que siguindolo desde la raz a cada una de sus hojas se obtiene el cdigo Huffman asociado. 1. Se crean varios rboles, uno por cada uno de los smbolos del alfabeto, consistiendo cada uno de los rboles en un nodo sin hijos, y etiquetado cada uno con su smbolo asociado y su frecuencia de aparicin. 2. Se toman los dos rboles de menor frecuencia, y se unen creando un nuevo rbol. La etiqueta de la raz ser la suma de las frecuencias de las races de los dos rboles que se unen, y cada uno de estos rboles ser un hijo del nuevo rbol. Tambin se etiquetan las dos ramas del nuevo rbol: con un 0 la de la izquierda, y con un 1 la de la derecha. 3. Se repite el paso 2 hasta que slo quede un rbol.

8

Con este rbol se puede conocer el cdigo asociado a un smbolo, as como obtener el smbolo asociado a un determinado cdigo. Para obtener el cdigo asociado a un smbolo se debe proceder del siguiente modo: 1. Comenzar con un cdigo vaco 2. Iniciar el recorrido del rbol en la hoja asociada al smbolo 3. Comenzar un recorrido del rbol hacia arriba 4. Cada vez que se suba un nivel, aadir al cdigo la etiqueta de la rama que se ha recorrido 5. Tras llegar a la raz, invertir el cdigo 6. El resultado es el cdigo Huffman deseado

Orden del algoritmoCada iteracin del algoritmo de Huffman reduce la medida del problema en 1, as que hay n iteraciones. La iteracin consiste de localizar los dos valores mnimos de una longitud n-i+1. Esto es una operacin lineal y por tanto el algoritmo tiene un tiempo de complejidad de (n2)

Sin embargo podra ser ms rpido si los pesos inicialmente son ordenados y entonces mantiene dos listas. La primera lista consiste de pesos que no han sido combinado y la segunda lista de arboles que han sido formado por las combinaciones de los pesos. al realizar esta cambio se obtiene que la complejidad del algoritmo es (nlogn) .

Aplicaciones del algoritmo.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.

Pseudocdigo del algoritmoHuffman (p,s)

9

//P: Ocurrencia o frecuencia del carcter //S: Arreglo de Caracteres 1. Convertir cada elemento de la lista en un rbol 2. Repetir mientras Longitud(s)>2 hacer //La lista de rbol contenga ms de un elemento 3. Ordenar p descendentemente 4. Con los dos primeros rboles formar un nuevo rbol 5. Sumar las dos ocurrencias de cada rama en el nuevo elemento rbol 6. Inserta el nuevo rbol en la posicin segn la suma de frecuencia obtenida 7. Fin del ciclo Repetir 8. Retornar rbol Huffman 9. Fin

Corrida del algoritmo1ra Iteracin

0.

0. 25

2do Iteracin

10

0 0.

0.

3ra Iteracin

0. 0. 0.

0.

4ta Iteracin

11

0

0 0 0

0

Resultados de la Corrida

0. 10 1

0. 40 1 0

0. 61

0. 20 1

12

Codigo Matlabfunction CODE = huffman(p)%HUFFMAN Builds a variable-length Huffman code for a symbol source. % CODE = HUFFMAN(P) returns a Huffman code as binary strings in % cell array CODE for input symbol probability vector P. Each word % in CODE corresponds to a symbol whose probability is at the % corresponding index of P. % % Based on huffman5 by Sean Danaher, University of Northumbria, % Newcastle UK. Available at the MATLAB Central File Exchange: % Category General DSP in Signal Processing and Communications. % Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins % Digital Image Processing Using MATLAB, Prentice-Hall, 2004 % $Revision: 1.5 $ $Date: 2003/10/26 18:37:16 $ % Check the input arguments for reasonableness. error(nargchk(1, 1, nargin)); if (ndims(p) ~= 2) | (min(size(p)) > 1) | ~isreal(p) | ~isnumeric(p) error('P must be a real numeric vector.'); end % Global variable surviving all recursions of function 'makecode' global CODE CODE = cell(length(p), 1); % Init the global cell array if length(p) > 1 p = p / sum(p); s = reduce(p); makecode(s, []); else CODE = {'1'}; end; % When more than one symbol ... % Normalize the input probabilities % Do Huffman source symbol reductions % Recursively generate the code % Else, trivial one symbol case!

function makecode(sc, codeword)% Scan the nodes of a Huffman source reduction tree recursively to % generate the indicated variable length code words. % Global variable surviving all recursive calls global CODE if isa(sc, 'cell') % For cell array nodes, makecode(sc{1}, [codeword 0]); % add a 0 if the 1st element makecode(sc{2}, [codeword 1]); % or a 1 if the 2nd else % For leaf (numeric) nodes, CODE{sc} = char('0' + codeword); % create a char code string End 13

function s = reduce(p); % Create a Huffman source reduction tree in a MATLAB cell structure % by performing source symbol reductions until there are only two % reduced symbols remaining s = cell(length(p), 1); % Generate a starting tree with symbol nodes 1, 2, 3, ... to % reference the symbol probabilities. for i = 1:length(p) s{i} = i; end while numel(s) > 2 [p, i] = sort(p); % Sort the symbol probabilities p(2) = p(1) + p(2); % Merge the 2 lowest probabilities p(1) = []; % and prune the lowest one s = s(i); % Reorder tree for new probabilities s{2} = {s{1}, s{2}}; % and merge & prune its nodes s(1) = []; % to match the probabilities end

14

15