You are on page 1of 21

INFORME 4 PARCIAL

ESTRUCTURAS DE DATOS

NOMBRE: Jorge Enrique Henao Rojas. CODIGO: 910522. Estudiante.

PRESENTADO A: Mauricio Orozco Alzate. Docente.

UNIVERSIDAD NACIONAL DE COLOMBIA SEDE MANIZALES FACULTAD DE ADMINISTRACION

INDICE

1. Qu es un rbol binario de bsqueda? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ CAPITULO I 2. Qu es un montculo binario? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ CAPITULO II 3. Qu es una cola de prioridad? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ CAPITULO III 4. Qu es la estructura de datos "grafo" o "grfica" y para qu sirve? _ _ 5. Cmo se pueden recorrer los "grafos"?_ _ _ _ _ _ _ __ _ _ _ _ _ _ __ _ CAPITULO IV CAPITULO V

CAPITULO I Qu es un rbol binario de bsqueda? Una de las aplicaciones que se dan mas frecuentemente en informtica, es la de manejar una coleccin de datos sobre los cuales se efectan de forma constante operaciones de bsqueda insercin y borrado (pensemos por ejemplo en el trabajo habitual de un servicio de reserva en una agencia de viajes). Sabemos que cada una de estas tres operaciones elementales se resuelven de forma distinta, segn la estructura elegida para organizar esta coleccin de datos sea un vector o una lista enlazada. La insercin y el borrado se mejoran sensiblemente, si elegimos una lista en vez de un vector, por el contrario, para la bsqueda parece claramente preferible trabajar con un vector ordenado. Para superar esta situacin, vamos a describir una variante del rbol binario con la que podemos localizar, insertar y borrar con mayor eficacia. Ello nos dar una nueva posibilidad a la hora de programar, al poder seleccionar nuevas estructuras , que nos permitan utilizar nuevos y mejores algortimos. Llamaremos rbol binario de bsqueda a un rbol binario construido de acuerdo con el siguiente procedimiento: 1. El primer elemento se crea como el nodo raz. 2. Los valores del rbol deben ser tales que pueda existir un orden (entero, real, lgico o carcter e incluso definido por el usuario si se tiene un orden total con el). 3. En cualquier nodo, todo los valores del subrbol izquierdo del nodo son menores o iguales que el valor del nodo. De modo similar todos los valores del subrbol derecho deben ser mayores que los valores del nodo. Para este tipo de rbol, es sencillo probar que su recorrido in-orden obtiene los valores debidamente ordenados, lo que nos ser de gran utilidad. As, por ejemplo, en la siguiente figura se muestra un rbol binario de bsqueda.

El recorrido in-orden del rbol de la figura anterior es: B F G H P R S T W Y Z. Ello nos permitir almacenar y procesar un conjunto ordenado, con bastante facilidad, sin que tengamos que proceder a largas operaciones de readaptacin. El paso de un conjunto

cualquiera a un rbol binario de bsqueda es afortunadamente fcil, como muestra el ejemplo siguiente: Supongamos que se dispone de un vector que contiene los siguientes caracteres: DFEBACG Para expresarlo mediante un rbol binario de bsqueda, vamos a seguir el algoritmo: 1. Nodo raz del rbol: D 2. El siguiente elemento se convierte en el descendente derecho, dado que F alfabticamente es mayor que D. 3. A continuacin, se compara E con el raz. Dado que E es mayor que D, pasara a ser un hijo de F y como E<F ser el hijo izquierdo. 4. El siguiente elemento B se compara con el raz D y como B<D y es el primer elemento que cumple esta condicin, B ser el hijo izquierdo de D. 5. Se repiten los pasos hasta el ltimo elemento. El rbol de bsqueda resultante sera:

Ntese que en caso de que el vector estuviese previamente ordenado (ascendente o descendentemente) el rbol de bsqueda que obtendramos seria en realidad una lista. RETROALIMENTACION (rbol Binario de Bsqueda) Para un rbol binario de bsqueda, el valor medio de la profundidad es 0(log n, la profundidad de un nodo n es la longitud del camino entre la raz y n, la raz tiene profundidad cero). Si la insercin en un ABB (rbol Binario de Bsqueda) no es aleatoria, el tiempo computacional aumenta. Para mantener el equilibrio: Arboles AVL, Splay Trees, entre otros. Operaciones Bsicas. Buscar: devuelve la posicin del nodo con la clave x. Insertar: coloca la clave x. si ya estuviese, no se hace nada ( o se actualiza algo). Eliminar: borra la clave x. o Si x esta en una hoja, se elimina de inmediato. o Si el nodo tiene un hijo, se ajusta un apuntador antes de eliminarlo.

