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 .
- ¿Cuál es la intuición de por qué BFS bidireccional es correcto?
- ¿Por qué deberíamos conocer más de un algoritmo de clasificación en Python (burbuja, inserción, selección) si todos están haciendo el mismo trabajo?
- ¿Qué es un algoritmo para darme sistemáticamente todas las combinaciones de elementos r de una matriz de elementos K?
- ¿Qué técnica general siguen los autores al escribir libros técnicos en LaTeX?
- ¿Es posible el algoritmo de compresión que se muestra en Silicon Valley en realidad?
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.