Jose Francisco Romero Meza
sort ordena la lista creada y sorted ordena una lista en una nueva sin modificar la original
Rhonal Velasco
Que eso no lo enseño antes David?
Rhonal Velasco
SI, ya me acorde
Comprender y elegir algoritmos marca la diferencia entre soluciones simples y eficientes. Aquí verás cómo pasar de la fuerza bruta a la búsqueda binaria en listas ordenadas, por qué importa la eficiencia cuando las listas crecen más que el espacio disponible en tu computadora, y cómo llevarlo luego a código en Python.
¿Por qué los algoritmos importan en programación?
Los algoritmos son una secuencia de instrucciones para resolver un problema específico. A lo largo de tu carrera te encontrarás con muchos tipos, y la clave es empezar por lo más sencillo y evolucionar hacia lo más eficiente cuando el tamaño de los datos lo exige.
Cuando la lista es muy grande, la solución ingenua deja de funcionar: recorrer todo consume tiempo y, en ocasiones, excede la memoria. Por eso conviene pensar en estrategias que reduzcan el espacio de búsqueda desde el inicio.
¿Qué es fuerza bruta y cuándo falla?
La fuerza bruta busca un elemento revisando cada posición. Si te piden encontrar el 2 y está al principio, lo hallas en un paso. Pero si te piden el 10 y está al final, revisas todo.
¿Cómo se recorre una lista con una búsqueda secuencial?
Si no conoces el contenido de la lista, vas elemento por elemento, por ejemplo con una for loop. En el ejemplo, para encontrar el 10 en una lista no ordenada, se revisaron 8 elementos: uno, dos, tres… hasta el ocho. El costo crece a la par del tamaño de la lista.
¿Qué es búsqueda binaria y por qué es eficiente?
La búsqueda binaria funciona en una lista ordenada y permite descartar la mitad en cada paso. Si el elemento a buscar es mayor que el de la mitad, descartas la mitad inferior; si es menor, descartas la superior. Así reduces drásticamente comparaciones.
Es una estrategia muy eficiente: particiona la lista en mitades con cada iteración, evitando revisar uno por uno como en la fuerza bruta.
¿Cómo se aplica en una lista ordenada?
Imagina una lista ordenada: 2, 3, 4, 5, 9, 10, 14, 15, 16, 19. Los índices empiezan en 0, por lo que con el último índice llegas a 10 elementos.
Resultado: se encontró el número en 3 pasos frente a revisar toda la lista. Al crecer la lista, la diferencia se vuelve todavía más marcada: pasar de cientos o miles de comparaciones a unas cuantas decenas.
¿Qué habilidades y keywords aparecen en la explicación?
¿Cómo llevarlo a código en Python con buenas prácticas?
Primero entiende el proceso de razonamiento de forma visual: qué comparas, cuándo descartas y cómo usas los índices. Después tradúcelo a Python cuidando detalles como:
¿Con qué método ordenarías antes de buscar: sort o sorted? Si ya lo tienes claro, compártelo en los comentarios y cuéntanos en qué casos te ha funcionado mejor cada enfoque.
Jose Francisco Romero Meza
sort ordena la lista creada y sorted ordena una lista en una nueva sin modificar la original
Rhonal Velasco
Que eso no lo enseño antes David?
Rhonal Velasco
SI, ya me acorde
Jonathan Macalupu Reyes
Comparto una imagen donde podrán ver el ejercicio de la clase por pasos:
Axel Gómez
Con esto fue mucho mas fácil entenderlo, gracias c:
alvamar zapata
gracias!
Néstor Iván Cepeda Munevar
"O lo encontramos o dividimos la lista por la mitad"
Busqueda binaria en una lista ordenada de elementos
Jesus Adolfo Osorio Ziga
Excelente aporte.
Wilson Fernando Antury Torres
Libro recomendado: https://link.springer.com/book/10.1007/978-3-319-13072-9
Carlos Enrique Ramírez Flores
se ve que esta bueno ! voy a dar una checada
Samuel Paredes
Para entender algoritmos les recomiendo este video de Fredy Vega explicando en 7 minutos!
Miguel Ángel Torres Vargas
David tiene un error, al encontrar el punto medio no es 5 + 4 = 9 NO!
Tenemos
2, 3, 4, 5, 9, 10, 14, 15, 16, 19
Sus indices entonces son:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Quedando de la siguiente manera:
[2, 3, 4, 5, 9, 10, 14, 15, 16, 19] 0, 1, 2, 3, 4, 5 , 6 , 7 , 8 , 9
Para encontrar el punto medio se toma el indice inicial ACTUAL, se suma con el indice medio FINAL y luego se divide entre dos:
(0 + 9) / 2 = 9 / 2 = 4.5
Aproximando al valor minimo da:
4
Enrique Devars
Tienes razón.
Roberto Arriaga
No entiendo: la clase que yo veo esta correcta, me imagino que team platzi, corrigió. Voy a hablar desde mi ignorancia: como es un número de elementos se escogen los dos de enmedio y se dividen entre dos, y el resultado es el que se toma como punto de partida, siento que en algo estoy mal, alguien puede ayudarme, por favor
Jose Vasquez
tengo una libreria con varios metodos de ordenamiento en mi cuenta de github por si les interesa, aun sigo actualizandola con metodos de ordenamiento y metodos de busqueda. Pero esta en C++.
se que estamos en un curso de python pero es realmente facil adaptar la logica empleada, para un codigo de un lenguaje de programacion diferente
Noe Mikhael Huaccharaque Ruiz
Mauricio Gonzalez Falcon
Gracias!
Angel de Jesus Quintero Pereira
sorted(), devuelve una nueva lista ordenada, sin afectar a la lista original. list.sort() ,ordena la lista en el lugar , mutando los índices de la lista y devuelve None(como todas las operaciones en el lugar).
Saúl Báez Terrez
Creo que debieron haber preparado mejor esta clase, su falta de orden ocasiono una explicación pobre. Me parece que improviso, lo cual afecto su ejemplo, que se puede ver al inicio de la explicación cuando duda y traga saliva
Facundo Nicolás García Martoni
Profesor¡Hola Saúl Tu feedback nos sirve mucho para mejorar Platzi cada día. Lo que mencionas no volverá a pasar en la siguiente actualización del curso ;)
Milton Andrés Sanabria
a=[1,5,3,9,1,0,6] sorted(a) [0, 1, 1, 3, 5, 6, 9] a [1, 5, 3, 9, 1, 0, 6] a.sort() a [0, 1, 1, 3, 5, 6, 9]
Yesid Valencia
Hasta el momento he entendido todo y sin problemas pero hubiera sido bueno que explicaras punto por punto como se estructuran, igual que paso con el “Zip” que solo lo fue usando de la nada sin ninguna explicación. ¿Podrías ampliar este conocimiento con otro video?
Sebastian Alejandro Veliz Ysla
Facundo Nicolás García Martoni
Profesor¡Hola @yesid.valencia! Además del uso de la función zip ya explicado por tu compañero @Sebas_Alejandro, ¿qué otra cosa no entendiste?
Roberto Sobarzo
Sort: ordenar lista.
Sorted: crea lista ordenada desde y sin modificar lista original.
Santiago Caldevila
como le gusta explicar este tema a David jajaja ya me lo explico tres veces en un solo path de aprendizaje igual me parece cada vez mas excelente
Evander Nassem Ramírez Hernández
Para reforzar lo aprendido, mirate la clase dada por Facundo del mismo tema y del mismo lenguaje
Omar Daniel Centeno
Otros Algoritmos de búsqueda en Python 🐍
. ✅ Membership Operators ✅ Linear Search ✅ Binary Search ✅ Jump Search ✅ Fibonacci Search ✅ Exponential Search ✅ Interpolation Search
Pedro Alvarado Garcia
Este gif lo ejemplifica perfecta. Arriba la búsqueda binaria y abajo la fuerza bruta.
Saúl Báez Terrez
El algoritmo que explica es hermoso, si no lo entendieron desafortunadamente tendrán que buscar en fuentes externas ya que es de gran utilidad en la ciencia de datos
Paso por paso:
<code> valores = (2,3,4,5,9,10,14,15,16,19) ####### 0 1 2 3 4 5 6 7 8 9 ### "tienen una longitud de 9" "BUSCAMOS LA ' 8 ' POSICIÓN (16)" # "sumamos los números que están en la mitad de la longitud de la tupla(en este caso)" 4+5= 9 # "dividimos el total entre la mitad (2), solo obtenemos la parte entera del cociente" 9/2 = 4.5 = 4 # "afirmamos que que el numero mayor (16) es mayor que 9 y es TRUE por lo tanto" (0<x<4] # "todos los números menores detrás de la posición 4 (inclusivo) son desechados" # "Sumamos 5 + 9 y lo dividimos entre la mitad (2)" 5+9 = 14 14/2 = 7 # "Luego afirmamos que que el numero mayor (16) es mayor que 15 y es TRUE por lo tanto" (0<x<7] # "todos los números menores detrás de la posición 7 (inclusivo) son desechados" # "Sumamos 8 + 9, lo dividimos entre la mitad (2) y solo obtenemos la parte entera del cociente" 8+9 = 17 17/2 = 8 # "y la posición 8 es 16 = 16" </code>
La función zip toma como argumento dos o más objetos (idealmente cada uno de ellos con la misma cantidad de elementos) y retorna los elementos en tuplas que contienen un elemento de cada uno de los iteradores originales.
>>> paises = ["China", "India", "Estados Unidos", "Indonesia"] >>> poblaciones = [1391, 1364, 327, 264] >>> list(zip(paises, poblaciones)) output: [('China', 1391), ('India', 1364), ('Estados Unidos', 327), ('Indonesia', 264)]