La pregunta no puede ser respondida lo suficientemente breve. Sin embargo, hay algunos pasos.
Me centro en los “algoritmos” en el sentido de las funciones matemáticas: la misma entrada produce siempre la misma salida; sin efectos secundarios. (Especialmente no quiero explicar cómo lidiar con los algoritmos / problemas en línea)
- Comprende el problema :
¿Qué es lo que hay que hacer? ¿Cómo se ven sus datos de entrada? ¿Cuál debería ser tu salida? - Fuerza bruta : ¿Cómo resolverías el problema para una pequeña instancia? ¿Cómo lo resolverías con lápiz y papel?
Si puede responder a esta pregunta, tendrá su primera solución. Es muy probable que sea extremadamente malo y eventualmente inutilizable incluso para casos de problemas de tamaño modesto, pero eventualmente puede crear casos de prueba de los cuales está seguro de conocer la entrada correcta y la salida correcta. - ¿Puedes dividir el problema en 2 o más problemas más simples?
- Complejidad espacio / tiempo : ¿en qué clase es su mejor algoritmo actualmente? ¿Qué pasos necesitas hacer?
Muy a menudo, no podrá determinar la clase de complejidad del problema, porque esto es básicamente O (n) (porque tiene que leer su entrada al menos una vez) u O (n log n) (porque tiene que ordenar). - Conozca muchos algoritmos : consulte la Lista de algoritmos y la Categoría: Algoritmos
- Conozca muchas estructuras de datos : Lista de estructuras de datos y Categoría: Estructuras de datos
- Piensa en tus datos de entrada / salida . ¿Puede darle más estructura eligiendo una estructura de datos particular? ¿Puedes mejorar tu tiempo de acceso? ¿Qué acciones necesita tomar para llegar a la solución (leer / almacenar valores intermedios / construido)? Esto podría conducir a una estructura de datos que debe construir a partir de los datos.
- Clasificación : la mayoría de las veces solo le interesa “ajustar” su solución si es mucho más compleja que O (n log n). Entonces, desde un punto de vista teórico, la clasificación es gratuita. Por lo tanto, vale la pena pensarlo: ¿hay orden en mis datos? ¿Tiene algún uso ordenar?
- Conozca sus limitaciones : cuando tiene una solución, a menudo tiene que tomar una decisión cuando quiere mejorarla: ¿Quiere pasar más memoria y menos tiempo o viceversa? Deberías saber qué
Sin embargo, realmente dudo que esto te ayude. Como participas en Top Coder, supongo que ya eres bastante bueno.
- ¿Cuál es la diferencia entre hash y minhashing sensibles a la localidad?
- ¿Cuál es el estándar de JMLR contra documentos en ICML y NIPS?
- Cómo entrenar un modelo de Keras con un gran conjunto de datos y luego ajustarlo con un conjunto de datos más pequeño de interés
- ¿Qué haces como programador de Machine Learning y qué hace que lo que haces sea interesante?
- Cómo configurar datos de entrenamiento para una red neuronal para generar valores de joystick basados en una entrada de imagen
Entonces podría ayudarte a aprender más sobre tu lenguaje de programación. Y practica. Mucho.