Algoritmos y Estructuras de Datos

✨ Nivel
🕗 Duración
💻 Práctica
Intermedio
4-8 meses
Más de 400 ejercicios de programación
¡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.
notion image
notion image
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
Heap (Montículo)
  • Heapify
  • Heap sort
Hashing
  • Funciones de hash
  • Colisiones
Programación dinámica avanzada (Advanced Dynamic Programming)
  • Distancia de edición (Edit Distance)
  • Problema de la mochila (Knapsack problem)
  • Subsecuencia creciente más larga (Longest Increasing Subsequence)
  • Multiplicación eficiente de n matrices
Representaciones de grafos (Graph Representations)
  • Matriz de adyacencia
  • Lista de adyacencia
  • Lista de aristas
  • Grados de los vértices
Búsqueda en anchura (BFS)
  • BFS en grafos
  • Encontrar la ruta más corta
  • BFS en una cuadrícula (grid)
  • BFS en otras estructuras
Búsqueda en profundidad (DFS)
  • Conectividad
  • Ciclos
  • Ordenamiento topológico (Topological sort)
  • Bipartición (Bipartidness)
Trie
  • Búsqueda de cadenas (String searching)
Dijkstra
  • Encontrar la ruta más corta en un grafo ponderado
  • Trucos para distintos problemas que simplifican y mejoran el tiempo de ejecución
Backtracking
  • N Reinas (N Queens)
  • Coloreo de grafos (Graph coloring)
  • Rellenar cuadrículas con valores
Árbol segmentado (Segment Tree)
  • Árbol segmentado básico - construcción, consulta, actualización
  • Consultas de rango y actualización de valores
  • Búsqueda binaria en un prefijo
  • Almacenar múltiples valores en un nodo
  • 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!