Si tuviera que aprender estructuras de datos y algoritmos nuevamente, ¿qué haría de manera diferente?

Bueno, solía estar tan satisfecho con mi conocimiento de las estructuras de datos, hasta que conocí el espectacular libro de Knuth, Art of computer Programming. Mientras lo revisaba, página por página, me estaba enviando a un planeta desconcertado. Llego a saber que no sabía nada. Y, por supuesto, fue el despertar. Nunca fui tan malo en matemáticas, pero realmente nunca pensé en las estructuras de datos de esa manera. El libro me hizo mirar las estructuras de datos y el algoritmo de una manera completamente nueva. Y también me enseñó algunas lecciones increíbles:

1. ¿Por qué usar el software de otra persona? Entonces, si desea hacerlo nuevamente, hágalo en un lenguaje que esté más cerca de la máquina. Las estructuras de datos tienen que ver con la percepción de datos de la máquina. Entonces, conozca su máquina correctamente. Hazlo en asamblea.

2. Como programador / ingeniero, tendrás una relación oscura, mestiza, con las matemáticas, toda tu vida . No importa cuán duro trate de evitarlo, siempre se colará. Y, muchas veces no tendrá idea, estuvo presente allí. Las estructuras de datos y Algos están profundamente arraigados en matemáticas. Si quieres volver a hacerlo, hazlo después de desarrollar una profunda afinidad por las matemáticas. El mundo se verá más hermoso y obvio.

3. Y por último, si aún no lo ha hecho, hágalo nuevamente con Knuth’s The Art of Computer Programming. Pocas sugerencias,

a) No te vuelvas demasiado religioso sobre las matemáticas. Con este libro en la mano, hay grandes posibilidades de que te atrapen con las matemáticas de tal manera que puedas terminar con un título en matemáticas básicas. Siempre mantén el enfoque. Al final, debes ser un programador, ¡recuerda!

b) No pierdas la esperanza si no entiendes las cosas. Sigue recorriendo las páginas. Algún día lo harás.

c) No sigas este libro para tus exámenes.

Habría leído Introducción a los algoritmos . Oh espera…

Me centraría más en el diseño y análisis de estructuras de datos que en las estructuras de datos en sí. ¡Mucho menos sus implementaciones!

Básicamente, preferiría el tipo de clase donde un examen presentaría nuevas estructuras de datos que nunca había visto antes o me haría diseñar una estructura de datos para algunos requisitos en lugar de probar qué tan bien memoricé las estructuras que cubrimos.

Esto me recuerda que necesito comprar el libro de Okasaki sobre estructuras de datos funcionales, no tanto por las estructuras de datos reales (puedo buscarlas en línea) sino porque presenta una nueva forma de analizar estructuras de datos y, creo, habla de cómo aprovechar la pereza para diseñar estructuras con buenas asintóticas.

En lugar de avanzar a través de las estructuras de datos y los algoritmos en el orden tradicional, colóquelos todos en un montón mínimo y, a continuación, retírelos uno por uno. Esto se puede hacer en O (n * log (n)) tiempo y O (n) espacio. Alternativamente, puede ordenar previamente las estructuras de datos y los algoritmos.

Mi profesor de estructuras de datos era un orador aburrido y escribió un libro de texto igualmente aburrido, que por supuesto era el texto de la clase.

Hoy, me saltearía sus conferencias y vería las excelentes disponibles gratis en línea de universidades como MIT, Stanford, Princeton y Carnegie-Mellon. Me saltaría su libro y Google para una mejor explicación de lo que necesitaba aprender.

No tenía acceso a una tienda de golosinas tan conveniente de fuentes educativas en aquellos días primitivos.

Hubiera intentado TA la clase de algoritmos en Caltech. En ese momento pensé que me distraería de mis clases, y no tenía tanta confianza en mis habilidades. Pero enseñar es muy divertido y mágicamente te hace mejor en el material.

He sido un TA durante los últimos dos trimestres, y es una de las cosas más gratificantes que hago como estudiante graduado.

Los implementaría yo mismo. Además, aprendería tantos ejemplos prácticos como pueda . También me volvería competente con las complejidades del tiempo.

