¿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.

Estos son los pasos para dominar las estructuras de datos y el algoritmo, y créanme que cada paso es una pieza pequeña en el rompecabezas más grande y, por lo tanto, todos son igualmente cruciales para dominar.

Paso 1: elige un idioma

Suponiendo que es un principiante en el campo de la programación, debe seleccionar un idioma que debe seguir y explorar con la mayor profundidad posible. Si no está seguro, recomendaría C ++ . Tiene una gran extensión y una amplia gama de bibliotecas. Pero para mí, la parte más emocionante es su capacidad para incorporar el paradigma orientado a objetos con punteros.

Paso 2: Conceptos básicos de las estructuras de datos

Internet está lleno de recursos para estructuras de datos, pero no hay una fuente centralizada que compile lo mejor de todo. Esto es lo que intenté hacer en mi segundo año de BTech creando Explicaciones: CodersMaze. Pruébelo, comprenda todas y cada una de las estructuras de datos y finalmente pruebe estos cuestionarios para probarse a sí mismo las estructuras de datos de cuestionarios.

Nota: Implemente la estructura de datos que aprenda, por ejemplo, cuando conozca las listas vinculadas, asegúrese de saber no solo cuáles son, sino también cómo están codificadas.

Paso 3: algunos videos de youtube

Ahora, mi sitio web anterior será lo suficientemente bueno como para darle un buen comienzo, pero gran parte de mi conocimiento conceptual proviene de NPTEL-Data Structures and Algorithms. No necesitas mirarlo todo, pero cuantos lo hagas, dalo todo.

Paso 4: ordenar y buscar

Esta patada inicia su parte de algoritmos. Aprenda a tener en cuenta sus complejidades (hablaré de esto más adelante) y cuál usar dónde y cuándo.

Consulte estos sitios web, son realmente útiles: Para la clasificación – Visualización de clasificación de comparación, Animaciones de algoritmos de clasificación

Para la búsqueda: visualización de búsqueda binaria y lineal.

Paso 5: estructuras de datos de Hackerrank Algo Hackerrank

Utilice hackerrank al máximo, acostúmbrese a codificar estructuras de datos en C ++ o en cualquier otro idioma que elija. Resuelve todo lo que puedas. Confía en mí, no quieres perderte este paso.

Paso 6: CLRS y análisis de complejidad

Hasta ahora, debería ser capaz de resolver preguntas básicas y obtener la aprobación de los casos de prueba. Pero eso no significa que no haya un mejor enfoque para el suyo. Pero, ¿cómo compara exactamente 2 enfoques y calcula qué tan complejo es? La respuesta es el análisis de complejidad y estas son 2 fuentes que fueron realmente útiles para mí como principiante – Algoritmos – GeeksforGeeks y Amazon.in: Compre INTRODUCCIÓN A LOS ALGORITMOS 3ED Reserve en línea a precios bajos en India

Nota: Este paso es importante ya que muchas entrevistas de codificación giran en torno al análisis de complejidad de algoritmos. Además, considere que está haciendo un proyecto que involucra la clasificación de ‘nombres’, por lo que al ver la distribución de datos, debe comprender qué algoritmo de clasificación se adapta mejor a sus datos.

Paso 7: programación dinámica y recursividad

DP es el desafío más difícil de cada programador cuando se trata de desarrollar algoritmos. Pero al mismo tiempo, la DP y la recursión tienen tantos aspectos positivos. Use estas series de videos para comprender y los problemas para practicarlos.

Paso 8: responde preguntas y colabora

Hace unos días, recibí una solicitud para responder la respuesta de Jay Doshi a ¿Dónde puedo encontrar ayuda para escribir un programa C ++ para encontrar el más pequeño de tres sin usar operadores de comparación? Conocía solo 2 formas, pero una extensa investigación me enseñó 1 más. Entonces ayudar a alguien más, también me ayudó a mí.


No me considero lo suficientemente satisfecho como para formar su rutina, pero los pasos mencionados anteriormente son cómo aprendí. Pero recuerde, mirar los videos de alguien o leer los blogs de alguien es bueno para comenzar, no para dominar.

En mi último año, tomé el proyecto de implementar un solucionador de cubos Rubik de 3x3x3 para encontrar la solución dentro del número de Dios (20) y puedo decir inequívocamente que nada me enseñó tanto como este proyecto.

¡Espero que esto ayude, buena suerte!

Tome un ejemplo propio y resuélvalo o resuelva el problema en esto:

Concurso de programación, concurso de programación, programación informática en línea