Está en la página 1de 26

UNIVERSIDAD DE CARABOBO

FACULTAD DE INGENIERIA
DEPARTAMENTO DE COMPUTACIÓN
CATEDRA DE COMPUTACION II
 La búsqueda es una de las operaciones
más básicas y necesaria en muchos
casos.

 Al establecer una búsqueda, Su proceso


debe ser:
› Eficiente y
› Flexible para adaptarse a distintos tipos de
problemas.
 ¿El número 8 está en la lista siguiente?
› 4-9-2-7-5-8-0-1-6

 ¿El número 8 está en la lista siguiente?


› 4-0-2-9-5-7-1-6-3

 ¿Cómo lo Determinó?
• En un Búsqueda humana
– “Solo tiene que ver la lista”
– Y el cerebro puede procesar listas de
pequeño tamaño (5 – 9 elementos)
automáticamente.

• En cambio en una Búsqueda


computarizada
– No puede procesar la lista completa, sino
– Debe examinarse los datos elemento por
elemento, para ver si existe este.
1. Búsqueda Secuencial
2. Búsqueda Binaria
 Suponga que usted tiene una lista, y
necesita encontrar un elemento en
particular, por ejemplo,
› Buscar una palabra en el diccionario.
› Buscar un número en una guía
telefónica.
› Localizar el examen de un estudiante en
paquete de exámenes.
 La búsqueda es una tarea común en
computación.
• Buscar en una Base de Datos.
• Chequear la clave de un usuario.
• Buscar el valor asignado a una
variable en la memoria.
 Si los elementos en la lista están
desordenados (por ejemplo, agregados
al azar)
• El elemento buscado puede estar en
cualquier punto de la lista.
• Se necesita buscar sistemáticamente
en la lista, comparando cada
elemento con el deseado hasta
encontrarlo.
•  Búsqueda Secuencial
 Debe proceder en una forma lógica.
› Examinar elementos aleatoriamente en la lista es
ineficiente.

 Idea Básica de una Búsqueda Secuencial.


› Recorra la lista elemento a elemento hasta que:
 Encuentre el elemento buscado, o
 No existan más elementos que comparar en la lista.
Valor Buscado (k) = 14

¿ Es igual a K ? NO
SI

A 2 5 3 6 14 7 12 10 8 15 22 16

Elementos (N) = 12 Se encontró en la posición (i) = 4


Tope (tA) = 11
Function BusquedaPosicion(ByVal V() As Integer,
ByVal tV As Integer, ByVal Valor As Integer) As Integer
Dim I As Integer = 0
While (I < tV) And (V(I) <> Valor)
I = I + 1
End While
If V(I) = Valor Then
BusquedaPosicion = I
Else
BusquedaPosicion = -1 ‘ Valor no encontrado
End If
End Function
 El número de comparaciones que se
necesitan para encontrar el elemento k
depende de la posición de k en la lista de
elementos A.

 Si k = A[0], se necesita 1 comparación


 k = A[1], se necesitan 2 comparaciones
 k = A[2], se necesitan 3 comparaciones
 k = A[N-1], se necesitan N comparaciones
¿El Mejor Caso? Si k está en A[0] k = 2

A 2 5 3 6 14 7 12 10 8 15 22 16

Se compara 1 vez
Si está en A[tA]
¿ El Peor Caso ? k = 16
Ó No se encuentra

A 2 5 3 6 14 7 12 10 8 15 22 16

Se compara N vez
• Usa un solo ciclo
– Es lineal, busca en todos los elementos.
– Es lento, si no existe el elemento a buscar en la lista,
recorre toda la lista.
• Se realizan tres acciones en el ciclo
– Se compara el valor del elemento de la lista con el
valor buscado.
– Se pregunta si se está en el final de la lista.
– Se incrementa el contador de elementos.
1. Búsqueda Secuencial
2. Búsqueda Binaria
 ¿Existirá una forma más eficiente de
hacer una búsqueda que la búsqueda
secuencial?
 Ejemplo:
› ¿ Cómo encuentra una palabra en el
diccionario o un número de teléfono en la
guía telefónica ?
› Asuma que la lista está ordenada y divida la
lista en dos.
Si (valor = elemento [posición media]) entonces
‘Se encontró’
SiNo
Si (valor < elemento [posición media]) entonces
Buscar en la mitad izquierda de la lista
SiNo
Buscar en la mitad derecha de la lista
Búsqueda Binaria
Caso 1: valor = A[medio]
valor Buscado = 10
inicio = 0, fin = 8
medio = (inicio + fin) \ 2 = 4

A: 1 5 7 9 10 13 17 19 27
0 1 2 3 4 5 6 7 8

inicio medio fin


Búsqueda Binaria
Caso 2: valor > A [medio]
valor Buscado = 19
inicio = 0, fin = 8
medio = (inicio + fin) \ 2 = 4
nuevo inicio = medio + 1 = 5

A: 1 5 7 9 10 13 17 19 27
0 1 2 3 4 5 6 7 8

inicio medio nuevo inicio fin


Búsqueda Binaria
Caso 3: valor < A [medio]
valor Buscado= 7
inicio = 0, fin = 8
medio = (inicio + fin) \ 2 = 4
nuevo fin = medio - 1 = 3

A: 1 5 7 9 10 13 17 19 27
0 1 2 3 4 5 6 7 8

inicio nuevo fin


medio
fin
Búsqueda Binaria – Continuando el caso 3

valor = 7
A: 1 5 7 9 10 13 17 19 27
0 1 2 3 4 5 6 7 8

A: 1 5 7 9 10 13 17 19 27
0 1 2 3 4 5 6 7 8

A: 1 5 7 9 10 13 17 19 27
0 1 2 3 4 5 6 7 8
‘ Con el Arreglo ordenado en forma ascendente
Function BusquedaPosicion(ByVal V() As Integer, _
ByVal tV As Integer, ByVal Valor As Integer) As Integer
Dim Inicio As Integer = 0
Dim Final As Integer = tV
Dim Medio As Integer = (Inicio + Final) \ 2
While (Inicio<Final) And (V(Medio)<>Valor)
If V(Medio)>Valor Then
Final = Medio - 1
Else
Inicio = Medio + 1
End If
Medio = (Inicio + Final) \ 2
End While
If V(Medio)=Valor Then
BusquedaPosicion = Medio
Else
BusquedaPosicion = -1 ‘ No se consigue
End If
End Function
En el caso de la búsqueda en arreglos tipo Matriz, el
algoritmo a seguir puede ser cualquiera de los dos
presentados anteriormente, con la diferenciación que
éste es empleado en la dimensión que se desea
buscar el valor (Fila o Columna).
Buscar el valor 7 en
la Columna 3
Buscar el Valor 6
En la Fila 1
Function BusquedaFila(ByVal M(,) As Integer,
ByVal X As Integer, ByVal tC As Integer,
ByVal K As Integer) As Integer
Dim I As Integer = 0
BusquedaFila = -1 ‘ Partiendo que no esta el valor
‘ Verificar que se encuentra el valor
While (I < tC) And (M(X, I) <> K)
I = I + 1
End While Observe que se aplica el algoritmo
If M(X, I) = X Then de búsqueda secuencial, en la
BusquedaFila = I dimensión de las columnas de la
End If matriz
End Function
 La búsqueda secuencial se puede usar
en cualquier lista (ordenada o
desordenada), pero es ineficiente.

 Para la búsqueda binaria se requiere


que la lista esté ordenada y es más
eficiente que la secuencial.