o Si el nodo tiene dos hijos, se sustituye x por la clave mas pequea, w, del subrbol derecho. A continuacin se elimina en el subrbol derecho el nodo con w (que no tiene hijo izquierdo). Eliminacin Perezosa. Si se espera que el nmero de eliminaciones sea pequeo, la eliminacin perezosa es una buena estrategia. Al eliminar un elemento, se deja en el rbol marcndolo como eliminado. Habiendo claves duplicadas, es posible decrementar el campo con la frecuencia de apariciones. Si una clave eliminada se vuelve a insertar, se evita la sobrecarga de asignar un nodo nuevo.

Si el nmero de nodos reales en el rbol es igual al nmero de nodos eliminados, se espera que la profundidad del rbol solo se aumente en uno (Por qu?). La penalizacin de tiempo es pequea. CAPITULO II Qu es un montculo binario? COLAS DE PRIORIDAD. Permiten nicamente el acceso al mnimo (o mximo) elemento. Operaciones bsicas: insertar, eliminarMin (eliminarMax). Implementaciones simples: o Listas enlazadas efectuando inserciones al frente, O(1), y recorriendo la lista, O(n), para eliminar el minino (mximo). o Listas ordenadas: inserciones costosas, O(n), eliminaciones eficientes, O(1). o Arboles binarios de bsqueda: tiempo de ejecucin medio O(log n) para ambas operaciones. A pesar de que las eliminaciones no son aleatorias. Se eliminan repetidamente nodos de un subrbol. No obstante, el otro subrbol es aleatorio y tendria a lo sumo el doble de elementos de los que debera. Y esto solo incrementa en uno la profundidad esperada. o MONTICULOS: ambas operaciones se realizan en O(log n) para el peor caso. No requieren apuntadores.

Propiedades Estructurales de los Montculos. Un montculo es un rbol binario completo: todos los niveles estn llenos con la posible excepcin del nivel mas bajo, que se llena de izquierda a derecha.

Un rbol binario completo de altura h

nodos

o Su altura es la parte entera de Esta regularidad facilita su representacin mediante un vector. Para cualquier elemento en la posicin i del vector, el hijo izquierdo esta en la posicin 2i, el hijo derecho en 2i + 1, y el padre en i mod 2.

Propiedades de Orden de los Montculos. El mnimo (o mximo) esta en la raz. Y como todo subrbol es un montculo, todo nodo debe ser menor (mayor) o igual que todos sus descendientes.

Ejemplo de Montculo de Mximos.

OTRAS DEFINICIONES. Un montculo binario permite obtener el mnimo elemento de un conjunto en tiempo constante (independiente del tamao del conjunto). Aplicaciones:

Implementacin de una cola de prioridad en la que se van obteniendo los elementos en base a su prioridad. Por ejemplo la cola de prioridad de pacientes en un hospital atender al paciente ms urgente. Otro ejemplo seria la cola de prioridad de trabajos de impresin imprimir los trabajos ms cortos primero Un montculo Binario o heap cumple dos propiedades: Propiedad Estructural: Es un rbol completo. o rbol binario completo: Todos los niveles completos salvo quizs el ultimo, donde todas sus hojas estn lo mas a la izquierda posible. Propiedad de Orden: o Para cada nodo X con padre P se cumple que el dato de P es menor o igual que el dato de X. o El dato del padre nunca es mayor que el dato de los hijos. o Caso especial: nodo raz NO tiene padre. NOTA: esta es la definicin de montculo binario minimal. Para representar un montculo binario completo sin ambigedad , basta con almacenar el resultado de su recorrido por niveles en un Array.

Si la i-esima componente del array representa el i-esimo nodo de su recorrido por niveles: o Hijo izquierdo en 2*i+1, si 2*i+1 < N o Hijo derecho en 2*i+2, si 2*i+2 < N o Padre en (i-1)/2, si i != 0

Operaciones de Montculos Binarios: Insertar. La operacin de insercin no debe violarla condicin de montculo binario tras aadir el nuevo elemento. Se debe seguir cumpliendo la propiedad estructural y la propiedad de orden o Para satisfacer la propiedad estructural, se aade el elemento a la primera posicin libre del vector

