¿Qué algoritmos y estructuras de datos debe conocer absolutamente un desarrollador? [cerrado]

24

Quiero ser un desarrollador Java empresarial exitoso. ¿Con qué algoritmos y estructuras de datos debo estar bien versado? ¿Qué libros me recomendarías?

Para ser un desarrollador Java exitoso, ¿necesito conocer todos los algoritmos avanzados como los que se proporcionan en CLRS ?

¿Me puede sugerir una lista de los temas que debería aprender en el orden descendente de su prioridad?

Debo saber:

  • ¿Buscando?
  • ¿Clasificación?
  • Gráficos / Árboles?

etc?

Chankey Pathak
fuente
1
@jonsca: ah marketing de afiliados ah? ;)
Chankey Pathak
No, bueno, SE cambia el enlace como tales, pero simplemente pensó que no todo el mundo sabe que esas iniciales :)
jonsca

Respuestas:

17

Introducción a los algoritmos de Cormen es un buen libro para algunos fundamentos teóricos básicos.

Dicho esto, la mayoría de los algoritmos y las estructuras de datos ya han sido codificados, probados y optimizados por otros, y no hay razón para volver a implementarlos una vez más. Para ser un desarrollador de Java exitoso , necesita conocer The Collections Framework al revés.

Joonas Pulakka
fuente
3
Sin embargo, debe conocer los costos involucrados en los algoritmos: esa búsqueda de amplitud primero encontrará la ruta más corta mientras usa potencialmente mucho espacio, por ejemplo.
Frank Shearar
De acuerdo, aunque solo obtener el espíritu de la gran notación O es muy útil.
Joonas Pulakka
8

Si va a ser un programador de cualquier tipo, debe comprender todas las estructuras de datos básicas (pilas, colas, matrices, listas vinculadas, tablas hash, árboles, etc.) con cierto detalle. Suficiente al menos para poder implementar cualquiera de ellos por sí mismo si se encuentra en un mundo sin marcos de colecciones para hacer el trabajo por usted.

Con respecto a los algoritmos, me parece que son más herramientas para los trabajos, mientras que sus estructuras de datos son bloques de construcción fundamentales. No creo que sea tan importante conocer los detalles de cómo implementar cada algoritmo con el que te puedas encontrar. Lo que debe poder hacer es evaluar qué tan bien funcionará un algoritmo para un propósito determinado. A veces, la diferencia entre la búsqueda de profundidad primero y de amplitud o el tipo de clasificación que realiza en sus datos puede marcar una gran diferencia en el rendimiento o el éxito general de su código, por lo que saber juzgar eso es muy importante.

glenatron
fuente
0

Además de las otras respuestas, me gustaría agregar que el estudio de algoritmos no es solo para conocer técnicas bien conocidas (que todavía es importante), sino también para poder comprender el proceso de pensamiento que entra en la elaboración Una solución a un problema con el que te encuentras en la vida real, no necesariamente bien conocido.

MAK
fuente
0

Estoy aprendiendo Java ahora unos días.

Quiero ser un desarrollador empresarial exitoso. Entonces, ¿qué algoritmos y estructuras de datos debo conocer? ¿Qué libros me recomendarías?

Para ser un desarrollador Java exitoso, ¿necesito conocer todos los algoritmos avanzados como los que se dan en CLRS?

¿Me puede sugerir una lista de los temas que debería aprender en el orden descendente de su prioridad?

Dime el nombre de algunos temas que debo saber. ¿Te gusta buscar, ordenar, gráficos, árboles, etc.?

Es bueno que esté ansioso por ampliar y mejorar sus habilidades de programación. Sin embargo, es importante no tratar los algoritmos como un catálogo de cosas para memorizar. Lo que necesita saber para convertirse en un buen desarrollador (en Java o cualquier otra cosa) es comprender el análisis algorítmico.

Aprende esto aprendiendo unas pocas estructuras de datos y algoritmos, y aprendiendo a analizar su rendimiento en términos de tiempo y espacio (memoria). Búsqueda, clasificación, gráficos, árboles, montones, montones y todas esas cosas buenas. Esto también debería seguir algunos conceptos básicos de la teoría de la computación y las matemáticas discretas (incluso si en el ámbito de Java nunca podemos usar esos dos temas directamente, sus beneficios son indirectos).

Separe el aprendizaje de un lenguaje de programación (en su caso Java) con el aprendizaje del análisis algorítmico (que es diferente de la "memorización" de algoritmos y estructuras de datos).

"Algorithms in a Nutshell" de George T. Heineman, Gary Pollice y Stanley Selkow es un buen comienzo. "Algorithms" de Sanjoy Dasgupta, Christos Papadimitriou y Umesh Vazirani es otro buen libro de texto de pregrado.

Lo mejor es tomar cursos de 9-12 créditos en programación antes de tomar un curso de pregrado, de nivel 3000 en algoritmos. Salvo eso, el autoestudio con los dos libros que mencioné podría ser una buena alternativa (el autoestudio podría no ser para todos).

¡Buena suerte!

luis.espinal
fuente