estoy algoritmos de aprendizaje como si yo estoy aprendiendo a tocar la guitarra - repetición tras repetición.
Entonces no está aprendiendo los algoritmos. Estás aprendiendo la repetición. Dos cosas diferentes El uso de un lenguaje de programación por un libro de algoritmos es un factor secundario. Es solo un vehículo de instrucción, un detalle de implementación.
Lo que debería concentrarse es en la comprensión de la estructura, lógica y características matemáticas de un algoritmo (y posiblemente la estructura (s) de datos asociada a ella.)
Eso es lo que debería ser su objetivo.
Pero al hacerlo me siento como si estuviera más obsesionado con que solo voy a poder para implementar estos en java.
Pero eso se debe a que se está centrando en cómo se está codificando el algoritmo (en Java en este caso particular). Se está centrando en un detalle de implementación.
Cuando aprende a conducir, no se centra en cómo aprende a conducir un Honda Civic o un Nissan Maxima. Aprenderá la esencia de lo que es conducir, las reglas generales, las precauciones necesarias y las leyes que rigen la conducción de un vehículo.
Lo mismo con los algoritmos de aprendizaje. No aprende "Algoritmos en Java" no más que "Algoritmos en Haskell". Primero aprendes Algoritmos, el vehículo (sin casos muy especializados) es secundario.
Usted debe centrarse en lo que el algoritmo hace, cómo y por eso . Preguntas como "¿cómo/por qué funciona?" y lo más importante * "¿cuáles son las características de rendimiento?", Esas son las cosas en las que debería centrarse.
Todos los buenos libros de algoritmos (incluidos de Sedgewick) llevan ese mensaje. En eso deberías enfocarte. Cómo llegas a ese nuevo enfoque, eso es una función de las estrategias personales de aprendizaje.
¿Cómo aprendería exactamente los algoritmos si el libro que está utilizando es específico del idioma?
Al no enfocar el idioma. Céntrese en la estructura, concéntrese en las estructuras de datos involucradas, las invariantes, las precondiciones y las postcondiciones. Comprender el comportamiento asintótico descrito en Big-O (o Big-Omicron), Little-O/Little-Omicron y Omega.
Estás aprendiendo algoritmos, no programando en Java a través de algoritmos de codificación.
Si no puede hacer este salto mental, significa que no tiene suficiente práctica o análisis abstracto. No es un insulto, sino una observación y un consejo. Codificación, el uso de un lenguaje de programación es típicamente secundario al análisis matemático de la informática, el enfoque de la Informática (de la cual los algoritmos forman parte).)
NOTA que he hecho en Java para más de 10 años, y aunque me gusta para el trabajo, creo firmemente que es una pobre herramienta para el aprendizaje de temas de programación o CS.
Uno es mejor servido aprendiendo Algoritmos con A) un lenguaje de programación a nivel de sistemas de procedimiento como C o Ada, o un simulador de pseudo ensamblador de alto nivel, o B) un lenguaje funcional como Lisp o Haskell.
Las características orientadas a objetos en los lenguajes OO puros/pseudo puros simplemente se interponen en el camino.
Los algoritmos son estructuras matemáticas con una naturaleza descriptiva de cómo (operacionalmente) y/o qué (matemáticamente). El primero es perfectamente adecuado para la programación de procedimientos, el más tarde para la programación funcional.
Los escribiría en cualquier idioma que use el libro. Entonces podría escribirlos en otra cosa. O viceversa. –
A menos que planee escribir algo de Haskell o Perl en un futuro cercano, no me preocupe. La mayoría de los lenguajes de programación no son tan diferentes, y la mayoría comparte un conjunto básico de características universales (aunque la sintaxis y la visión del mundo tienden a cambiar). Una vez que tenga experiencia, podrá elegir nuevos idiomas como pelusa. En este momento, concéntrese en los conceptos reales de los algoritmos en lugar de en el idioma que usa para escribirlos. – Miguel
No está disponible hasta el 25 de junio, pero puede encontrar que [este curso de algoritmos Udacity] (http://www.udacity.com/overview/Course/cs215) es útil. – Moses