Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Realizar Un Trabajo Sobre Algoritmo de Búsqueda
Realizar Un Trabajo Sobre Algoritmo de Búsqueda
Código:000121975
ALGORITMO DE BÚSQUEDA
Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento concreto dentro
de una estructura de datos. Consiste en solucionar un problema de existencia o no de un elemento
determinado en un conjunto finito de elementos, es decir, si el elemento en cuestión pertenece o
no a dicho conjunto, además de su localización dentro de éste. Este problema puede reducirse a
devolver la existencia de un número en un vector.
Búsqueda secuencial:
Se utiliza cuando el contenido del Vector no se encuentra o no puede ser ordenado. Consiste en buscar el
elemento comparándolo secuencialmente (de ahí su nombre) con cada elemento del arreglo o conjunto de
datos hasta que se encuentre, o hasta que se llegue al final del arreglo. La existencia se puede asegurar desde el
momento que el elemento es localizado, pero no podemos asegurar la no existencia hasta no haber analizado
todos los elementos del arreglo. A continuación se muestra el pseudocódigo del algoritmo:
Datos de Entrada:
vec: vector en el que se desea buscar el elemento
tam: tamaño del vector
dato: elemento que se quiere buscar.
Variables
pos: posición actual en el array
pos = 0
Mientras pos < tam:
Si vec[pos]== dato devolver verdadero y/o pos, de lo contrario:
pos = pos + 1
Fin (Mientras)
Devolver falso
Datos de Entrada:
Inserción:
La inserción es similar a la búsqueda y se puede dar una solución tanto iterativa como recursiva. Si
tenemos inicialmente como parámetro un árbol vacío se crea un nuevo nodo como único
contenido el elemento a insertar. Si no lo está, se comprueba si el elemento dado es menor que la
raíz del árbol inicial con lo que se inserta en el subárbol izquierdo y si es mayor se inserta en el
subárbol derecho.
Evolución de la inserción del elemento "5" en un ABB.
Como en el caso de la búsqueda puede haber varias variantes a la hora de implementar la
inserción en el TAD (Tipo Abstracto de Datos), y es la decisión a tomar cuando el elemento (o clave
del elemento) a insertar ya se encuentra en el árbol, puede que éste sea modificado o que sea
ignorada la inserción. Es obvio que esta operación modifica el ABB perdiendo la versión anterior
del mismo.
A continuación, se muestran las dos versiones del algoritmo en pseudolenguaje, iterativa y
recursiva, respectivamente.
Se ha podido apreciar la simplicidad que ofrece la versión recursiva, este algoritmo es la traducción
en C. El árbol es pasado por referencia para que los nuevos enlaces a los subárboles mantengan la
coherencia.
En Python el mecanismo de inserción se define, por ejemplo, dentro de la clase que defina el ABB
(ver más arriba).
Otro ejemplo en Pascal:
La operación de inserción requiere, en el peor de los casos, un tiempo proporcional a la altura del
árbol.
Borrado:
La operación de borrado no es tan sencilla como las de búsqueda e inserción. Existen varios casos a
tener en consideración:
Borrar un nodo sin hijos o nodo hoja: simplemente se borra y se establece a nulo el
apuntador de su padre.
Borrar un nodo con un subárbol hijo: se borra el nodo y se asigna su subárbol hijo como
subárbol de su padre.
Borrar un nodo con dos subárboles hijo: la solución está en reemplazar el valor del nodo
por el de su predecesor o por el de su sucesor en inorden y posteriormente borrar este nodo.
Su predecesor en inorden será el nodo más a la derecha de su subárbol izquierdo (mayor nodo
del subárbol izquierdo), y su sucesor el nodo más a la izquierda de su subárbol derecho (menor
nodo del subárbol derecho). En la siguiente figura se muestra cómo existe la posibilidad de
realizar cualquiera de ambos reemplazos:
if (*a == NULL)
return;
free(aux);
}
}
*aux = *a;
*a = (*a)->hIzquierdo;
}
else
reemplazar(&(*a)->hDerecho, aux);
}
Otras Operaciones
Otra operación sería por ejemplo comprobar que un árbol binario es un árbol binario de búsqueda.
Su implementación en maude es la siguiente:
op esABB? : ABB{X} -> Bool .
var R : X$Elt .
vars I D : ABB{X} .
eq esABB?(crear) = true .
eq esABB?(arbolbBin(R, I, D)) =
(Max(I) < R) and (Min(D) > R) and
(esABB?(I)) and (esABB?(D)) .