¿Cómo aprendo algoritmos y estructuras de datos? [cerrado]


38

Esto es una continuación de mi pregunta anterior donde pregunté si es necesario aprender algoritmos y estructuras de datos. Siento que sí lo es.

Ahora trabajo en un entorno en el que nunca tendré la oportunidad de aprenderlo experimentando o prácticamente o en cualquier tarea. ¿Cuál es el enfoque correcto como los libros correctos, el tipo correcto de problemas, el tipo correcto de recursos que puedo utilizar para dar seis meses o un año o dos para aprender algoritmos y estructuras de datos? Y también moldear mi mente de manera que pueda relacionar problemas con estructuras de datos y algoritmos.


3
Cormen es tu amigo :)
Lukasz Madon

1
@lukas: Sin embargo, aún no lo he terminado, hay bastantes matemáticas allí con las que no me siento tan cómodo. Según mi conocimiento de algoritmos, estructuras de datos y su análisis, hizo mucho más que cualquier otra fuente única :)
Matthieu M.

También puede probar mi proyecto, que describe algoritmos populares y estructuras de datos de manera más directa que wikipedia y contiene códigos fuente casi para cada artículo (estructura, enfoque, algoritmo) ... es.algoritmy.net
malejpavouk

Respuestas:


40

Leer.

No, de verdad, lee.

Lea todo sobre algoritmo y diseño que pueda encontrar. Hay libros fenomenales por ahí. Los libros de algoritmos de Sedgewick son buenos. El Manual de diseño de algoritmos de Skiena también es bueno. Juntos, estos libros me siguen en cada estantería en cada trabajo al que voy, junto con The Mythical Man-Month.

Entonces pregunta.

Habla con las personas que respetas. Pregúnteles qué puntos de decisión tenían y por qué tomaron las decisiones que tomaron. Los buenos siempre podrán decirte "Elegí hacer X porque es mejor que A, B de esta manera. Podría haber ido con C, pero sentí que era una mejor opción debido a esto".

A continuación, hazlo.

Construye cosas. Construye cosas que nunca usarás. Construye cosas que nunca necesitarás. Ve a escribir un programa que resuelva un rompecabezas de Sudoku. Ahora ve a hacerlo de nuevo. Y otra vez. Construirlo de 5 maneras completamente diferentes. Crea un programa que genere rompecabezas de Sudoku y aliméntalo con los solucionadores. Encuentra qué solucionador es el más rápido. Y entonces...

Averigua porque.

El "qué" casi nunca es importante. Quiero decir, sí, es fundamental para terminar el proyecto en cuestión, pero al final si sabes el "qué" sin saber el "por qué", es mejor que nunca lo hayas hecho. Tienes una viñeta en tu currículum. Ve por una galleta y felicítate. El "por qué" es mucho más importante que el "qué".

Y para que conste, el Sudoku fue un ejemplo. Pasé mucho tiempo libre haciendo ese ejercicio con un montón de acertijos lógicos en Kongregate y aprendí mucho en el camino.

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/


realmente muy buena respuesta! ¡Me gusta cómo expresaste tu consejo!
paxRoman

¡También llevo libros de Sedgewick y Skienna a todas partes! ¡Esa es probablemente otra razón por la que me encantó tu respuesta!
paxRoman

y Cormen a la mezcla por favor.
AruniRC

1
En la era de un impulso cada vez mayor de información en Internet, es importante agregar: leer libros (no exclusivamente, por supuesto). ¡Una introducción coherente y coherente en un asunto que tiene más de 2-3 páginas HTML separadas por anuncios es A Good Thing ™ ! No lo subestimes (y sí, por supuesto, los ebooks están bien).
Joachim Sauer

1
Convenido. La consistencia es la clave. Es difícil asimilar las estructuras de datos cuando obtiene una o dos de una docena de fuentes diferentes. Los libros también tienden a tener mejores diagramas (algunos blogs / fuentes en línea lo hacen, pero en general los libros son mejores). Los libros de Sedgewick tienen una combinación particularmente buena de diagramas, código y descripción fáciles de seguir.
Hounshell

