Preparación para entrevistas técnicas tipo Hacker Rank.
NOTA: el presente trabajo no entrega soluciones a los ejercicios planteados, sino que anima a que su resolución se haga usando digramas o bien pseudocódigo, para así adquirir la habilidad de comprenderlos, desarrollarlos y explicar su solución durante una entrevista técnica.
algoritmos/
├── README.md ← Este archivo
│
├── 01_recursion_tipos.md ← Secciones 1-8: tipos de recursión
├── 02_optimizacion_recursiva.md ← Sección 9: optimización de recursión
├── 03_reduccion_complejidad.md ← Sección 10: reducción de Big O
│
├── 04_grafos.md ← BFS, Dijkstra, Bellman-Ford, etc.
├── 05_heap_priority_queue.md ← Heap binario, cola de prioridad
├── 06_algoritmos_greedy.md ← Algoritmos voraces
├── 07_colecciones_java.md ← Colecciones Java con complejidades
├── 08_sorting_completo.md ← Todos los algoritmos de ordenamiento
├── 09_union_find.md ← Disjoint Set Union (DSU)
├── 10_trie.md ← Árbol de prefijos
├── 11_analisis_amortizado.md ← Análisis amortizado
├── 12_kmp_rabin_karp.md ← Búsqueda de patrones en texto
├── 13_bit_manipulation.md ← Manipulación de bits
├── 14_teoria_numeros.md ← MCD, primos, aritmética modular
└── 15_clases_complejidad.md ← P, NP, NP-completo
flowchart TD
subgraph C1["1 — Fundamentos (01–15)"]
A["Recursión y DP (01·02·03)"]
B["Grafos y caminos (04)"]
C["Estructuras de datos (05·09·10·11)"]
D["Algoritmos clásicos (06·07·08·12·13·14·15)"]
end
subgraph C2["2 — Composición (16)"]
E["Programación funcional: map · filter · fold · streams"]
end
subgraph C3["3 — Sistemas reales (17)"]
F["Efectos · ROP · async Pipelines · Arquitectura"]
end
subgraph C4["4 — Escala y hardware (18–19)"]
G["Estructuras probabilísticas Bloom · HLL · CMS · MinHash"]
H["Modelo de memoria Caché · Localidad · Disco"]
end
C1 --> C2 --> C3 --> C4
mindmap
root((Algoritmos y Sistemas))
Fundamentos
Recursión 01·02
Reducción 03
Grafos 04
Heap 05
Greedy 06
Sorting 08
Union-Find 09
Trie 10
Amortizado 11
KMP 12
Bits 13
Números 14
Complejidad 15
Composición
PF funcional 16
map·filter·fold
Streams lazy
Sistemas reales
Result·ROP 17
async·await
Pipelines
Arquitectura
Escala
Bloom Filter 18
HyperLogLog
Count-Min
Caché·Memoria 19
| Archivo | Estado | Ejercicios |
|---|---|---|
01_recursion_tipos.md |
✅ Listo | 40 ejercicios (8 secciones × 5) |
02_optimizacion_recursiva.md |
✅ Listo | 25 ejercicios (5 técnicas × 5) |
03_reduccion_complejidad.md |
✅ Listo | 35 ejercicios (7 técnicas × 5) |
04_grafos.md |
✅ Listo | 35 ejercicios (7 secciones × 5) |
05_heap_priority_queue.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
06_algoritmos_greedy.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
07_colecciones_java.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
08_sorting_completo.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
09_union_find.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
10_trie.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
11_analisis_amortizado.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
12_kmp_rabin_karp.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
13_bit_manipulation.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
14_teoria_numeros.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
15_clases_complejidad.md |
✅ Listo | 25 ejercicios (5 secciones × 5) |
| 16_programacion_funcional.md | ✅ Listo | 35 ejercicios (7 secciones × 5) |
| 17_efectos_pipelines_arquitectura.md | ✅ Listo | 35 ejercicios (7 secciones × 5) |
| 18_estructuras_probabilisticas.md | ✅ Listo | 35 ejercicios (7 secciones × 5) |
| 19_modelo_memoria_cache.md | ✅ Listo | 35 ejercicios (7 secciones × 5) |
Total: 500 ejercicios — Repositorio completo ✅
| Prioridad | Archivo | Razón |
|---|---|---|
| 🔴 Alta | 04_grafos.md |
✅ Listo |
| 🔴 Alta | 05_heap_priority_queue.md |
✅ Listo |
| 🔴 Alta | 06_algoritmos_greedy.md |
✅ Listo |
| 🔴 Alta | 07_colecciones_java.md |
✅ Listo |
| 🟡 Media | 08_sorting_completo.md |
Completar el panorama de ordenamiento |
| 🟡 Media | 09_union_find.md |
Frecuente en entrevistas |
| 🟡 Media | 10_trie.md |
Frecuente en problemas de strings |
| 🟡 Media | 11_analisis_amortizado.md |
Justifica decisiones de diseño |
| 🟡 Media | 12_kmp_rabin_karp.md |
Cierra el tema de búsqueda en texto |
| 🟢 Baja | 13_bit_manipulation.md |
Optimizaciones puntuales |
| 🟢 Baja | 14_teoria_numeros.md |
Base matemática para criptografía |
| 🟢 Baja | 15_clases_complejidad.md |
Contexto teórico |
Cada ejercicio tiene el siguiente formato:
### Ejercicio N.X — Nombre
**Enunciado:** Descripción clara del problema.
**Restricciones:** Límites de entrada.
**Pista:** Guía sin revelar la solución.
**Implementar en:** Python · Java · Go · C# · Rust- Lee la descripción y complejidades de la sección antes de empezar
- Intenta el ejercicio en Python primero (más rápido de prototipear)
- Una vez que funciona, porta a los otros 4 lenguajes
- Reflexiona sobre las diferencias: ¿qué cambia entre lenguajes?
- Compara tu solución con la complejidad esperada en la tabla resumen
| Notación | Nombre | Ejemplo |
|---|---|---|
O(1) |
Constante | Búsqueda en hash map |
O(log n) |
Logarítmico | Búsqueda binaria |
O(n) |
Lineal | Recorrer un arreglo |
O(n log n) |
Lineal-logarítmico | Merge Sort |
O(n²) |
Cuadrático | Doble bucle anidado |
O(2^n) |
Exponencial | Subconjuntos sin memo |
O(n!) |
Factorial | Permutaciones brutas |