o Para satisfacer la propiedad de orden, se reflota el nuevo elemento sobre sus antecesores. El nuevo valor asciende por el montculo hasta encontrar la posicin adecuada donde no se viola la propiedad de orden Eliminar el mnimo. El mnimo elemento est en la posicin 0 del vector. Para no violar la propiedad estructural del montculo, colocamos el dato situado en la ltima posicin ocupada en el array en la posicin 0.

Se viola la propiedad de orden debido al valor de la raz. Para restituir la propiedad de orden al montculo hay que hundir la posicin del hueco hasta encontrar la posicin correcta para el dato que se quiere colocar. o Analoga con el proceso de reflotar visto para insertar, pero ahora el hueco se hunde desde la raz hasta las hojas. o Hundir es mas complejo que reflotar: hay que considerar los dos posibles hijos. Siempre se hunde en la direccin del hijo menor:

Conclusiones. El montculo binario es una estructura de datos que permite obtener el minimo elemento de un grupo en tiempo constante. Utiliza un rbol binario completo para garantizar que su altura sea y una representacin implcita basada en un array para reducir el consumo de memoria

Se utiliza en aplicaciones que requieran funcionalidad basada en una cola de prioridad Aplicaciones adicionales: o Ordenacin vectorial : HeapSort.

CAPITULO III Qu es una cola de prioridad? Una cola de prioridades es una estructura de datos en la que los elementos se atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma prioridad, se atendern de modo convencional segn la posicin que ocupen. CARACTERISTICAS Este tipo especial de colas tienen las mismas operaciones que las colas , pero con la condicin de que los elementos se atienden en orden de prioridad. Ejemplos de la vida diaria seran la sala de urgencias de un hospital, ya que los enfermos se van atendiendo en funcin de la gravedad de su enfermedad. Entendiendo la prioridad como un valor numrico y asignando a altas prioridades valores pequeos, las colas de prioridad nos permiten aadir elementos en cualquier orden y recuperarlos de menor a mayor. IMPLEMENTACION Hay 2 formas de implementacin: 1. Aadir un campo a cada nodo con su prioridad. Resulta conveniente mantener la cola ordenada por orden de prioridad. 2. Crear tantas colas como prioridades haya, y almacenar cada elemento en su cola. TIPOS

Colas de prioridades con ordenamiento ascendente: en ellas los elementos se insertan de forma arbitraria, pero a la hora de extraerlos, se extrae el elemento de menor prioridad. Colas de prioridades con ordenamiento descendente: son iguales que la colas de prioridad con ordenamiento ascendente, pero al extraer el elemento se extrae el de mayor prioridad.

OPERACIONES SOBRE COLAS DE PRIORIDAD. Las operaciones de las colas de prioridad son las mismas que las de las colas genricas:

Crear: se crea la cola vaca. Encolar: se aade un elemento a la cola, con su correspondiente prioridad. Desencolar: se elimina el elemento frontal de la cola. Frente: se devuelve el elemento frontal de la cola. Destruye: elimina la cola de memoria.

El Tad Cola de Prioridad Una cola de prioridad es una generalizacin de los conceptos de pila y cola en la que, tras entrar en la cola, la salida de los elementos no se basa necesariamente en el orden de llegada sino que se basa en un orden definido entre ellos. La extraccin de elementos de una cola de prioridad puede buscar minimizar o maximizar el valor del elemento saliente. La interpretaremos en el sentido de minimizar. Para maximizar tan solo hay que cambiar el sentido de las comparaciones.

En el modelo bsico de una cola de prioridad las operaciones que consideramos son: insertar en la cola. Obtener el elemento mnimo, y Eliminar el elemento mnimo. La realizacin de estas operaciones no requiere mantener ordenada (ni total ni parcialmente) la coleccin de elementos en la cola. Algunas aplicaciones importantes de las colas de prioridad: Gestin de procesos en un sistema operativo. Los procesos no se ejecutan uno tras otro en base a su orden de llegada. Algunos procesos deben tener prioridad (por su mayor importancia, por su menor duracin, etc.) sobre otros. Implementacin de algoritmos voraces, los cuales proporcionan soluciones globales a problemas basndose en decisiones tomadas solo con informacin local. La determinacin de la mejor opcin local suele basarse en una cola de prioridad. Algunos algoritmos sobre grafos, como la obtencin de caminos o arboles de expansin de mnimo coste, son ejemplos representativos de algoritmos voraces basados en colas de prioridad.