10

Algoritmos

Tomé lecciones de magia en grupo cuando tenía doce años. El nombre del mago era Joe Carota. Hizo un truco una vez y solté: "¿Cómo hiciste eso?" Dijo algo ese día que me ha quedado grabado desde entonces.

La respuesta de Joe fue: "Michael, si realmente quieres saber cómo se hace ese truco, debes descubrir cómo lo harías tú mismo".

Bueno, por supuesto, eso no era lo que quería escuchar, pero sí me concentró en la resolución de problemas. Esta fue la resolución de problemas desde mi perspectiva. Si mi primer intento de resolver el problema tomó diecisiete pasos y fue realmente desagradable, la buena noticia fue que resolví el problema.

Luego, al observar la solución que había desarrollado y buscar formas de refinar esa solución, aprendería cómo optimizar el resultado final. Más adelante en mi vida de programación de computadora descubrí que este proceso se llamaba "Refinamiento gradual". Creo que hoy lo llaman refactorización.

Funcionó entonces todavía funciona ahora.




2

Si no puede tomar un curso sobre esto, le recomiendo el Manual de diseño de algoritmos. Hay un PDF gratuito aquí , pero vale la pena conseguir el libro real, si usted planea en la programación profesionalmente.


Las soluciones están aquí. Me parece genial tenerlos cuando aprendes
David Rinck

1

Intente inscribirse en un curso de nivel universitario en estructuras de datos y algoritmos, siempre es bueno aprender estos conceptos junto con otros.


Soy un graduado de ciencias de la computación y han pasado seis años desde entonces. Nunca me concentré en este tema, fue la web, la usabilidad, el servidor del cliente, lo que me atrajo y estoy trabajando solo en estos campos, pero ahora siento que también debería aprenderlos. Cuáles son tus pensamientos.
sushil bharwani

Regrese y tome un curso de actualización :-)
Martijn Verburg

1

Comience a trabajar para resolver problemas clásicos en, por ejemplo, la esfera en línea , el sitio puede no parecer tan elegante, pero vaya, estos son problemas de programación clásicos que requieren muchas de las estructuras de datos y algoritmos importantes que se utilizan en la actualidad.

Las soluciones se pueden enviar en una variedad de lenguajes de programación desde C / C ++ a JavaScript, Lisp, Smalltalk, ensamblador + unos 40 más. Por lo tanto, puede concentrarse por completo en resolver el problema con cualquier lenguaje de programación con el que se sienta cómodo.


1

CLRS

Este es, con mucho, mi recurso favorito. Lo utilicé en mi curso universitario de algoritmos de informática y terminé comprando el libro 4 años después para leerlo por mi cuenta y prepararme para mis cursos de MS Comp Sci. No es una lectura fácil de ninguna manera, pero si trabaja para comprender algunas de las matemáticas / pruebas presentadas y luego implementa el pseudocódigo en su (s) idioma (s) favorito (s), vale la pena el alto precio. El Manual de diseño de algoritmos que otros han mencionado también es un gran recurso para aprender a identificar problemas, pero descubrí que CLRS es mejor por puro detalle.


0

Siempre puedes probar algo como esto: http://codekata.pragprog.com/

Siempre aprendí mejor al pensarlo en lugar de leerlo. Sin embargo, debe tener documentación / material de lectura disponible para buscar respuestas.


0

¡Compre este libro , preste esto o robe esto! El resto seguirá :)

Introducción a los algoritmos de Rivest y Cormen. Será muy difícil de seguir inicialmente una vez que pase la explicación de Mergesort en la introducción. Todo se desarrolla maravillosamente.

Además, mejorará más si resuelve los problemas que figuran en el libro. Nunca quise separarme del libro, incluso después de graduarme de la escuela de posgrado. Es tan bueno

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.