Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semana 13
CS1111 - Programación 1 Computer Science
Semana 13
TEORÍA (2 Horas) LABORATORIO (4 Horas )
Índice
1. Linear Search
2. Binary Search
3. Linear & Binary Search
3
CS1111 - Programación 1 Computer Science
0 Repaso
4
CS1111 - Programación 1 Computer Science
input → = + → output
input → = + → output
1 Linear Search
7
CS1111 - Programación 1
8
CS1111 - Programación 1
9
CS1111 - Programación 1
Linear Search I
Programa:
1 def linear_search(lista, e):
2 for i in range(len(lista)):
3 if lista[i] == e :
4 return True
5 return False
6
7 lista = [10, 14,19, 26, 27, 31, 33, 35, 42, 44]
8 result = linear_search(lista, 33)
11
CS1111 - Programación 1
Linear Search II
Programa:
1 def linear_search(lista, e):
2 n_iter = 0
3 for i in range(len(lista)):
4 n_iter += 1
5 if lista[i] == e :
6 return True, n_iter
7 return False, n_iter
8
9 lista = [10, 14,19, 26, 27, 31, 33, 35, 42, 44]
10 result, n_iter = linear_search(lista, 33)
12
CS1111 - Programación 1
Programa:
1 lista = generate_list(100)
2 result, n_iter = linear_search(lista, e)
13
CS1111 - Programación 1
Programa:
1 import matplotlib.pyplot as plt
2
3 results = np.zeros((1000, 3), np.uint16)
4 for i in range(1, 1000):
5 lista = generate_list(i)
6 e = rd.randint(0,i)
7 results[i][0] = i
8 results[i][1], results[i][2] = linear_search(lista, e)
9
10 plt.plot(results[:,0:1], results[:, 2:3], 'go')
11 plt.show()
14
CS1111 - Programación 1
15
CS1111 - Programación 1 Computer Science
POLL
16
CS1111 - Programación 1 Computer Science
2 Binary Search
17
CS1111 - Programación 1
Binary Search
Programa:
1 def binary_search(lista, e):
2 if len(lista) == 1:
3 return lista[0] == e
4
5 middle = len(lista)//2
6 if lista[middle] == e:
7 return True
8 elif e < lista[middle] :
9 return binary_search(lista[:middle], e )
10 else:
11 return binary_search(lista[middle:], e )
19
CS1111 - Programación 1
Binary Search II
Programa:
1 def binary_search(lista, e, n_iter):
2 if len(lista) == 1:
3 return lista[0] == e, n_iter+1
4
5 middle = len(lista)//2
6 if lista[middle] == e:
7 return middle, n_iter+1
8 elif e < lista[middle] :
9 return binary_search(lista[:middle], e, n_iter+1)
10 else:
11 return binary_search(lista[middle:], e, n_iter+1)
20
CS1111 - Programación 1
Programa:
1 import matplotlib.pyplot as plt
2
3 results = np.zeros((1000, 3), np.uint16)
4 for i in range(1, 1000):
5 lista = generate_list(i)
6 e = rd.randint(0,i)
7 results[i][0] = i
8 results[i][1], results[i][2] = binary_search(lista, e, 0)
9
10 plt.plot(results[:,0:1], results[:, 2:3], 'go')
11 plt.show()
21
CS1111 - Programación 1
Binary Search
22
CS1111 - Programación 1 Computer Science
POLL
23
CS1111 - Programación 1 Computer Science
24
CS1111 - Programación 1
25
CS1111 - Programación 1
26
CS1111 - Programación 1
27
CS1111 - Programación 1
28
CS1111 - Programación 1
29
CS1111 - Programación 1 Computer Science
POLL
30
CS1111 - Programación 1 Computer Science
Resumen
● La búsqueda lineal compara cada uno de los elementos de un
conjunto de datos desordenado con el elemento buscado.
● En el peor de los casos, para un lista de tamaño n la búsqueda
lineal requiere n comparaciones.
● La búsqueda binaria va comparando la mitad de los datos en un
conjunto de datos ordenado.
● En el peor de los casos, para un lista de tamaño n la búsqueda binaria
requiere log2n iteraciones o llamadas recursivas.
● El algoritmo de búsqueda binaria es más eficiente que el de búsqueda
lineal, pero requiere de datos ordenados.
31
Gracias
32