Cómo mejorar en algoritmos, estructuras de datos y programación competitiva, solo por puro aprendizaje, así como por ubicaciones en empresas de primer nivel, en un año

Las estructuras de datos y los algoritmos son difíciles de aprender. Aquí hay una lista enorme para mostrar cuánto hay en realidad: estructuras de datos y algoritmos.

Entonces, ¿cómo se mejora esto?

Dominar estas cosas requiere dos cosas: comprensión e implementación .

Lo siguiente es un desglose realmente intenso de los algoritmos / preparación de la estructura de datos para la programación competitiva, pero la idea de solo aprender algoritmos y estructuras de datos para divertirse aún se aplica. El punto es practicar y practicar con los recursos adecuados. Buena suerte.

# 1 Lea sobre las estructuras de datos / algoritmos. Te he dado una buena lista de cosas para estudiar, pero esto no la obtendrá por completo. Aquí hay otro enlace para encontrar listas de algoritmos: ¿Cuáles son los algoritmos necesarios para resolver todos los problemas (usando C ++) en cualquier concurso de codificación competitivo?

  • Obviamente, esto no cubre todo. Leer el libro de algoritmos CLRS también será muy bueno.
    • Otros libros de algoritmos: si CLRS se considera un libro bastante difícil para principiantes, ¿qué otro gran libro recomendaría para principiantes?
  • Verá que leer sobre algoritmos y estructuras de datos es algo así como la oferta y la demanda . Cuantos más problemas hagas, más algoritmos / estructuras de datos tendrás que estudiar.
  • No es necesario implementarlo de inmediato. Asegúrese de comprender los detalles de
    las estructuras de datos / algoritmo, de modo que si hay un pequeño giro en un problema, podrá recogerlo de inmediato y saber dónde cambiar su código en su estructura de datos o algoritmo. Recomendaría escribir los pasos en una hoja de papel y ser la computadora y hacer cada paso del algoritmo o cada parte de la estructura de datos a mano .

# 2 Practica, practica, practica. Esto debe hacerse simultáneamente con el n. ° 1. Nunca solo hagas # 1 o # 2 ; Esto no te ayudará. Debe implementar Y aprender cómo funciona el algoritmo, para poder ajustarlo como quiera.

  • Hay tantas plataformas de codificación en línea: ¿Cuáles son los diversos concursos de programación en línea?
  • Aquí están los que yo diría que se centren:
    • CodeForces (estructuras de datos): capacidad de mirar las soluciones de otras personas, concursos semanales, no hay escasez de problemas, la mayoría de los problemas tienen editoriales
    • HackerRank (dominio de algoritmo): similar a CodeForces, capaz de ver las soluciones de otras personas, la mayoría de los problemas tienen editoriales
    • HackerEarth (pista de estructura de datos recientemente lanzada): muchos problemas, además de editoriales (tienen que desbloquear)
    • Otros: páginas de capacitación de USACO, problemas pasados ​​de USACO, HackerEarth, TopCoder, SPOJ *, CodeChef *, jueces en línea *
    • * * las soluciones y editoriales son raros en estos casos, tendrá que buscar en Google o hacer preguntas

# 3 Implementar. Prepare un código de trabajo y depúrelo si es necesario. Debería poder mirar su hoja de papel y codificar la estructura de datos / algoritmo de manera bastante simple. Si se queda atascado, es posible que haya entendido mal la estructura de algoritmo / datos ( Regrese al paso 1 ) o consulte un pseudocódigo (ya sea en Codechef o HackerEarth Code Monk o los tutoriales de TopCoder, etc.).

  • Algunos tutoriales sobre estructuras de datos de los que puede aprender.
    • Tutoriales de ciencia de datos (pseudocódigo)
    • Estructuras de datos y algoritmos (enlace de arriba)
    • Code Monk – Sé un mejor programador o Notas sobre HackerEarth (en muchos idiomas diferentes)
  • Estudiar algoritmos y estructuras de datos se trata de comprenderlos , no solo de implementarlos . Esto se debe a que cambiar las estructuras de datos y los algoritmos para adaptarse a una pregunta requiere que comprenda cómo funciona . Por lo tanto, en realidad no importa en qué idioma está codificada la estructura de datos y / o el algoritmo al que está mirando o haciendo referencia; solo trata de entenderlo haciéndolo a mano.
  • También siempre debe hacer referencia a CLRS para obtener algoritmos si realmente necesita ayuda. Tienen uno de los mejores pseudocódigos de todos los libros.

