Vous êtes sur la page 1sur 11

Algoritmos de Bsqueda

Algoritmos de bsqueda
Estos algoritmos buscan cierta propiedad o ciertos datos
dentro de una red.
Encontrar el conjunto de nodos alcanzables desde cierto nodo
Encontrar el conjunto de nodos que pueden alcanzar cierto nodo
Determinar si una red es fuertemente conexa
Determinar si un grafo es acclico
Determinar si un grafo es conexo*
Determinar si un grafo es bipartito*

En estos ltimos 4 casos, tambin se busca algunos datos


de la red y, como subproducto se obtiene la propiedad.
* Tarea

Conjunto de nodos alcanzables desde


cierto nodo
El algoritmo recorre la red desde el nodo fuente s, a travs de los
arcos adyacentes, marcando los nodos alcanzados.
Dado un conjunto de nodos ya alcanzados (marcados) marca los
nodos j que pertenecen al conjunto de arcos admisibles:

Un arco (i,j) es admisible si i est marcado y j no


El algoritmo itera hasta cuando ya no existen arcos admisibles.
Si, adems del conjunto de nodos alcanzables, queremos las
rutas de acceso, marcaremos el predecesor de cada nodo
marcado pred(j)=i
As, al final del mtodo, obtendremos un rbol de bsqueda
(rbol? cmo es este rbol?)

Eficiencia del mtodo


Una bsqueda eficiente entre los arcos, slo buscar entre los
arcos adyacentes de nodos ya marcados, pero no examinados,
guardando este conjunto de nodos en una lista.
El algoritmo comienza con el nodo s en la lista, agrega los nodos
recin marcados, elimina los nodos que va examinando y termina
cuando la lista est vaca.
Esta implementacin nos garantiza que nunca revisaremos un
arco dos veces. De modo que la complejidad del algoritmo es
O(m) (Por qu?)

Breadth-First vs Depht First


El orden en que se recorre esta lista nos dar lugar a dos
algoritmos:
Bsqueda en amplitud, si la lista es FIFO
Bsqueda en profundidad, si la lista es LIFO

Animaciones
La estrategia que sigamos dar origen a rboles con distintas
propiedades.
Note que el orden en que se recorren los arcos A(i) influye en el
ordenamiento de la lista de nodos que se agregan a la lista. Por
convencin, recorreremos los arcos ordenados segn el nodo
donde incide el arco (si (i,j) e (i,k) son arcos consecutivos en A(i),
entonces j<k)

Conjunto de nodos que pueden


alcanzar cierto nodo
Cmo podra resolver este problema tan novedoso?

Algoritmo de bsqueda hacia atrs


Luego, el algoritmo anterior ser Algoritmo de bsqueda hacia
adelante
En cada uno de estos algoritmos, adems del conjunto de nodos,
qu obtenemos como subproducto?

Determinar si una red es


fuertemente conexa
Cmo podra resolver este problema?
Cul es el orden de complejidad de este algoritmo?
En caso que la red resulte conexa qu obtenemos como
subproducto? y en el caso no conexo?

Determinar si una red es cclica


Cmo podra resolver este problema tan novedoso?
Para una red con n nodos, ordenados en un arreglo, de modo
que orden(i) es la etiqueta del nodo en el arreglo, se tiene que
estas etiquetas definen un orden topolgico de una red si se
cumple:
Por ejemplo:

orden(i) orden( j) (i , j) A
1

32

5
5
3

1
23

4
4

Determinar si una red es cclica


Luego, el orden topolgico de una red (si existe) no
necesariamente es nico.
Qu sucede en una red cclica?
Podemos demostrar que una red es acclica si y slo si admite un
orden topolgico (tarea)
El algoritmo que encuentra el orden topolgico de una red:
toma un nodo con grado de entrada 0, le asigna un nmero
(correlativo)
borra todos los arcos salientes del nodo
itere hasta que no queden nodos con grado de entrada cero

Animacin

Determinar si una red es cclica


Al final del algoritmo:
Si se acaban los nodos, la red es acclica y los nmeros
asignados estn ordenados topolgicamente
En otro caso, la subred que nos queda es cclica.
Correctitud: En cada iteracin del mtodo, desde el nodo
seleccionado slo salen arcos. Estos arcos apuntan a nodos que
sern revisados en iteraciones posteriores, por lo que
necesariamente tendrn un mayor valor del correlativo.
Finiteness: En cada iteracin se revisa un nodo. Como el nmero
de nodos es finito

Determinar si una red es cclica


Una implementacin eficiente del algoritmo guardar una lista
de nodos con grado de entrada cero, de modo de no revisar todos
los restantes en cada iteracin (Cul sera la complejidad del
algoritmo si no se guardara esta lista?)
Para determinar si un nodo entra a la lista, es necesario revisar
los arcos salientes en los nodos examinados, i.e., todos los arcos.
Luego la complejidad de esta implementacin es O(m)
Cmo encontrara un ciclo en una red cclica?

Vous aimerez peut-être aussi