Implementaciones eficientes de algoritmos de simulacin de sucesos discretos. En estas, el avance del tiempo no se gestiona incrementando un reloj unidad a unidad, sino incrementado sucesivamente el reloj al instante del siguiente suceso.

TAD Cola de Prioridad Elementos: En el conjunto de elementos X hay definido un orden lineal <: 8x, y 2 X, x 6= y ) (x < y ^ y 6< x) _ (y < x ^ x 6< y). CP es el conjunto de multiconjuntos finitos de elementos de X. (En un multiconjunto los elementos pueden repetirse. P.e.: {7, 4, 7, 2, 7, 4}.) Operaciones: Dados CP 2 CP y x 2 X: Crear (): Devuelve ; Destruir (CP): Elimina CP. EstaVaca(CP) : Devuelve cierto si CP = ;, y falso si CP 6= ;. Longitud (CP): Devuelve |CP| (cardinalidad del multiconjunto). Implementaciones Eficientes de Colas de Prioridad Operaciones adicionales requeridas habitualmente: Formar una cola de prioridad a partir de n elementos dados inicialmente. Cambiar la prioridad de un elemento dado de la cola. Eliminar un elemento dado de la cola (no el mnimo). Combinar dos colas para formar una nica cola con los elementos de ambas.

Costes en el peor caso: Insertar Mnimo EliminarMn Combinar Formar Montculo binario (heap) O(log n) O(1) O(log n) O(n) O(n) Montculo a la izquierda O(log n) O(1) O(log n) O(log n) O(n) Cola binomial O(log n) O(1) O(log n) O(log n) O(n) Otras implementaciones ofrecen costes asintticos amortizados iguales o ms eficientes (unitarios para algunas operaciones): montculos oblicuos y montculos de Fibonacci.

CAPITULO IV. Qu es la estructura de datos "grafo" o "grfica" y para qu sirve? Un grafo est formado por un conjunto de nodos(o vrtices) y un conjunto de arcos. Cada arco en un grafo se especifica por un par de nodos. El conjunto de nodos es {A, B, C, D, F, G, H} y el conjunto de arcos {(A, B), (A, D), (A, C), (C, D), (C, F), (E, G), (A, A)} para el siguiente grafo

Si los pares de nodos en los arcos dirigidos, el grafo se denomina grafo directo, dirigido o dgrafo. TERMINOLOGA Al nmero de nodos del grafo se le llama orden del grafo. Un grafo nulo es un grafo de orden 0 (cero). Dos nodos son adyacentes si hay un arco que los une. En un grafo dirigido, si A es adyacente de B, no necesariamente B es adyacente de A Camino es una secuencia de uno o mas arcos que conectan dos nodos. Un grafo se denomina conectado cuando existe siempre un camino que une dos nodos cualesquiera y desconectado en caso contrario. Un grafo es completo cuando cada nodo esta conectado con todos y cada uno de los nodos restantes. El camino de un nodo as mismo se llama ciclo.

Un grafo sin ciclos es un rbol. El entregado de un nodo indica el nmero de arcos que llegan a se nodo. El fuera de grado de un nodo indica el nmero de arcos que salen de l. Un grafo de N vrtices o nodos es un rbol si cumple las siguientes condiciones a) Tiene N-1 arcos b) Existe una trayectoria entre cada par de nodos. c) Esta mnimamente conectado.

Un grafo esta etiquetado si sus arcos tiene valores asignados. Si este valor es numrico se dice que el grafo tiene peso.

GRAFOS Y MULTIGRAFOS Un grafo G consiste en dos cosas: (1) Un conjunto V de elementos llamados nodos (o puntos o vrtices) (2) Un conjunto E de aristas tales que cada arista e de E esta identificada por un nico (desordenado) par [u,v] de nodos de V, denotado por e-[v,u]. A veces denotamos un grafo escribiendo G=(V,E) Suponga que e =[u,v]. Entonces los nodos u y v se llaman extremos de e, y u y v se dice que son nodos adyacentes o vecinos. El grado de un nodo u, escrito grad(u), es el nmero de

artistas que contienen a u.si grad(u)= 0, o sea, si u no pertenece a ninguna arista--- entonces se dice que u es un nodo aislado. Un camino P de longitud n desde un nodo u se define como la secuencia de n +1 nodos.

