¡Absolutamente! Sin embargo, probablemente necesitará mucho lápiz y papel.
Tomemos un ejemplo simple, digamos merge sort. Puede tomar una lista, ejecutar el algoritmo para ver cómo funciona, convencerse de que el invariante se mantiene e incluso probarlo formalmente. Y de hecho es importante hacer todos estos ejercicios.
Sin embargo, en una situación de la vida real, puede encontrarse en una situación en la que está tratando de ordenar miles de millones de enteros. ¿Puedes simplemente ejecutar un algoritmo de clasificación en memoria de libros de texto? ¡No! Es posible que deba dividir su entrada en varios archivos, pensar en algo que implique varios montones, o tal vez incluso usar algo similar a Map-Reduce. Es posible que no todos sus aportes lleguen simultáneamente, por lo que es posible que también tenga que explicar eso. Quizás pueda explotar ciertas propiedades de sus datos para facilitar su tarea (por ejemplo, podría estar tratando con un dominio restringido de números). Otro ejemplo es un escenario en el que intenta resolver un tipo de problema de optimización o programación. Es posible que no sea factible, ni siquiera necesario, obtener la solución matemáticamente óptima, ya que podría estar lidiando con un problema de NP completo. Tal vez su cliente esté de acuerdo con algo razonablemente cercano (dentro de límites comprobables) a la solución óptima, siempre y cuando se ejecute increíblemente rápido. Y hay varias heurísticas que pueden ayudar con eso. Es probable que un libro de algoritmos estándar no tenga la respuesta exacta para su situación única, pero ciertamente lo equipará para pensar en su problema y encontrar una solución, o saber dónde buscarla (porque seamos sinceros, la mayor parte En ese momento, alguien ya lo resolvió y lo publicó en línea :))!
En cuanto a su segunda pregunta, “¿Es necesario ser un buen programador para ser bueno en algoritmos?”, No creo que necesite acercarse a una computadora para ser bueno en algoritmos. Muchos de los “grandes éxitos de algoritmos” que todos aprendemos en nuestro curso estándar de Algoritmos UG fueron concebidos por personas como Knuth, Dijkstra, Hoare, Tarjan, etc., quienes ni siquiera tenían una fracción de los recursos informáticos que tenemos hoy a su disposición. . ¡Sin embargo, no les impidió pensar con mucha anticipación! Un algoritmo es simplemente un conjunto de pasos matemáticos precisos para transformar una entrada arbitraria en una salida deseada, dadas ciertas condiciones. Realmente no es diferente de resolver un problema matemático. La mayoría de las veces, todo lo que realmente necesita es un lápiz y papel, y mucha paciencia. Si puede encontrar un buen algoritmo no trivial para resolver su problema favorito (elija el que más le guste), demuestre su corrección y analice cómo se comportaría en función del tamaño de entrada, felicidades, ¡es bueno con los algoritmos! No se requieren habilidades de programación (aparte de un conocimiento básico de las estructuras y primitivas comunes que generalmente ofrecen todos los lenguajes de programación modernos).
- ¿Qué tiene de bueno SICP?
- ¿Cuáles son algunos buenos libros de F # para un principiante que no se basan en el conocimiento de C # ni .NET?
- ¿Cuáles son los mejores audiolibros para informática y programación?
- ¿Cuáles son algunos buenos libros electrónicos en Python?
- ¿Por qué la mayoría de los libros de programación o tutoriales son difíciles de entender y hacen que los conceptos sean difíciles de aprender?