Todavía tengo que tomar mi clase de algoritmos en la Universidad, pero he tomado una clase de estructuras de datos en el último semestre. En ese momento, no sabía lo importante que son las estructuras de datos. Obtuve una buena calificación e hice bien en el curso pero no hice lo suficiente. No conocía muchos ejemplos prácticos de dónde se usaban todas esas estructuras de datos.

Fue solo después de unirme a quora que pude conocer la importancia de las estructuras de datos. Ahora, estoy planeando leer un libro nuevamente y resolver muchos problemas relacionados con estructuras y algoritmos de datos.

¿Qué quieres decir con “otra vez”? Nunca debes dejar de aprenderlos.

Primero, algunos antecedentes: como con muchos desarrolladores de mi edad, entré en la programación por la puerta trasera, sin un título de CompSci. Obtuve un BA en comunicaciones y un MBA con énfasis en lo que entonces se llamaba procesamiento de datos. Tuve algunos cursos de programación, pero no tan profundo o amplio como alguien con un título de CompSci. Esto significaba que tenía que recuperar mucho terreno. Leí mucho, aprendí mucho de los compañeros de trabajo y de revisar el código. Me suscribí a una revista llamada Computer Language, que fue un gran recurso que fue descontinuado hace años.

Compré libros de algoritmos, así como también uso referencias en línea (MIT y otros cursos, MOOCS, Wikipedia (!) Y sitios dedicados a algoritmos), y pasé tiempo trabajando en ellos y comprendiéndolos. Todavía trato de aprender nuevos algoritmos o actualizar los antiguos, principalmente con la lectura y la práctica en línea. He hecho problemas de codificación en línea en sitios como Project Euler, aunque no hace mucho tiempo. Debería volver a eso.

Supongo que mi punto es que el aprendizaje de algoritmos no es algo único. Debe evaluar dónde se encuentra y ver qué puede hacer para aprender y mejorar en el futuro. En realidad, esto se aplica a más de la vida que solo algoritmos.

Hubiera usado un libro diferente y ver videos en línea en lugar de asistir a mis conferencias.

El libro, que la escuela recomendó, fue bastante horrible. No me dio lo que necesito saber, pero me dio analogías muy tediosas y largas. Quiero decir, las analogías son buenas, pero si toman más tiempo para leer cuando podría haberlas entendido si me hubieran dicho directamente lo que están tratando de describir, no necesito las analogías. Sin embargo, terminé leyendo todo porque estaba paranoico de que el profesor hiciera preguntas basadas en las analogías. Tuve un momento difícil con ese libro. Cuando busqué otro libro del programa de una universidad diferente, leí otro libro y fue conciso. Me encantó el libro.

Mi profesor leyó diapositivas de power point. Tuve un montón de diversión…. Quiero decir, nadie vendría a clase … Solo fui porque me sentí obligado a pagar la conferencia … bien podría escucharla. Sentí que terminé perdiendo una hora sentado … Realmente no disfruté las estructuras de datos y los algoritmos. Más tarde, vi los videos de Princeton sobre la estructura de datos y algoritmos. Fue mucho mejor

Prueba diferentes fuentes.

La forma más diferente pero interesante de aprender es jugar a la aplicación de juegos Algo.Ninja. Es una aplicación agradable para entender prácticamente la lógica detrás de todos los algoritmos básicos de búsqueda, clasificación y gráfico (árbol).

Aquí puede seleccionar cualquier juego de algoritmos en particular que lo ayudará paso a paso, ya sea que vaya bien o no. Hará un seguimiento de los pasos correctos tomados por usted y con su práctica regular de alrededor de 20-30 minutos durante aproximadamente 2 semanas, me convertirá en un perfeccionista en algoritmos.

En realidad, resolvería algunos problemas con respecto a ese tema en particular. Juez en línea de URI: urionlinejudge.com es un buen sitio web para comenzar. Elegir algunas opciones en la configuración y cada problema tiene sus temas. Ayudará mucho También – CS 97SI: Introducción a los concursos de programación competitiva Buen sitio web y problemas.

