¡Bienvenido(a) a un curso completo de Algoritmos y Estructuras de Datos! Al finalizar el curso, contarás con el conocimiento necesario para optimizar programas de manera significativa, desarrollar una intuición acerca de la eficiencia de cada programa y destacar en entrevistas en las principales empresas tecnológicas como Google, Meta, Amazon, etc. El curso comienza con los fundamentos de algoritmos y estructuras de datos, y profundiza en los temas más populares de este campo.
Las grandes empresas tecnológicas como Google, Meta, Netflix y Amazon llevan a cabo sus entrevistas evaluando un conocimiento profundo de estructuras de datos y algoritmos. Completar este curso te preparará para esas entrevistas.
Las plataformas de trabajo independiente, como Toptal o Turing, exigen que quienes se postulan dominen las Estructuras de Datos y los Algoritmos. Por ello, sus procesos de selección incluyen varias entrevistas enfocadas en conocimientos de algoritmos.
📚 Requisitos previos
Este curso está diseñado para personas que ya tengan cierta experiencia con un lenguaje de programación de propósito general (como Python, C++, Java o C#) y deseen profundizar en el mundo de los algoritmos y las estructuras de datos. Antes de comenzar este curso, deberías sentirte cómodo(a) usando bucles, creando funciones y utilizando las estructuras de datos integradas (como listas, conjuntos o mapas).
🤩 Resultados
Al finalizar este curso, sabrás cómo usar distintas estructuras de datos muy populares para escribir algoritmos eficientes, con rendimientos muy superiores a soluciones ingenuas. Veremos las mejores prácticas para implementar algoritmos y cómo preparar entrevistas algorítmicas.
Este curso se centra en el dominio de cada concepto. Trabajarás con diferentes algoritmos y sus variaciones, resolviendo numerosos problemas para dominar cada uno de ellos.
💻 Aprende haciendo
🔥
El objetivo de aprender algoritmos no es solo conocer la teoría.
El objetivo es desarrollar habilidades de resolución de problemas.
En este curso, ¡aprendes haciendo! Cada concepto incluye varios desafíos interactivos que deberás resolver para pasar al siguiente. De hecho, encontrarás más de 400 ejercicios prácticos de programación en este curso. Creemos que aprender haciendo es la mejor forma de adquirir conocimiento profundo. Aquí encontrarás muchos ejercicios retadores y, al mismo tiempo, interesantes para practicar cada uno de los conceptos que se cubren.
⚡ Estudia a tu propio ritmo
Puedes avanzar rápidamente y completar varios niveles en una semana, o tomarlo con calma y dedicar más tiempo a cada concepto. Tú decides el ritmo que mejor se ajuste a tus necesidades. El único requisito para terminar con éxito el curso es la constancia. Practicar 1 o 2 horas diarias es mucho más efectivo que practicar varias horas un solo día a la semana.
Para asegurarnos de que no te quedes atascado(a), cuentas con un foro para hacer preguntas. Podrás plantear tus dudas o ayudar a otros respondiendo a las suyas en cada desafío.
🎓 Plan de estudios
Este curso se enfoca en los conceptos fundamentales de Estructuras de Datos y Algoritmos, presentándolos de forma intuitiva. Para que el proceso sea más ameno y motivador, los conceptos están organizados en niveles; al terminar cada nivel, habrás dominado un nuevo tema. A continuación, verás los principales contenidos:
Problemas de implementación
El algoritmo está descrito directamente en el enunciado.
Uso de estructuras de datos básicas como arreglos (arrays), diccionarios, conjuntos (sets), etc.
Operaciones bit a bit (Bitwise operations)
Representación binaria de números (int → bin, bin → int)
Números negativos en binario
Operaciones bit a bit OR, AND, XOR
Representación en base-k (base-10 → base-k, base-k → base-10)
Sumas prefijas (Prefix sums)
Suma prefija en 1D
Suma prefija en 2D
Ventana deslizante / Dos punteros (Sliding window / Two pointers)
Ventana deslizante para encontrar la suma
Ventana deslizante para encontrar valores únicos
Teoría de números (Number theory)
Verificación de primalidad - ,
Criba de Eratóstenes
Factorización en primos
Máximo común divisor (GCD) y Mínimo común múltiplo (LCM)
Aritmética modular
Búsqueda binaria (Binary Search)
Búsqueda lineal VS Búsqueda binaria
Encontrar un valor en un arreglo ordenado con búsqueda binaria
Encontrar un número de punto flotante con cierta precisión
Incluir el extremo izquierdo VS incluir el extremo derecho en la respuesta
Búsqueda binaria de la respuesta (Binary search the answer)
Ordenamiento (Sorting)
Bogosort
Selection sort
Insertion sort
Bubble sort
Algoritmos voraces (Greedy Algorithms)
Seguir una estrategia voraz
Heurísticas voraces
Programación dinámica (Dynamic Programming)
Programación dinámica 1D (por ejemplo, Fibonacci)
Coin change (min coins)
Coin change (número de formas)
Recursión
Factores de ramificación
Gray code
Torres de Hanoi
División recursiva de un problema en subproblemas
Divide & Conquer y Ordenamiento avanzado
Merge sort
Quick sort
Ordenamiento in-place
La complejidad de un ordenamiento basado en comparaciones siempre es ≥
Lista enlazada (Linked List)
Nodos y enlaces
Recorrido y búsqueda
Operaciones de eliminación e inserción
Cola y Pila (Queue & Stack)
Orden de inserción y de extracción
Optimización de búsqueda con una pila
Árbol binario y Árbol binario de búsqueda (BST)
Construcción de un árbol binario
Búsqueda en un árbol binario
Actualización y eliminación de elementos en un árbol
Preprocesar la entrada y luego usar un árbol segmentado
Complejidad de algoritmos (Algorithm Complexity)
Notación Big de manera formal
P vs NP
🚀 ¡Bienvenid@!
Aprender consiste en un 80% de trabajo individual. Completar este curso será tu propio logro, ¡y nosotros estamos aquí para apoyarte a lo largo de todo el proceso!