Si tiene dificultades con la programación competitiva, debe dar un paso atrás y comenzar con lo básico. La primera fase es ponerse cómodo con algoritmos y estructuras de datos. Aquí hay una descripción general de cómo puede mejorar estas habilidades:
- Paso 1: Algoritmos : Obtenga este libro – Diseño de algoritmo: Kleinberg / Tardos. Por alguna razón, este libro no es tan popular como los otros libros de algoritmos, pero está muy bien organizado. El conjunto completo de algoritmos se divide claramente en unos pocos capítulos: teoría de gráficos, algoritmos codiciosos, divide y vencerás, programación dinámica , flujo de red y algunos otros temas diversos en algoritmos. Debería dedicar algunas semanas a cada uno de los temas anteriores en negrita: estudie el capítulo en unos días y al final resuelva los 50 problemas. Debido a que solo hay una cantidad manejable de problemas en cada capítulo, puede resolver la mayoría de los problemas en un tiempo razonable. Es posible que desee omitir entre el 20 y el 30% de los problemas que son relativamente difíciles, pero debería poder resolver el 70–80% de los problemas, solo o con poca ayuda.
- Paso 2: estructuras de datos y programación : para este paso, elija un idioma cuando comience y practique el uso de ese idioma solamente. Considero que Java es el mejor en lo que respecta a entrevistas / programación competitiva: orientado a objetos que ayuda a escribir código modular más fácilmente, tiene verificación de tipo, facilita el razonamiento sobre la corrección del código (a diferencia de Python) y tiene buenas bibliotecas para datos estructuras y para manejar cadenas (a diferencia de C ++). Encontré Cracking the Coding Interview bastante bueno. Una vez más, hay capítulos sobre cada tema importante (aunque más detallado que el libro anterior). Para cada capítulo, hay un conjunto de aproximadamente 10 problemas. Por lo general, omito los más fáciles y solo elijo los 1 o 2 problemas más desafiantes del conjunto. Dependiendo de su nivel y el tiempo que tenga, es posible que desee hacer lo mismo o probar todos los problemas. Para cada problema que resuelva, escriba el código desde cero sin un IDE . Y luego escribe casos de prueba. (De hecho, deje de usar IDE en la medida de lo posible en su trabajo diario. Esa será una buena práctica para aprender el idioma en el que está trabajando). Al momento de escribir el código, piense en la legibilidad, modularidad y eficiencia de su código. Finalmente, lea las soluciones proporcionadas.
Ahora, una vez que tenga un control razonable de lo anterior, comience con TopCoder. Los problemas de la División II, particularmente aquellos con 250 puntos, son bastante sencillos. Gradualmente, puede pasar a problemas más difíciles. También hay editoriales en el sitio para ayudarlo a comprender las soluciones a los problemas. Finalmente, puede volver a otros sitios como CodeChef o HackerRank, cuando se sienta cómodo con los problemas fáciles de TopCoder.