Beruflich Dokumente
Kultur Dokumente
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.
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
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.
Eliel Jesús Macías Gómez
Numero de cuenta: 313080195
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
1 n
2 n/2
3 (n/2)/2=n/2^2
4 n/2^3
. .
.. ..
t n/2^t-1
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.