Creo que la mejor y más sistemática forma de dominar algoritmos y estructuras de datos es a través de una programación competitiva.
Y para estudiar programación competitiva, te puedo decir 4 grupos de enfoques:
Grupo 1:
- Cómo calcular la correlación de cada fila en una matriz 2D con una matriz 1D de la misma longitud
- ¿Existe un algoritmo para contar el número de subsecuencias divisibles por 8?
- ¿Cómo funciona la ordenación por fusión en C ++?
- ¿Cuál es una buena manera de ordenar temas en términos de qué aprender primero para la programación competitiva?
- ¿Qué es una expresión regular que devolverá falso cuando una letra determinada aparece más de n veces?
Encuentre un buen entrenador para trabajar, él sabe qué hacer con usted, generalmente es el entrenador de su facultad o universidad, o puede unirse al capítulo de ACM en su universidad o país, ellos le enseñarán.
Grupo 2:
Vaya con un libro de programación y concursos como Competitive Programming 3: Competitive Programming, 3rd Edition: Steven Halim: Amazon.com: Books.
mira esto para más detalles:
La respuesta de Abdelrahman Hamdy a ¿Qué libro es mejor para prepararse para el IOI, la Programación competitiva 3 de Halim o los Desafíos de programación de Skiena?
O vaya con el libro de algoritmos como:
CLRS: Introducción a los algoritmos, 3a edición (MIT Press): Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: 9780262033848: Amazon.com: Libros
Algoritmos desbloqueados: Algoritmos desbloqueados (MIT Press): Thomas H. Cormen: 9780262518802: Amazon.com: Libros
También puede seguirlo de una manera sistemática como esta:
La respuesta de Abdelrahman Hamdy a ¿Cómo se debe leer Introducción a los algoritmos (CLRS) para aprovecharlo al máximo?
Grupo 3:
Los cursos en línea, y hay pocos de ellos que realmente discuten algoritmos y estructuras de datos forman la perspectiva de la programación competitiva, por ejemplo:
Cómo ganar competiciones de codificación: secretos de campeones
CS 97SI: Introducción a los concursos de programación
¡Una lista increíble para programación competitiva! – Fuerzas de código
Curso de programación competitiva – Codeforces
CS104c: Programación competitiva
Página de inicio de Tim Korb
Programación competitiva en C ++
Programación competitiva – Comunidad en Commonlounge
https://acm.wustl.edu/cse232/
CS3233 – Programación competitiva
CS1090 – Programación competitiva
Material de apoyo – Programación competitiva
Programación competitiva – Unacademia
también los algoritmos y el curso de estructuras de datos pueden funcionar bien también:
Diseño y análisis de algoritmos por Stanford:
Parte 1: Algoritmos: Diseño y Análisis, Parte 1
Parte 2: Algoritmos: Diseño y Análisis, Parte 2
e Introducción a Algoritmos por MIT:
Introducción a los algoritmos (SMA 5503)
Grupo 4:
Aprender haciendo:
Creo que este es el mejor comienzo para un principiante es comenzar a resolver los problemas desde el más resuelto hasta el arrendamiento resuelto, puede encontrar esta lista aquí:
Conjunto de problemas – Codeforces
También puede usar el A2OJ, es un sitio web creado para gestionar los problemas y agruparlos: Juez en línea A2
encontrará una lista de los problemas As, Bs, Cs, etc., con su nivel de dificultad, por ejemplo:
A: Juez en línea A2
y encuentra a los otros aquí:
A2 Juez en línea
Todos los problemas de CodeForces, el sitio web solo los gestiona y los agrupa, pero los problemas del propio A2OJ son realmente malos, y el sitio web en sí tiene muchos errores, así que solo úselo para organizar la práctica.
Si yo fuera usted, y soy un principiante ingenuo, entonces lo que haré exactamente es:
- Comience por resolver el problema más resuelto en Codeforces y use este método para resolver y resolver problemas:
La respuesta de Abdelrahman Hamdy a ¿Cuál es el enfoque correcto para resolver preguntas de práctica de programación competitiva? - Después de un mes o dos de trabajo duro, comience a tomar un curso en línea mientras realiza el número (1).
- Después de alcanzar la mitad del curso más o menos, comience a leer esta mitad de un libro de algoritmos como CLRS, mientras hace el número (1) y detiene el número (2).
- Ahora tome un descanso de conocimiento y comience a hacer el número (1) solo y bruscamente.
- volver al curso mientras haces el número (1).
- después de terminar el curso, comience en la segunda mitad del libro también mientras hace el número (1).
- Ahora terminaste un curso y un libro, y resolviste muchos problemas (si hiciste esto de la manera correcta con mucho trabajo, es posible que en este punto te encuentres resuelto + 1k problemas y hace 3 meses más o menos desde que comenzaste todo proceso y entrenamiento y su nivel en codeforces puede ser naranja o morado si trabajó muy duro 🙂).
También verifique estos:
La respuesta de Abdelrahman Hamdy a ¿Cuáles son los conceptos que uno debe saber antes de ir a la programación competitiva?
¿Cómo puedo ser bueno en la programación competitiva? ¿Hay algún curso que me lleve un paso adelante antes de comenzar a hacer problemas SPOJ o TopCoder? Soy bueno en estructuras de datos.