# 4 No pares incluso si te quedas atascado. Obtenga ayuda de inmediato. Realice uno o varios de los siguientes:

  • Intenta encontrar las soluciones de otras personas o lee el editorial. Obtenga la idea principal de la solución. Ahora CIERRE la solución e implemente su sin leer la solución nuevamente . Esto es bastante importante, para que el algoritmo / solución se hunda en tu cabeza. Es por eso que te di algunos sitios web para usar arriba. Tienen editoriales, lo que ayuda mucho.
  • Todos los problemas de codificación tienen patrones. Siempre verá problemas similares todo el tiempo. Por lo tanto, las estrategias y algoritmos que utilizó también pasarán por alto. Recuerde palabras clave que afectan a un algoritmo. Esto jugará un papel importante en su éxito como codificador competitivo.

# 5 Haz concursos (por diversión si no eres un programador competitivo) . No hay mejor práctica que los concursos reales. Los concursos ayudan con su capacidad de contener su estrés y pondrán a prueba sus fortalezas al máximo. Después de cada concurso, asegúrese de resolver todas las preguntas que no resolvió durante el concurso. Esta es una clave importante.

  • Después de cada concurso, asegúrese de resolver todas las preguntas que no resolvió durante el concurso. Se llama Upsolving . Esta es una de las mejores formas de estudiar; comience con lo más fácil, descubra por qué no pudo resolverlo, lea las soluciones de otras personas, resuélvalo usted mismo. Esta es una clave importante.

# 6 Diviértete . Realmente no puedes ser bueno en algo si no te gusta. ¡Entonces Diviertete!


Respuestas relacionadas:

¿Cuál es la mejor manera de practicar con algoritmos y estructuras de datos?

¿Cómo debo aprender los algoritmos y resolver problemas en CodeChef, SPOJ paso a paso?

¿Cómo puedo mejorar mi estructura de datos y mi conocimiento de algoritmos? Puedo dar 2 horas al día.

Obtenga recursos de aprendizaje en un lugar. Pueden ser libros, sitios web, cursos MOOC, videos, conferencias, etc.

Comienza a aprender. Marque todos los problemas que no pudo resolver. En tu tiempo libre, busca pistas y sigue resolviendo.

Una práctica regular te mantendrá en forma.

Estudie la idea de una estructura de datos o algoritmo a partir de recursos estándar. Impleméntelo en un idioma que conozca. Siga pensando cómo mejorar la complejidad de tiempo y espacio de un algoritmo.

Para entrevistas tecnológicas, solo practique en sitios web de programación competitivos (CodeForces, TopCoder, CodeChef) para mejorar las habilidades de resolución de problemas y la carrera profesional y geeks por geeks para preguntas de entrevistas.

La práctica regular es la clave . Por favor, no te estires demasiado. Mantente lento, pero constante.

¡Buena suerte!

Un año es mucho tiempo para mejorar en algoritmos y estructuras de datos, especialmente si tiene la motivación adecuada para hacerlo.

(A lo largo de mi respuesta, supongo que tienes una idea básica sobre la programación)

Lo primero que debe saber es que para aprender estructuras de datos y algoritmos, necesita practicar mucho. Esto se debe a que este es ese tipo de cosas, que vienen haciendo prácticamente.

Por lo tanto, le recomiendo que se registre en la competencia de programación, el concurso de programación, la programación informática en línea y observe los problemas que se ofrecen en la sección para principiantes. Son las preguntas más fáciles de abordar y esto también le dará una sensación inicial de programación competitiva. Si puede resolverlos fácilmente, puede pasar a las preguntas de la sección fácil.

Estructuras de datos de aprendizaje , además de practicar en codechef y sitios de programación competitivos similares (como HackerRank, HackerEarth: desafíos de programación y trabajos de desarrollador, Codeforces), debe comenzar a leer en GeeksforGeeks | Un portal informático para geeks. Es un recurso muy bueno para aprender estructuras de datos, y cada tema tiene muchos problemas para practicar. También tienen muy buen tutorial para cada problema, si no puede resolverlos.

