¿Cuáles son las mejores prácticas para acelerar el pensamiento de mi algoritmo?

La mejor velocidad alcanzada en las competiciones de codificación de los principales competidores proviene principalmente de cuán familiarizados están con el tipo de problema planteado.

Por favor, no lo confundas con la memoria. Siempre hay problemas nuevos, generalmente trabajados muy duro por los diseñadores y probadores en tales eventos principales.
Pero una vez que alguien que entrenó duro hizo 100, mejor aún miles de problemas, ya no es un área y un enfoque totalmente nuevos.
Sino más bien una variación / combinación o eludir alguna restricción de las vistas anteriormente.

Por lo tanto, su mejor opción es practicar bien, tanto como pueda, cada vez que se esfuerce, es decir, resolver un problema un poco más difícil de lo que puede actualmente.

La segunda cosa es la capacidad de juzgar correctamente el nivel de dificultad de los problemas, es decir, no hacer suposiciones clave incorrectas que cambian totalmente el enfoque de la solución.

También aprenda a detectar que algunos problemas son fáciles de encontrar, pero difíciles de implementar para otros, fáciles de codificar pero difíciles de razonar / diseñar.

Nuevamente, la habilidad anterior solo se adquiere al haber visto más y más problemas.

Una última cosa, que podría ser un consejo más rápido, es pasar siempre más tiempo revisando todos los problemas en una competencia y elegir los que seguramente podrá resolver / más rápido / primero (suponiendo que sea una competencia de estilo ACM, existen opciones limitadas para el topcoder / código de concurso de estilo mermelada).

Puede ser útil mirar la tabla de clasificación, si pensabas que un problema era demasiado fácil pero ningún cuerpo parece haberlo intentado / o visto fallas, entonces es mejor que vuelvas a evaluarlo.

Básicamente, hay dos pasos en mi humilde opinión para esto.

1) Cultive el conocimiento que puede aplicar. IEEE, ACM, libros, cursos en línea son buenos lugares para aprender.

2) Juega un poco de ajedrez o algo. Encuentre desafíos en el mundo real y piense cómo puede aplicar algoritmos. Vea cómo ya se han aplicado. Haga dibujos, piense en soluciones simples y luego refine, refine refine.

Finalmente, practica! Si conoce más de un idioma, intente escribir soluciones en varios idiomas y luego ajustar hasta que tenga algo increíble.

More Interesting

¿Avanzar en CS en general hará que los algoritmos sean cada vez más complejos con el tiempo que las personas no pueden manejar? ¿Cuáles son las soluciones para ese caso?

¿Cuáles son los mejores libros sobre algoritmos y estructuras de datos?

¿Cuál es el mejor algoritmo de clasificación manual? Por ejemplo, si tuviera una pila de papeles que quisiera ordenar alfabéticamente, ¿cuál sería la forma más eficiente de hacerlo? ¿Qué pasaría si estuvieras de acuerdo con que uno o dos se alejen de su posición ordenada?

¿Cuándo debería mirar la solución de algún problema algorítmico?

Cómo medir la precisión de un algoritmo de planificación de ruta

¿Cuál es la forma más eficiente de detectar, si una cadena es un anagrama de un palíndromo?

¿Hay alguna guía sobre el uso de datos sintéticos para entrenar algoritmos de visión por computadora? ¿Hay alguna investigación al respecto?

¿Cuál es un ejemplo de un bucle infinito?

¿Cuál es la explicación de este código?

Mis ubicaciones están por venir, así que he estado implementando estructuras de datos y algoritmos en Python, pero llegué a saber que muchas empresas no tienen Python instalado en sus estaciones de trabajo. ¿Es verdad? Y si es así, ¿estaría bien cambiar de Python a Java, que no recuerdo mucho?

¿Qué debo saber sobre la programación de chat?

Cómo resolver la recursividad cuando no tienen caminos claros

¿Qué es el retroceso en algoritmos?

¿Cómo podemos decir que la búsqueda binaria es un algoritmo rápido?

¿Cuál es la técnica de búsqueda que sigue Google?