Aprender bien un tema una y otra vez es algo diferente y aplicar ese poco conocimiento que obtuviste es diferente. Incluso si algún curso de un buen instituto / sitio web no garantiza que usted lo sabe todo, pero aplicar ese poco conocimiento mientras resuelve el problema lo llevará a alguna parte.
El problema se puede encontrar en SPOJ, HackerRank, Topcoder, etc.
En cuanto a los principiantes, SPOJ es un poco difícil
Pocos lugares para aprender algo y la estructura de datos son: –
-> Algoritmos: diseño y análisis de algoritmos Parte 1,2 de Coursera – Cursos en línea gratuitos de las mejores universidades ofrecidas por la Universidad de Stanford
-> Estructura de datos: conferencias MIT OCW en youtube
-> Ambos cursos también están disponibles en NPTEL (Conferencia / cursos de aulas directas de IIT)

Tomaría dos cursos de Coursera: cursos gratuitos en línea de las mejores universidades. Son Algoritmo de Diseño y Análisis -1 y 2. Haz todo lo posible del curso. Haga todas las tareas, tareas, lea todo, desde las lecturas sugeridas.
Además, participaría en concursos de programación de TopCoder, Codeforces, Google Code Jam.
Eso es lo suficientemente bueno como para hacer que alguien sea experto en Algoritmo y Estructura de Datos (en mi opinión).

Como mencioné antes que yo, hay millones de enlaces web / libros electrónicos / blogs para que comiences. En caso de que quiera más ambiente de aula universitaria, personalmente me gusta este curso en línea del MIT: videos de conferencias | Estructuras de datos avanzadas | Ingeniería Eléctrica e Informática | MIT OpenCourseWare.

Sintetizaría ese conocimiento en una hoja de referencia muy sucinta para referencia futura. La mayoría de ellos son fáciles, pero terminas olvidando si no los usas, y terminas buscándolos una y otra vez (por ejemplo: búsqueda de ruta A *: volví a volver a aprender esto un par de veces … si Me molesté en extraer los elementos esenciales y anotarlos, no tendría que volver a hacerlo nunca más).

Probablemente terminaré haciendo esto por mí mismo algún día. Agregaría cada estructura de algoritmo / datos como una nota en Evernote, pondría todas estas notas en un cuaderno y etiquetaría cada estructura de algoritmo / datos con sus propósitos para una referencia futura fácil (por ejemplo: Búsqueda de ruta).

Buscaré en Google algoritmos específicos, por ejemplo, notación O grande.

Razón:
Quiero tener la idea básica detrás del algoritmo. Y luego obtendré un libro.

La mayoría de los libros son muy difíciles de seguir. Cuando leí por primera vez la notación Big O, no tenía ni idea, pero buscar en Google me ayudó a al menos obtener toda la imagen detrás del algoritmo.

También estudiar con su compañero puede sobresalir en su aprendizaje y comprensión. Y, por supuesto, hacer mucha práctica escribiendo código. Primero en pizarra o papel y luego en IDE.

No aprende algoritmos , los prueba y los aplica para resolver algunos de sus problemas o para aplicar cierta funcionalidad. Aprende a pensar fuera de la caja e intenta aplicar algunos patrones a su software. Y como alguien ya dijo, TI se trata de aprendizaje constante y expansión, por lo que no hay “aprender de nuevo”. El aprendizaje nunca se detiene.

Hubiera comenzado con Lisp en lugar de BASIC.

Las conferencias MIT OCW son geniales, el profesor de enseñanza tiene una gran claridad, renovó mi interés en el campo.

Creo que haré más impuestos prácticos sobre ellos en el momento en que los aprenda a hacer que se conviertan en una parte inconsciente de mi programación. Para ser honesto, en China, aprendemos todas las estructuras de datos en nuestra lección, pero la mayoría de las veces nos quedamos en la capa conceptual y aprendemos su implementación de pseudocódigo, no el contexto concreto sobre ellas. en ese momento, parece que los he aprendido bien porque los conozco. pero cuando quiero usarlos bajo alguna condición o quiero usar las estructuras existentes para crear nuestra propia estructura para satisfacer nuestras necesidades, parece difícil. la razón por la que creo es que no los practicamos en contextos diferentes y probamos su uso