Sei sulla pagina 1di 8

Inicio Libros Tutoriales Eventos Foro Buscar

Libros / Algoritmos de Programacin con Python / Captulo 8. Algoritmos de bsqueda


/ 8.3. Bsqueda lineal

8.3. Bsqueda lineal


Diseamos una solucin: Podemos comparar uno a uno los elementos de la lista con el
valor de x , y retornar el valor de la posicin donde lo encontramos en caso de
encontrarlo.

Si llegamos al final de la lista sin haber salido antes de la funcin es porque el valor de
x no est en la lista, y en ese caso retornamos 1 .

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
En esta solucin necesitamos una variable i que cuente en cada momento en qu
posicin de la lista estamos parados. Esta variable se inicializa en 0 antes de entrar en
el ciclo y se incrementa en 1 en cada paso.

El programa nos queda entonces como se muestra en el Cdigo 8.2.

# Cdigo 8.2 busqueda_lineal.py: Funcin de bsqueda lineal

#!/usr/bin/env python
# encoding: latin1

def busqueda_lineal(lista, x):


""" Bsqueda lineal.
Si x est en lista devuelve su posicin en lista, de lo
contrario devuelve -1.
"""

# Estrategia: se recorren uno a uno los elementos de la lista


# y se los compara con el valor x buscado.
i=0 # i tiene la posicin actual en la lista, comienza en 0

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
# el ciclo for recorre todos los elementos de lista:
for z in lista:
# estamos en la posicion i, z contiene el valor de lista[i]

# si z es igual a x, devuelve i
if z == x:
return i

# si z es distinto de x, incrementa i, y contina el ciclo


i=i+1

# si sali del ciclo sin haber encontrado el valor, devuelve -1


return -1

Y ahora lo probamos:

>>> busqueda_lineal([1, 4, 54, 3, 0, -1], 44)


-1
>>> busqueda_lineal([1, 4, 54, 3, 0, -1], 3)
3
>>> busqueda_lineal([1, 4, 54, 3, 0, -1], 0)
4
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
>>> busqueda_lineal([], 0)
-1
>>>

8.3.1. Cuntas comparaciones hace este programa?


Volvemos a preguntarnos lo mismo que en la seccin anterior, pero con el nuevo
programa: cunto esfuerzo computacional requiere este programa?, cuntas veces
compara el valor que buscamos con los datos de la lista? Ahora podemos analizar el
texto de busqueda_lineal :

La lnea 16 del cdigo es un ciclo que recorre uno a uno los elementos de la lista, y
en el cuerpo de ese ciclo, en la lnea 20 se compara cada elemento con el valor
buscado. En el caso de encontrarlo (lnea 21) se devuelve la posicin.

Si el valor no est en la lista se recorrer la lista entera, haciendo una comparacin


por elemento.

O sea que si el valor est en la posicin p de la lista se hacen p comparaciones, y si el


valor no est se hacen tantas comparaciones como elementos tenga la lista.

Nuestra hiptesis es: Si la lista crece, la cantidad de comparaciones para encontrar


open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
un valor arbitrario crecer en forma proporcional al tamao de la lista.

Diremos que este algoritmo tiene un comportamiento proporcional a la longitud de la


lista involucrada, o que es un algoritmo lineal.

En la prxima seccin veremos cmo probar esta hiptesis.

Anterior Siguiente
8.2. Cmo programar la bsqueda lineal a mano 8.4. Buscar sobre una lista ordenada

Copyright (c) 2011-2014 Rosita Wachenchauzer, Margarita Manterola, Maximiliano Curia, Marcos Medrano,
Nicols Paez. La copia y redistribucin de esta pgina se permite bajo los trminos de la licencia Creative
Commons Atribucin - Compartir Obras Derivadas Igual 3.0 siempre que se conserve esta nota de copyright.

INDICE DE CONTENIDOS

1. Algunos conceptos bsicos

2. Programas sencillos

3. Funciones
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
4. Decisiones

5. Ms sobre ciclos

6. Cadenas de caracteres

7. Tuplas y listas

Captulo 8. Algoritmos de bsqueda

8.2. Cmo programar la bsqueda lineal a mano

8.3. Bsqueda lineal

8.4. Buscar sobre una lista ordenada

8.5. Bsqueda binaria

8.6. Resumen

8.7. Ejercicios

9. Diccionarios

10. Contratos y Mutabilidad

11. Manejo de archivos

12. Manejo de errores y excepciones

13. Procesamiento de archivos

14. Objetos

15. Polimorfismo, Herencia y Delegacin

16. Listas enlazadas

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
17. Pilas y colas

18. Modelo de ejecucin de funciones y recursividad

19. Ordenar listas

20. Algunos ordenamientos recursivos

3.757
2006-2017 LibrosWeb.es Contacto Novedades Condiciones Privacidad

das online

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com