3-2do PA
Investigar información sobre los métodos de búsqueda (primero en anchura, primero en profundidad). Discutir en grupo los diferentes algoritmos de búsqueda, presentado un reporte con las conclusiones logradas en el salón
Búsqueda en
Anchura:
La búsqueda general de un nodo
de partida A es la siguiente:
1.
Examinar el nodo de
partida A
2.
Examinar todos los
nodos vecinos de A
3.
Examinar todos los
nodos vecinos de los vecinos del nodo A, así sucesivamente.
4.
Garantizar que
ningún nodo se procese más de una vez
5.
Utilizar una cola
para mantener los nodos en espera de procesamiento, utilizando el campo ESTADO,
para que especifique el estado actual de los nodos.
Algoritmo:
Formulación del problema.
Realizar la búsqueda en anchura
de un grafo G comenzando con el nodo de partida A
1.
Inicializar todos
los nodos al estado de preparado (ESTADO = 1)
2.
Poner el nodo de
partida A en la COLA y cambiar el estado a espera (ESTADO = 2)
3.
Repetir los siguientes
pasos: 3 y 4, hasta que la COLA, este vacía
4.
Quitar el nodo del
principio de la COLA, N. Procesar N y cambiar su estado a procesado (ESTADO=3)
5.
Añadir a la COLA
todos los vecinos de N que estén en estado de preparado (ESTADO = 1) y cambiar su
estado al de espera (ESTADO = 2)
[Fin de bucle
del paso 3]
6.
Salir
Nomenclatura:
Raíz
Rama
Frado
Nivel
Altura
Ventajas:
ü Siempre encuentra solución
ü Optimo
Desventajas:
o
Nodos inútiles
o
Aplica a problema
sencillos
Búsqueda en
Profundidad:
Busca
la solución en profundidad en todos los nodos hasta llegar a ella. Siempre
comienza y hace el recorrido por nuestro lado izquierdo.
Es
el algoritmo que permite recorrer todos los nodos de un grafo o árbol de manera
ordenada, dentro de la teoría de grafos. Su funcionamiento consiste en ir
expandiendo todos y cada uno de los nodos que va alcanzando, de forma
recurrente, en un camino en concreto, cuando ya no existen más nodos que
visitar en el camino, se regresa para iniciar de nuevo con cada uno de los
hermanos del nodo ya procesado, a este proceso se le denomina Backtracking.
Pseudocódigo
algoritmo búsqueda en profundidad
funcion buscar_en_hijos(Nodo:n)
variable encontrado=boolean
inicio
si solucion(n->hijo)
retornar n->hijo
sino
n1=n->hijo
encontrado=falso
mientras no (encontrado)
n1=n1->hermano
si solucion(n1)
retornar n1
sino
n1=null
romper ciclo
buscar_en_hijos(n->hijo)
n2->n->hijo
mientras(n2->hermano!=null)
n2=n2->hermano
buscar_en_hijos(n2)
fin si
fin mientras
fin función
Conclusión
Como
conclusión se puede decir con certeza que a pesar de ser dos puntos
relativamente sencillos como se puede ver, en cuanto a la búsqueda primero en anchura
es más de una forma ordenada ya que se recorre nodo por nodo, es decir que si
tenemos tres nodos, aunque la solución se encuentre en el tercer nodo, de todas
formas este empezará desde el primer nodo hasta llegar al tercero, y cada nodo
de tener otros nodos hijos los revisará igualmente en ese orden lo que
realmente si se toma a consideración a la hora de hacer un programa que funcione
de esta forma, realmente es más tardado en encontrar la solución, pero eso no
impide el que la solución más rápida para resolver un problema se encontrará y
me refiero a la hora de realizar un programa que nos permita ganar un puzzle de
forma rápida, así mismo si tomamos a consideración el orden también se debe
hablar de la búsqueda en profundidad; esta pues bien, si bien recorre en orden
y como el nombre lo indica a profundidad del nodo que nosotros seleccionamos,
pues bien, tiene esa ventaja, que nosotros podemos seleccionar el nodo que se
recorrerá a profundidad, más no indica que de forma uniforme debemos recorrer
nodos del 1 al 3, dando esa ventaja de poder seleccionar el que nosotros queramos
para encontrar una solución, aunque si se toma en cuenta, también esto podría
verse como un tipo de azar ya que al no ser ordenado recorremos todo de forma
aleatoria refiriéndome al nodo que uno elige.
Comentarios
Publicar un comentario