Escolar Documentos
Profissional Documentos
Cultura Documentos
Diseo y Anlisis de Algoritmos Ctedra de Programacin Carrera de Ingeniera de Sistemas Prof. Isabel Besembel Carrera
Recorridos de rboles
rboles binarios:
Preorden: raz-izquierdo-derecho (RID) Enorden: izquierdo-raz-derecho (IRD) Posorden: izquierdo-derecho-raz (IDR)
Pre y posorden se generalizan para los rboles Son recursivas por naturaleza Exploracin de izquierda a derecha o viceversa Lema: cada uno de los recorridos, el tiempo T(n) que se necesita para explorar un rbol binario que contiene n nodos se encuentra en (n)
Marzo, 2005 Prof. Isabel Besembel. Ctedra de Programacin. Diseo y Anlisis de Algoritmos. 2
Recorridos de rboles
Demostracin:
Suponga que visitar un nodo est en O(1), T(0) est acotado superiormente por alguna constante c, donde c T(0) Suponga que hay que explorar un rbol de n > 0 nodos, uno de ellos es la raz, g de ellos estn en el subrbol izquierdo y n-g-1 en el subrbol derecho, entonces
T (n) mx (T ( g ) + T (n g 1) + c, n > 0
0 g n 1
Sin importar el orden de exploracin. Se demuestra por induccin que T(n) an+b, donde a y b son constantes. Si b c, la hiptesis es verdadera para n=0 ya que c T(0) Paso de induccin: n > 0 y la hiptesis cierta para todo m [0, n-1]
Marzo, 2005 Prof. Isabel Besembel. Ctedra de Programacin. Diseo y Anlisis de Algoritmos. 3
Recorridos de rboles
T (n) mx (T ( g ) + T (n g 1) + c)
0 g m 1 0 g n 1
Si a 2b se tiene T(n) an+b, la hiptesis es cierta tambin para m = n, lo que demuestra que T(n) an+b n 0, por lo que T(n) est en O(n) Adems, T(n) est en (n) ya que se visitan todos los nodos y por ello T(n) est en (n).
Marzo, 2005
Bsqueda en profundidad
Sea G={N, A, f} un grafo formado por todos los nodos que se desean visitar. Suponga una forma de marcar los nodos visitados
Se selecciona un nodo para comenzar v N (nodo actual) y se marca como visitado Si hay algn nodo adyacente a v que no ha sido visitado an, se toma dicho nodo como nodo actual y se invoca recursivamente el proceso de recorrido en profundidad Cuando estn marcados como visitados todos los nodos adyacentes a v, se termina el recorrido para v.
Marzo, 2005 Prof. Isabel Besembel. Ctedra de Programacin. Diseo y Anlisis de Algoritmos. 5
Bsqueda en profundidad
Si queda algn nodo en G que no ha sido visitado, se repite el proceso tomando un nodo cualquiera como v
Marzo, 2005
Marzo, 2005 {pre: 1 na pos} 1 2 3 busPro(Entero+: na, Arreglo[100]De Lgico: mar ) {pos: marca ( i ) = Verdadero i} -pos, nodoAdyacente( ): Definidos en DigrafoMat. -mar: Arreglo[100]De Lgico. Marca que indica si el nodo fue visitado (Verdadero) o no (Falso). -i: Entero+: Variable con la posicin de los nodos en la matriz -nadya: Arreglo[100]De Entero+. Vector auxiliar que contiene los nodos adyacentes
mar( na ) = Verdadero nadya = nodoAdyacente( na ) [ Si ( mar( nadya( i )) ) entonces busPro( nadya( i ), mar ) fsi ] i = 1, pos
T(n) = (mx(N,A))
Marzo, 2005 Prof. Isabel Besembel. Ctedra de Programacin. Diseo y Anlisis de Algoritmos. 7
Marzo, 2005 busPro(Entero+: na, Arreglo[100]De Lgico: mar ) {pre: g.n 0 1 na g.n} {pos: marca ( i ) = Verdadero i} 1 2 3 4 mar( na ) = Verdadero nadya = nodoAdyacente( na ) nadya.cursorAlInicio( ) [Si(mar(nadya.conLista().Info())) entonces busPro(nadya.conLista().Info(), mar ) fsi nadya.cursorAlProximo( ) ] i = 1, nadya.numEle( ) -g, nodoAdyacente( ): Definidos en DigrafoLis -mar: Arreglo[100]De Lgico. Marca que indica si el nodo fue visitado (Verdadero) o no (Falso). -i: Entero+: Variable auxiliar -nadya: Lista[Entero+]. Lista auxiliar que contiene los nodos adyacentes -cursorAlInicio( ), numEle( ), conLista( ), cursorAlProximo( ). Definidos en Lista
8
T(n) = (mx(N,A))
Marzo, 2005 Prof. Isabel Besembel. Ctedra de Programacin. Diseo y Anlisis de Algoritmos.
Bsqueda en profundidad
Si el grafo es conexo, se tendr un nico rbol de recorrido en profundidad Si el grafo no es conexo, se tendr un bosque de rboles, uno por cada componente conexo Numera los nodos del rbol en preorden
Se coloca en el algoritmo recorridoEnProf
np = np+1 como paso 1 prenum( i ) = np como paso 2
en el algoritmo busPro
np = 0
Marzo, 2005
como paso 2
Prof. Isabel Besembel. Ctedra de Programacin. Diseo y Anlisis de Algoritmos. 9
Puntos de articulacin
Un nodo v es un punto de articulacin si el subgrafo obtenido al borrar todas las aristas que incidan en v ya no es conexo
1 1 es un punto de articulacin 8 2 5 4 7 8 3 6
2 5
3 6
4 7
Marzo, 2005
10
Un grafo G es bicoherente si todo punto de articulacin est unido mediante al menos 2 aristas con cada componente del subgrafo restante
Si adems de biconexo, G es bicoherente, se tiene la seguridad que la red seguir funcionando aunque falle una lnea de transmisin
Marzo, 2005
11
1
2
2 3 6 5
6 1
4 7 8
2 5
3 6
4 7 8
prenum
5
Marzo, 2005
masalto
2
12
Marzo, 2005
13
Ejercicio: combinar los pasos 1 y 2 para calcular prenum y masalto dentro del recorrido en profundidad
Marzo, 2005 Prof. Isabel Besembel. Ctedra de Programacin. Diseo y Anlisis de Algoritmos. 14
Bsqueda en profundidad
El subgrafo predecesor de una bsqueda en profundidad forma un bosque en profundidad compuesto de varios rboles en profundidad donde A={(padre(v),v) : v N y padre(v) 0} Para cada na, se tienen dos variables auxiliares para indicar cuando se descubre na d(na) y cuando se termina de trabajar con na f(na)
Para cada na, d(na) < f(na). El nodo na es blanco antes de d(na), gris entre d(na) y f(na) y negro despus de f(na).
Marzo, 2005 Prof. Isabel Besembel. Ctedra de Programacin. Diseo y Anlisis de Algoritmos. 15
Bsqueda en profundidad
26/11/98 {pre: n > 0 } 1 2 3 busPro( ) {pos: n > 0 G' = G padre bosque en profundidad } -u, t: Entero. Variable auxiliar y contador. -color, padre, d, f: Arreglo[n]De Entero. Contienen el color del nodo, el nodo predecesor inmediato, la etiqueta donde se empez a procesar el nodo y donde se termin de procesar cada nodo. -visitaBusPro(). Rutina recursiva para hacer la bsqueda en profundidad.
[ color(u), padre(u) = 'blanco', 0 ] u N t=0 [ Si ( color(u) = 'blanco' ) entonces visitaBusPro(u, t, color, padre, d, f) fsi ] u N
Marzo, 2005
16
Bsqueda en profundidad
26/11/98 visitaBusPro(Entero: u, t, Arreglo[n]De [Entero]: color, padre, d, f) {pre: n > 0 u N } {pos: n > 0 G' = G padre bosque en profundidad } 1 2 3 4 color(u), t, d(u) = 'gris', t + 1, t [ Si ( color(v) = 'blanco' ) entonces padre(v) = u visitaBusPro(v, t, color, padre, d, f) fsi ] v u.listaAdyacencia color(u), t, f(u) = 'negro', t + 1, t regrese -u, v, t: Entero. Variables auxiliares y contador. -color, padre, d, f: Arreglo[n] De [Entero]. Contienen el color del nodo, el nodo predecesor inmediato, la etiqueta donde se empez a procesar el nodo y donde se termin de procesar cada nodo. -visitaBusPro(). Rutina recursiva para hacer la bsqueda en profundidad.
T(n) = (N + A)
Marzo, 2005 Prof. Isabel Besembel. Ctedra de Programacin. Diseo y Anlisis de Algoritmos. 17
Ejemplo
3 4 2 5 1 7 6 8 3
1 2 3 4 5 6 7 8
1 2 5 7
6 8
(1
(2(3(4) (5
))) )(6(7 ) (8
))
Marzo, 2005
19