¿Desde dónde debo comenzar a aprender los algoritmos necesarios para la programación competitiva?

Respuesta de:
La respuesta de Abdelrahman Hamdy a ¿Cuál debería ser mi rutina para dominar el algoritmo y la estructura de datos?

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:

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:

  1. 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?
  2. Después de un mes o dos de trabajo duro, comience a tomar un curso en línea mientras realiza el número (1).
  3. 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).
  4. Ahora tome un descanso de conocimiento y comience a hacer el número (1) solo y bruscamente.
  5. volver al curso mientras haces el número (1).
  6. después de terminar el curso, comience en la segunda mitad del libro también mientras hace el número (1).
  7. 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.

Creo que una buena estrategia sería comenzar a resolver algunos problemas primero. Luego, cada vez que enfrenta algunos problemas que no puede resolver después de pensar durante un período prolongado de tiempo, debe ir a los foros o publicaciones de blog, o hablar con sus compañeros. Este “período de tiempo extendido” puede variar de persona a persona. Por lo general, intento al menos un día antes de seguir los tutoriales. Ahora, para responder la pregunta principal, una vez que sepa qué algoritmo necesita, puede buscar el algoritmo en Google. Por lo general, los primeros tres o cuatro resultados son suficientes para servirle bien. GeeksforGeeks, Topcoder, E-maxx son algunos de los mejores sitios para tutoriales. Youtube también ayuda mucho. Introducción a los algoritmos, tercera edición de Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest y Clifford Stein también es imprescindible para formar un sólido conocimiento de fondo sobre algoritmos centrales.

LightOJ tiene una gran colección de buenos problemas. Una cosa buena de este sitio es que aprenderá algo de todos y cada uno de los problemas. ¡No hay problemas redundantes que resolverá solo para aumentar su conteo! También tenían un foro activo. No está muy activo hoy en día. Pero aún así es bastante bueno y contiene respuestas a las preguntas más comunes.

Codeforces es otro gran sitio. Publican editoriales para cada uno de los problemas. Es un buen lugar para competir y aprender.

Lo mismo ocurre con Codechef, Hackerrank y muchos otros sitios. UVA tiene una gran colección de problemas clásicos. URI es otro buen sitio para principiantes.

Comenzaré recomendando que lea esta respuesta (¿Qué libros ha leído para competir en el ACM-ICPC?) Donde hay recomendaciones de libros que son muy útiles para aprender los conceptos y algoritmos para la programación competitiva.

Además de eso, sugeriría que vea algunos de los cursos en línea gratuitos en algoritmos ofrecidos por Coursera, Udacity o el material de curso abierto MIT. Aunque estos cursos no están orientados específicamente a la programación competitiva, proporcionan la base que necesita para comenzar a resolver problemas de programación competitiva y comprender algoritmos más complejos a través del autoaprendizaje.

Finalmente, para obtener algunas experiencias prácticas, use cualquiera de los jueces en línea: topcoder, codeforces, HackerRank, codechef, SPOJ, etc. Cualquiera de ellos es increíble y puede mezclar y combinar, pero particularmente me gustan los codeforces porque puede resolver problemas según tema y dificultad. Por ejemplo, aquí puede ver los problemas que han sido resueltos por la mayoría de las personas, que es un buen lugar para que los principiantes comiencen.

Ir por:

GeeksforGeeks | Un portal informático para geeks

Esto me parece muy útil. Muchos algoritmos, muchas preguntas y todo lo relacionado con la programación competitiva.

Hazlo ahora mismo.