Los algoritmos no son más que pasos para resolver un problema dada alguna entrada. La mayoría de la gente piensa que un algoritmo tiene algo que ver con la búsqueda, la ordenación y la teoría de gráficos, probablemente porque la mayoría de los libros que tienen “algoritmo” en el título se centran en soluciones a esos dominios (teóricos). Pero los programadores que implementan interfaces gráficas de usuario, aplicaciones de inversión o sistemas integrados, también tienen sus algoritmos.
- Identifique el dominio al que se aplica su algoritmo. Tal vez sea teórico, por ejemplo, ordenar, buscar, etc. Tal vez sea específico de la aplicación: AI, GUI. Aquí se enumeran algunos dominios de aplicación: informática, pero hay muchos, muchos más.
- Estudie códigos o libros relacionados con su dominio y vea cómo las personas antes de usted han resuelto problemas similares. Probablemente, lo que está tratando de hacer ya se ha hecho, o se ha atacado algún problema similar. Por ejemplo, la IA tiene muchos algoritmos para el aprendizaje automático, la visión artificial, la navegación, etc. Evite reinventar la rueda, a menos que avance el estado del arte.
- Un estudio de los patrones de diseño (por ejemplo, el libro GoF u muchos otros) proporciona buenos antecedentes, ya que abstraerá muchos de los enfoques encontrados en la resolución de problemas de codificación. Algunos libros de patrones están orientados al dominio, centrándose en programación paralela, sistemas distribuidos, etc.
Con una comprensión de los problemas que otros en su dominio han resuelto y cómo se resuelven, es hora de que pueda ponerse a trabajar:
- Si el problema ya se resolvió, use su implementación y vea si cumple con sus requisitos. Si es posible, robe código de trabajo conocido de código abierto o libros de texto. Es bien sabido que, aunque es bastante simple de explicar, la búsqueda binaria es realmente difícil de implementar correctamente. Aproveche mejor el trabajo de otra persona si es posible.
- Si el problema no se resuelve, pero existe algo cercano, ajústelo para satisfacer sus necesidades. Tal vez devuelva su código al mundo para que otros puedan beneficiarse.
- Si el problema es nuevo, mediante un estudio cuidadoso de su dominio, probablemente tenga una buena base para encontrar una solución si sigue las sugerencias anteriores.
No voy a perder el tiempo aquí tratando de describir cómo codificar y depurar un algoritmo. Más bien, creo que los siguientes dos pasos son necesarios para asegurarse de que lo que está a punto de codificar realmente resuelve el problema:
- ¿Qué es una explicación intuitiva de los teoremas de jerarquía y sus pruebas en la teoría de la complejidad computacional?
- ¿Cómo se me ocurre una fórmula de suma para iterar sobre una matriz y cambiar el índice inicial con cada iteración?
- En matemáticas y ciencias de la computación, ¿cuál es / hay una diferencia entre las funciones calculables y computables?
- ¿Qué abstracciones te parecen interesantes? ¿Por qué?
- ¿Alguien sabe de una prueba de acceso público de que la poda alfa beta funciona?
- Indique claramente el problema, sus entradas, salidas y requisitos de rendimiento, si los hay. Si no sabe qué se supone que debe hacer el algoritmo y cuáles son sus entradas, escribir código no tiene sentido.
- Una vez que tenga un algoritmo en mente, impleméntelo con lápiz y papel, o tal vez en una pizarra. Dibuje imágenes para representar estructuras de datos (si las hay) y use abstracciones de su código para representar su lógica. Ejecute pequeños conjuntos de datos a través del resultado para ver si se comporta correctamente, ejecutando cada línea del algoritmo a mano y actualizando las imágenes que representan sus datos. Pruebe también las condiciones de contorno para asegurarse de que el algoritmo se comporta correctamente con los casos límite. Su código de lápiz y papel en esta etapa puede ser incompleto en los detalles, por ejemplo, si parte de su algoritmo requiere una función que clasifique los datos, no es necesario que ese código esté escrito en detalle; simplemente asuma que hace bien su trabajo y concéntrese en las partes del algoritmo que lo rodean donde está siendo original y creativo. Es importante en esta etapa no invertir tiempo en codificar todos y cada uno de los detalles. Después de todo, es posible que no necesite ordenar, y codificar un algoritmo de clasificación que funcione perfectamente habría sido una pérdida de tiempo.