Sie sind auf Seite 1von 3

Eliel

Jesús Macías Gómez


Numero de cuenta: 313080195

Búsquedas Binarias
Búsqueda Binaria Ingenua

Esta búsqueda recibe 2 parámetros; la lista y el dato que buscamos. Y supone que le estamos dando una
lista ordenada, es un algoritmo de divide y vencerás.

En la primera instrucción parte la lista a la mitad y verifica si el dato es igual a la mitad de la lista, si no es así

Hace la llamada recursiva pero con la mitad de la lista a la izquierda o o la derecha dependiendo si el dato es
mayor o menor a la mitad (por esto supone que le damos una lista ordenada), y vuelve a llamar a la función
pero con una esta nueva lista, esto lo hace hasta encontrar el valor.

El problema en esta búsqueda es que cuando hace la llamada recursiva, modifica el valor de la lista,
entonces al entregar el resultado lo hace con la lista modificada y no da la posición en el lugar original de la
lista.

Para corregir esto realizamos el el algoritmo de búsqueda binaria.

Búsqueda Binaria

Esta nueva función lo que hace para no modificar el valor de la lista es que le tenemos que entregar dos,
nuevos parámetros izquierda y derecha que en este caso 0 y la longitud de la lista respectivamente (esto se
puede mejorar metiendo los valores dentro de la función y no pedirlos como parámetros para que se
ejecute)

Al igual que el algoritmo anterior es recursivo, y hace lo mismo que el algoritmo anterior solo que la mitad
se define con estos nuevos 2 valores izquierda y derecha

Mitad= izquierda +((izquierda – derecha)/2)

Esto ayuda a corregir el error anterior, ya que la llamada recursiva de la función búsqueda se realiza de la
mitad al lado izquierdo o derecho dependiendo como en el algoritmo anterior

Solo que aquí la nueva llamada a la función se realiza de la variable mitad al lado derecho o izquierdo
dependiendo de si la mitad de la lista fue menor o mayor al dato, notamos que la llamada recursiva se
realiza con la misma lista lo que cambia es la variable izquierda o derecha.

El problema con este algoritmo es que si el dato que le dimos no se encuentra en la lista proporcionada, la
llamada recursiva entra en un bucle, y no devuelve ningún valor la función, la terminal marca error.

Una manera de corregir esto es haciendo la función iterativa y no recursiva.


Eliel Jesús Macías Gómez
Numero de cuenta: 313080195

Búsqueda Binaria Iterativa

En este algoritmo lo único que le pedimos a la función es el dato que deseamos buscar y una lista donde
buscarlo.

Al igual que en el algoritmo anterior toma el lado derecho e izquierdo pero lo definimos dentro de la función
tomando izquierdo = 0, derecho = len(lista)-1 y usamos un ciclo while , queremos que corrra mientras el lado
izquierdo sea mejor que el menor o igual que el derecho. Este también es un algoritmo de divide y venceras
entones toma la mitad = (izquierdo + derecho)//2, si el dato es menor que la mitad de la lista la variable
“derecho” cambia de valor a “mitad -1” esto es porque del lado derecho original no vamos a encontrar el
dato ya que supone que la lista esta ordenada, y si el dato es mayor que la posición de la lista en la mitad
desecha el lado izquierdo haciendo que tome el valor de “mitad +1”.

Y para sale del ciclo cuando izquierdo > derecho es decir cuando no encuentra el dato y en este caso
devuelve el valor Booleano False.

Orden de Complejidad

Búsqueda Binaria

Numero de iteraciones Longitud del segmento

1 n

2 n/2

3 (n/2)/2=n/2^2

4 n/2^3

. .

.. ..

t n/2^t-1

Para llegar al tamaño de búsqueda 1 hacemos t iteraciones

1 = n/2^t-1 entonces 2^t-1=n entonces t= 1 + log2 (n)

por lo tanto la complejidad O(Log2n)


Eliel Jesús Macías Gómez
Numero de cuenta: 313080195

Búsqueda lineal

El mejor caso es cuando el elemento buscado esta en la primera posición y solo realiza una comparación.

El pero caso es cuando el elemento esta al final de la lista, en este caso el algoritmo tiene que realizar
comparaciones dependiendo de la longitud de la lista

En el caso de una lista de longitud n realiza n comparaciones el costo en el peor caso es O(n), es decir tiene
un orden lineal.

Das könnte Ihnen auch gefallen