Está en la página 1de 32

1

Search & Complexity


Programación 1

Semana 13
CS1111 - Programación 1 Computer Science

Semana 13
TEORÍA (2 Horas) LABORATORIO (4 Horas )

● Algoritmos de búsqueda ● Implementar algoritmos de búsqueda


● Complejidad Computacional
● Examen Parcial 2 : 15 de Diciembre

ASESORÍA (2 Horas) (Opcional) HOMEWORK (4 Horas)

● Resolución & Recorrección de la Tarea 3 ● Repasar el material del curso (2 Horas)


● Tarea 4 (pronto a ser publicada!) ● Resolver la guía de ejercicios
● 3 Horarios de Asesoría (opcionales): ● Empezar con la Tarea 4
○ Jueves de 3 a 5 PM
○ Jueves de 7 a 9 PM
○ Viernes de 5 a 7 PM
2
CS1111 - Programación 1 Computer Science

Í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

¿Qué veremos hoy?

input → = + → output

● Un algoritmo es un conjunto de instrucciones y reglas seguir.


○ Variables & Condicionales + Loops ○ Archivos
○ Strings & Funciones ○ Recursión
○ Arrays & Matrices
○ Imágenes
○ Diccionarios 5
CS1111 - Programación 1 Computer Science

¿Qué veremos hoy?

input → = + → output

● Un algoritmo es un conjunto de instrucciones y reglas seguir.


○ Variables & Condicionales + Loops ○ Archivos
○ Strings & Funciones ○ Recursión
○ Arrays & Matrices ○ Búsqueda
○ Imágenes
○ Diccionarios 6
CS1111 - Programación 1 Computer Science

1 Linear Search

7
CS1111 - Programación 1

Búsqueda Lineal / Linear Search

8
CS1111 - Programación 1

Búsqueda Lineal / Linear Search

9
CS1111 - Programación 1

Búsqueda Lineal / Linear Search

Linear Search GIF https://www.tutorialspoint.com/data_structures_algorithms/linear_search_algorithm.htm


10
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

Linear Search & Random List


Programa: Programa:
1 def linear_search(lista, e): 1 import random as rd
2 n_iter = 0 2 def generate_list(n):
3 for i in range(len(lista)): 3 random_list = []
4 n_iter += 1 4 for i in range(n):
5 if lista[i] == e : 5 n_random = rd.randint(0,n)
6 return True, n_iter 6 random_list.append(n_random)
7 return False, n_iter 7 return random_list

Programa:
1 lista = generate_list(100)
2 result, n_iter = linear_search(lista, e)
13
CS1111 - Programación 1

Linear Search & Random List (Nivel 2)

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

Linear Search - Complejidad en Tiempo

15
CS1111 - Programación 1 Computer Science

POLL
16
CS1111 - Programación 1 Computer Science

2 Binary Search

17
CS1111 - Programación 1

Búsqueda Binaria / Binary Search

Binary Search GIF from https://brilliant.org/wiki/binary-search/


18
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

Binary Search & Random List (Nivel 2)

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

2 Linear & Binary Search

24
CS1111 - Programación 1

Linear and Binary Search ( 1 <= n <= 10 )

25
CS1111 - Programación 1

Linear and Binary Search ( 1 <= n <= 100 )

26
CS1111 - Programación 1

Linear and Binary Search ( 1 <= n <= 500 )

27
CS1111 - Programación 1

Linear and Binary Search ( 1 <= n <= 1000 )

28
CS1111 - Programación 1

Linear and Binary Search

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

También podría gustarte