Algoritmos de aprendizaje , esta es una de las cosas más difíciles de hacer. Pero la mejor forma en que creo que uno puede aprender algoritmos es practicando. Con cada problema, aprende una nueva forma de implementarlo, un nuevo concepto con el que puede optimizarse. Hay tantos algoritmos por ahí, y es muy difícil proporcionar recursos para todos ellos. Pero haz de Google tu mejor amigo. Cada vez que encuentre un nuevo algoritmo (como clasificación rápida, clasificación de fusión, etc.) y no pueda entenderlo, solo búsquelo en Google y encontrará muchos recursos que explican cada tema en detalle.

Pero lo más importante que debe saber es que PRÁCTICA y PACIENCIA es lo que necesita tener. En la programación competitiva, siempre llegará un momento en que no tendrá idea de por qué su programa está dando una respuesta incorrecta. Tendrás ganas de rendirte y ese es el momento en que se pondrá a prueba tu paciencia. Siempre que sienta que no tiene idea de cómo proceder con el problema, mire los editoriales y luego codifíquelo usted mismo. NO HAGAS TRAMPA. Si solo copia el código directamente solo por hacer la pregunta, entonces nunca mejorará en la programación competitiva.

Por último, cuando tenga algo de experiencia con estructuras de datos y algoritmos y programación competitiva, y quiera practicar las preguntas de la entrevista, regístrese en Codificación La preparación de la entrevista es fácil. Este sitio web le brinda una preparación sistemática para cada tema y también tienen tutoriales para cada tema.

& Tenga en cuenta. No es una ciencia exacta. Si le das suficiente tiempo, te llevarás bien.

Agregaré más referencias más adelante.

Espero eso ayude.

DORMIR. COMER. CÓDIGO. REPETIR.

Gracias por el A2A.

No sé mucho sobre programación competitiva, pero déjame responder.

Creo que la programación es una habilidad y, como cualquier otra habilidad, la cantidad de horas que pasa es el factor más importante que conduce a la experiencia. Malcolm Gladwell en su libro “Outliers” sugiere 10,000 horas (sí, son diez mil horas) de práctica para dominar cualquier cosa: violín, programación, cricket, …

¡Entonces, comienza tus 10,000 horas ahora!

¡La mejor de las suertes!

En una palabra: práctica

3 palabras: codechef, topcoder, hackerrank

Todo lo que quiero decir es practicar tanto como puedas. Ya se trate de Perlas de programación, ya sea sitios de codificación en línea o tutoriales en línea. Cuanto más practiques, mejor serás

More Interesting

¿Por qué es mejor usar los elementos del marco de la colección que usar una matriz de objetos?

¿Las personas en la industria realmente usan el algoritmo K-Nearest Neighbour en la práctica?

¿Puedo leer Introducción a las estructuras de datos de Cormen como un principiante completo?

¿Por qué estudiamos diferentes algoritmos para la misma tarea?

¿Debo conocer algoritmos y estructuras de datos si quiero ser un desarrollador de pila completa?

Quiero construir una casa de piedra óptima, usando una computadora para decidir la disposición de las piedras. ¿Cómo podría funcionar esto?

¿Qué debo comenzar primero con estructuras de datos y algoritmos o inteligencia artificial de aprendizaje automático?

¿Debería usar la función de clasificación () incorporada de C ++ para problemas en la programación competitiva, o debería implementar el algoritmo por mi cuenta?

¿Cuáles son las características de los árboles de coníferas y cuáles son algunas plantas / árboles con aspectos similares?

¿Cuál es el algoritmo utilizado por Roposo?

Si cada solución recursiva se puede transformar en una iterativa, ¿por qué usar la recursividad?

Cómo dibujar un contorno vectorial en una matriz de cuadrícula binaria

¿Es más difícil probar la corrección de algoritmos codiciosos que probar la corrección de cualquier otra clase de algoritmos?

¿Cuáles son las aplicaciones prácticas / de la vida real / industriales de Dijkstra, Kruskal y Algortithm de Prim?

¿Por qué Google todavía muestra el tiempo de búsqueda en la página de resultados?