P=( v 0 i , v 1 i , v 2 i , . . . . v m )
Tal que u =v0i, v1, es adyacente a vi-1 para i=1,2,n ; y vn=v . El camino P se dice que es cerrado si v0 =vn .El camino P se dice que es simple si todos los nodos son distintos, a excepcin de v0 que puede ser igual a vn ; es decir , P es simple si los nodos v0, v1.vn-1 son distintos y los nodos v1, v2.vn son distintos. Un ciclo es un camino simple cerrado de longitud 3 o mas . Un ciclo de longitud k se llama k-ciclo. Un grafo G se dice que es conexo si existe un camino entre cualesquiera dos de sus nodos. Si existe un camino P desde un nodo u a un nodo v, entonces eliminando las aristas innecesarias, se puede obtener un camino simple Q de u a v, de acuerdo con esto podemos establecer la siguiente proposicin.

Grafos dirigidos Un grafo dirigido G, tambin llamado digrafo o grafo, es lo mismo que un multigrafo, solo que cada arista e de G tiene una direccin asignada o, en otras palabras ,cada arista e est identificada por un par ordenado (u,v) de nodos G en vez del par desordenado [u.v]. Suponga que G es un grafo dirigido con una arista dirigida e=(u,v).Entonces e tambin se llama arco . Ms an se usa la siguiente terminologa: (1) e empieza en u y termina en v (2) u es el origen o punto inicial de e ,y v es el destino o punto terminal de e . (3) u es un predecesor de v y v es un sucesor o vecino de u (4) u es adyacente hacia v y v es adyacente a u

El grado de salida de un nodo u de G, escrito gradsal(u), es el nmero de aristas que empiezan en u similarmente , el grado de entrada u, escrito gradent(u), es el nmero de aristas que terminan en u. Un nodo u se llama fuente si tiene un grado de salida positivo y un grado de entrada nulo. Similarmente u se le llama sumidero si tiene un grado de salida nulo y un grado de entrada positivo. Las nociones de camino , camino simple y ciclo se aplican en los grafos dirigidos igual que en los grafos no dirigidos excepto que la direccin de cada arista de un camino (ciclo) debe coincidir con la direccin del camino (ciclo) . Se dice que un nodo v es alcanzable desde un nodo u si existe un camino (dirigido) de u a v. Un grafo dirigido G se dice que es conexo, o fuertemente conexo, si para cada par u,v de nodos de G existe un camino de u a v y tambin un camino de v a u . Por otro lado, G se dice que es unilateralmente conexo para cada par u,v de nodos de G hay un camino de u a v o un camino de v a u.

CAPITULO V. Cmo se pueden recorrer los "grafos"? Muchos algoritmos de grafos requieren que se examinen sistemticamente los nodos y las aristas de un grafo G. Esto se puede hacer de dos formas estndar. Una forma se llama bsqueda en anchura y la otra bsqueda en profundidad. La bsqueda en anchura usar una cola como estructura auxiliar para mantener los nodos que se vayan a procesar posteriormente, y anlogamente, la bsqueda en profundidad usar una pila. Durante la ejecucin de nuestros algoritmos, cada nodo N de G estar en uno de tres estados, lo que se llama estado de N, tal como sigue: ESTADO = 1: (Estado preparado). El estado inicial del nodo N. ESTADO = 2: (Estado de espera). El nodo N est en la cola o en la pila, esperando a ser procesado. ESTADO = 3: (Estado de procesado). El nodo N ha sido procesado.

Ahora discutiremos las dos bsquedas por separado.

