El proceso de diseño de algoritmos es algo similar al método científico. Intenta comprobar el diseño de un algoritmo (hipótesis) para verificar su validez (prueba), medir su rendimiento (observaciones) e iterar para mejorar.
Vale la pena conocer el límite inferior del mejor rendimiento que puede obtener. Es por eso que la complejidad algorítmica (O (n) vs O (nlogn)) del problema es útil para estimar.
El primer paso es la especificación del problema, el contexto es importante. Si está resolviendo un problema para un cohete o para Big Data tendrá diferentes restricciones. Conocer el contexto puede proporcionar límites para su entrada y hacer que el problema sea mucho más simple
- ¿Cómo resolver el problema de corchetes en SPOJ (SPOJ: SQRBR)?
- ¿Cómo se implementa la estructura de datos establecida en C?
- ¿Cómo es posible que el hashing sea imposible de revertir? ¿Hay alguna prueba?
- Cómo escribir un programa en C para implementar un algoritmo de planificación de prioridades, junto con la visualización del diagrama de Gantt
- ¿Vale la pena iniciar una compresión de datos sin pérdidas?
Me gusta mucho un ejemplo del primer capítulo del libro Programming Pearls de Jon Bentley. Habla sobre cómo estaba ayudando a un amigo a ordenar un archivo de disco. Saber más sobre el problema redujo drásticamente la complejidad del problema y mejoró el rendimiento.
Otra es que la estructura de datos correcta a menudo es clave para el algoritmo óptimo. Por lo tanto, vale la pena saber más sobre las estructuras de datos.
Uno de los meta algoritmos más importantes para conocer es Recursion (informática). Muchos problemas pueden resolverse combinando soluciones a problemas más pequeños. En el caso del máximo divisor común, la recursividad en valores más pequeños es esencial para el algoritmo euclidiano.
No necesita memorizar los algoritmos, intente inferir el patrón. Hacer pruebas de hipótesis
¿Se puede reducir el problema a algoritmos bien conocidos? ¿Ayudaría una estructura de datos? ¿Se puede resolver el problema recursivamente? ¿Ordenar la entrada lo haría más fácil ?, etc.