Repositorio de autoestudio de algoritmos y estructuras de datos en Rust, pensado para practicar resolución de problemas, análisis de complejidad y hábitos de entrevista técnica.
El objetivo es que este proyecto sirva como material de estudio reutilizable: cada solución debe tener una implementación clara, tests automatizados y notas que expliquen el patrón usado.
- Soluciones de algoritmos organizadas por patrón.
- Tests de integración para validar cada ejercicio.
- Notas de estudio con ideas, invariantes y errores comunes.
- Un plan de práctica por semanas.
- Una ruta avanzada para ampliar el alcance después del plan base.
- Wiki con documentación resumida del avance.
AGENTS.md
ROADMAP.md
LICENSE.md
LICENSE-MIT
LICENSE-APACHE
LICENSE-CC-BY-SA-4.0.md
.github/
workflows/
ci.yml
src/
patterns/
binary_search.rs
dynamic_programming.rs
graphs.rs
greedy.rs
hashing.rs
heaps.rs
intervals.rs
linked_lists.rs
matrices.rs
math_bit.rs
range_queries.rs
recursion_backtracking.rs
sliding_window.rs
stack_queue.rs
string_algorithms.rs
trees.rs
tries.rs
two_pointers.rs
weighted_graphs.rs
tests/
binary_search_test.rs
dynamic_programming_test.rs
graphs_test.rs
greedy_test.rs
hashing_test.rs
heaps_test.rs
intervals_test.rs
linked_lists_test.rs
matrices_test.rs
math_bit_test.rs
range_queries_test.rs
recursion_backtracking_test.rs
sliding_window_test.rs
stack_queue_test.rs
string_algorithms_test.rs
trees_test.rs
tries_test.rs
two_pointers_test.rs
weighted_graphs_test.rs
property_algorithms_test.rs
benches/
algorithm_families.rs
diagrams/
core-patterns.mmd
math-geometry.mmd
optimization-patterns.mmd
recursive-structures.mmd
notes/
week-01.md
week-02-03.md
week-04-05.md
week-06.md
week-07-08.md
week-09-10.md
week-11-12.md
week-13.md
week-14-15.md
week-16.md
week-17-18.md
week-19-20.md
week-21-23.md
week-24-25.md
complexity-cheatsheet.md
mock-interview-rubric.md
review-queue.md
simulations/
simulacro-01-minimum-window-substring.md
simulacro-02-course-schedule.md
simulacro-03-coin-change.md
rust-interview-patterns.md
mistakes.md
plan/
criterios-seleccion-191-plus.md
consolidacion-191-220.md
estandar-rfc-0001.md
horizonte-400.md
matriz-cobertura-400.md
plantilla-bloque-autonomo-191-plus.md
plan-alcance-avanzado.md
repeticiones-241-260.md
simulacros-221-240.md
plan-algoritmos-rust.md
AGENTS.mdes la guía de arranque para humanos e IA en este repositorio.ROADMAP.mdapunta al plan vivo sin duplicarlo.plan/estandar-rfc-0001.mdregistra la alineación de este repo con el Manual Fundacional RFC-0001.LICENSE.mdresume la doble licencia: código bajoMIT OR Apache-2.0; contenido educativo bajoCC BY-SA 4.0.
Ejecutar los tests:
cargo testFormatear el código:
cargo fmtLint y verificación completa:
cargo fmt --check
cargo clippy --all-targets
cargo testCompilar benchmarks sin ejecutarlos:
cargo bench --no-runPara estudiar un problema:
- Leer el enunciado y escribir ejemplos.
- Identificar el patrón principal.
- Escribir tests antes de implementar.
- Resolver con una solución clara.
- Anotar complejidad temporal y espacial.
- Registrar errores o bloqueos en la bitácora.
La wiki es el punto de entrada recomendado para estudiar el avance, revisar patrones y seguir las semanas del plan:
Planes locales:
- Plan base de algoritmos en Rust
- Plan de alcance avanzado
- Horizonte 400
- Criterios de selección para problemas 191+
- Consolidación 191-220
- Matriz de cobertura Easy, Medium y Hard
- Plantilla de bloque autónomo para problemas 191+
- Repeticiones 241-260
- Simulacros 221-240
- Profundización 261-290
- Profundización 291-315
- Profundización 316-330
- Cierre 331-360
- Cierre 361-400
- Reporte de cierre de planeación del Horizonte 400
- Guía de explicación avanzada para simulacros
- Cierre del hito de 140 problemas
- Cierre del hito de 190 problemas
Páginas destacadas:
- Plan de Alcance Avanzado
- Cierre del Hito de 190 Problemas
- Guía de Complejidad
- Semana 1: Rust, Hashing, Arrays y Strings
- Semanas 2 y 3: Arrays, Strings, Hashing y Sumas de Prefijos
- Semanas 4 y 5: Two Pointers, Sliding Window y Stack
- Semana 6: Búsqueda Binaria
- Semanas 7 y 8: Recursión, Backtracking y Listas Enlazadas
- Semanas 9 y 10: Árboles
- Semanas 11 y 12: Grafos
- Semana 13: Montículos, Intervalos y Greedy
- Semanas 14 y 15: Programación Dinámica
- Semana 16: Simulacros y Repaso
- Semanas 17 y 18: Complejidad, Matemáticas y Bits
- Semanas 19 y 20: Tries y Cadenas
- Semanas 21 a 23: Grafos Ponderados
- Semanas 24 y 25: Consultas por Rangos
- Semana 26: Geometría y Temas Selectivos
- Semanas 27 y 28: Simulacros Avanzados
- Patrones de Rust para Entrevista
- Semana documentada: 27-28
- Problemas implementados: 237
- Tests automatizados: 543 pruebas deterministas/property + 9 doctests
- Ruta avanzada: hito 190 completado; horizonte 400 documentado como plan opcional futuro
- Lenguaje: Rust
Las dependencias criterion y proptest son solo de desarrollo. Se agregan
porque el repo no solo comprueba respuestas: también enseña complejidad,
invariantes y regresiones de rendimiento donde la señal es real.
| Familia | Benchmarks | Property testing | Decision |
|---|---|---|---|
binary_search |
Si | Si | Bench para search_insert; property contra partition_point, porque la invariante de lower-bound es generativa. |
dynamic_programming |
Si | No por ahora | Bench para LIS; property tests requieren oraculos exponenciales acotados y se posponen para no agregar ruido. |
range_queries |
Si | Si | Bench de Fenwick; property compara prefijos contra un vector ingenuo tras actualizaciones. |
string_algorithms |
Si | No por ahora | Bench de KMP; property testing queda fuera hasta definir generadores ASCII/Unicode por algoritmo. |
weighted_graphs |
Si | No por ahora | Bench de Dijkstra; propiedades de grafos requieren generadores conectados/ponderados especificos. |
two_pointers |
No por ahora | Si | sorted_squares se prueba por multiconjunto ordenado; no se mide porque el coste O(n) ya queda claro y barato. |
| Resto de familias | No por ahora | No por ahora | La cobertura determinista actual expresa mejor los casos borde; se agregaran benches/properties solo cuando haya una invariante o regresion concreta que medir. |
Este repositorio prioriza:
- Comprender patrones antes que memorizar soluciones.
- Practicar con tests desde el inicio.
- Explicar decisiones y compensaciones.
- Repetir problemas fallados hasta dominarlos.
- Mantener notas útiles para repaso futuro.