Bsqueda en anchura La idea general de la bsqueda en anchura comenzando en un nodo de partida A es la siguiente. Primero examinamos el nodo de la partida A. Luego examinamos todos los vecinos de A. Luego examinamos todos los vecinos de los vecinos de A. Y as sucesivamente. Naturalmente, necesitamos seguir la pista de los vecinos de un nodo y tenemos que garantizar que ningn nodo se procesa ms de una vez. Esto se hace usando una cola para mantener los nodos que estn esperando para ser procesados y usando un campo ESTADO que nos diga el estado actual de los nodos. El algoritmo es el siguiente: Algoritmo A : Este algoritmo realiza una bsqueda en anchura en un grafo G comenzando en un nodo de partida A. 1.- Inicializar todos los nodos al estado de preparados (ESTADO = 1) 2.- Poner al nodo de partida A en COLA y cambiar su estado a espera (ESTADO = 2). 3.-Repetir pasos 4 y 5 hasta que COLA este vaca; 4.- Quitar el nodo del principio de la cola, N. Procesar N y cambiar su estado a procesado (ESTADO = 3). 5.- Aadir a COLA todos los vecinos de N que estn en estado de preparados (ESTADO = 1) y cambiar su estado al de espera (ESTADO = 2). [Fin del bucle del paso 3]. 6.- Salir. El anterior algoritmo procesar solo aquellos nodos que sean alcanzables desde el nodo de partida A. Suponga que se quiere examinar todos los nodos del grafo G. Entonces el algoritmo debe de ser modificado para que comience de nuevo en otro nodo (que llamaremos B) que este todava en el estado de preparado. Este nodo B se pude recorrer obteniendo la lista de nodos. Ejemplo Considere el grafo G de la figura 8.14(a). [Las listas de adyacencia de los nodos aparecen en la figura 8.14(b)]. Suponga que G representa los vuelos diarios entre ciudades de alguna compaa area, y suponga que deseamos volar de la ciudad A a la ciudad J con el mnimo nmero de paradas. En otras palabras, queremos saber el camino mnimo P desde A hasta J (donde cada arista tiene longitud 1).

El camino mnimo de P se puede obtener usando el algoritmo de bsqueda en anchura comenzando en la ciudad A y terminando cuando se encuentre la ciudad J. Durante la bsqueda, tambin seguiremos la pista del origen de cada arista usando un array ORIG junto con el array COLA. Los pasos para nuestra bsqueda son: (a).- Inicialmente, aadir A a COLA y aadir NULO a ORIG como sigue: FRENTE = 1 COLA: A FINAL = 1 ORIG: 0 (b).- Quitar el elemento A al frente de COLA haciendo FRENTE : = FRENTE+1 y aadir a COLA los vecinos de A como sigue: FRENTE = 2 COLA: A, F, C, B FINAL = 4 ORIG : 0, A, A, A Note que el origen A de cada una de las tres aristas se aade a ORIG. (c).- Quitar el elemento F del frente de COLA haciendo FRENTE := FRENTE +1 y aadir a COLA los vecinos de F como sigue: FRENTE = 3 COLA : A, F, C, B, D FINAL = 5 ORIG : 0, A, A, A, F (d).- Quitar el elemento C al frente de COLA y aadir a COLA los vecinos de C (que estn en el estado de preparados) como sigue: FRENTE = 4 COLA : A, F, C, B, D FINAL = 5 ORIG : 0, A, A, A, F Note que el vecino F de G no se aade a COLA, ya que F no esta en estado de preparado (porque ya ha sido aadido a COLA). (e).- Quitar el elemento B al frente de COLA y aadir a COLA los vecinos de B (con estado de preparados) como sigue: FRENTE = 5 COLA : A, F, C, B, D, G FINAL = 6 ORIG: 0, A, A, A, F, B

(f).- Quitar el elemento D al frente de COLA y aadir a COLA los vecinos de D (con estado de preparados) como sigue: FRENTE = 6 COLA : A, F, C, B, D, G FINAL = 6 ORIG: : 0, A, A, A, F, B (g).- Quitar el elemento G al frente de COLA y aadir a COLA los vecinos de G (con estado de preparados) como sigue: FRENTE = 7 COLA : A, F, C, B, D, G, E FINAL = 7 ORIG : 0, A, A, A, F, B, G (h).- Quitar el elemento E al frente de COLA y aadir a COLA los vecinos de E (con estado de preparados) como sigue: FRENTE = 8 COLA : A, F, C, B, D, G, E, J FINAL = 8 ORIG : 0, A, A, A, F, B, G, E Paramos tan pronto como J se aade a COLA, ya que J es nuestro destino final. Ahora volvemos hacia atrs desde J usando el array ORIG para encontrar el camino P. As JEGBA Es el camino P requerido. Bsqueda en profundidad La idea general de la bsqueda en profundidad comenzando en un nodo A es la siguiente, primero examinamos el nodo inicial A, luego examinamos cada nodo N de un camino P que comience en A; o sea, procesamos un vecino de A. Luego un vecino de un vecino de A y as sucesivamente. Tras llegar a un punto muerto, o sea, al final del camino P, volvemos atrs por P hasta que podamos continuar por otro camino P. Y as sucesivamente (Este algoritmo es similar al recorrido en orden de un rbol binario, y tambin a la forma en que se debe pasar a travs de un laberinto). El algoritmo es muy similar al de bsqueda en anchura excepto que usamos una pila en lugar de una cola. De nuevo se usa un campo ESTADO para indicar el estado actual de un nodo. El algoritmo es el siguiente: Algoritmo B Esta algoritmo realiza una bsqueda en profundidad en el grafo G comenzando en un nodo A. 1.- Inicializar todos los nodos al estado preparado (ESTADO =1) 2.- Meter en el nodo inicial A en l apila y cambiar su estado a estado de espera (ESTADO = 2). 3.- Repetir los paso 4 y 5 hasta que la pila esta vaca. 4.- Sacar el nodo N en la cima de la pila. Procesar el nodo N y cambiar su estado a procesado (ESTADO = 3) . 5.- Meter en la pila todos los vecinos de N que estn en estado de preparados (ESATDO = 1) y cambiar su estado al de espera (ESTADO = 2). [Fin de l Bucle del paso 3] .

6.- Salir. De nuevo este algoritmo procesa solo los nodos que sean alcanzables desde el nodo de partida A. Suponga que queremos examinar todos los nodos de G. Entonces el algoritmo debe de ser modificado para que comience de nuevo con otro nodo al que llamaremos B que este en su estado de preparado. Este nodo se puede obtener recorriendo la lista de nodos. Ejemplo Considere el grafo G de la figura 8.14 (a). Suponga que queremos encontrar e imprimir todos los nodos alcanzables desde el nodo J (incluyendo J). Una forma de hacerlo es usando el algoritmo de bsqueda en profundidad para G comenzando en el nodo J. Los pasos de la bsqueda son: (a).- Inicialmente, meter J en la pila como sigue: PILA: J (b).- Sacar e imprimir el elemento en la cima y luego meter en la pila todos los vecinos de J (con estado de preparado) como sigue: Imprimir J PILA: D, K (c).- Sacar e imprimir el elemento en la cima K y luego meter en la pila todos los vecinos de K (en estado preparado) como sigue: Imprimir K PILA: D, E, G (d).- Sacar e imprimir G y luego meter en la pila todos los vecinos de G (en estado preparado) Imprimir G PILA D, E, G Note que solo se mete C en la pila, ya que el otro vecino, E no esta en estado preparado (porque E ya ha sido metido en la pila) (e).- Sacar e imprimir C y luego meter en la pila todos los vecinos de C (en estado preparado) como sigue: Imprimir C PILA: D, E, F (f).- Sacar e imprimir el elemento F y luego meter en la pila todos los elementos de F (en estado preparado) como sigue: Imprimir F PILA: D, E Note que el nico vecino de F, D, no se mete en la pila, ya que D esta en estado preparado (porque ya ha sido metido en la pila) (g).- Sacar e imprimir E y meter en la pila todos los vecinos de E (en estado preparado) como sigue: Imprimir E PILA: D

(Note que ninguno de los tres vecinos de E esta en estado preparado) (h).- Sacar e imprimir el elemento D y meter en la pila todos los vecinos de D (en estado preparado) como sigue: Imprimir D PILA: Ahora la pila esta vaca, as que la bsqueda en profundidad de G comenzando en J esta completa. De acuerdo con ello, los nodos que se imprimieron. J, K, G, C, F, E, D Son precisamente los nodos que son alcanzables desde J.

BIBLIOGRAFIA http://c.conclase.net/edd/?cap=007#inicio http://www.google.com.co/#sclient=psyab&hl=es&source=hp&q=arbol%20binario%20de%20busqueda&pbx=1&oq=arbol%20bin ario&aq=1&aqi=g4&aql=&gs_sm=sc&gs_upl=533l3375l0l4750l13l10l0l3l3l2l1005l4491l 0.1.1.4.1.1.1.1l13l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=b012f336a0fceb87&biw=1366&bi h=639&pf=p&pdl=300 http://robotica.uv.es/pub/Libro/PDFs/CAPI5.pdf http://www.madsgroup.org/docencia/alg/arboles_monticulos.pdf http://polimedia.upv.es/visor/?id=035040d6-7fd4-ab4a-80ff-e87d3a5d84db http://www3.uji.es/~vjimenez/WWW-EDA-0910/IS13-200304-tema7.pdf

You might also like