¿Cuál es la mejor manera de aprender estructuras de datos y algoritmos para estudiantes que no son de CS / IT?

A partir de los detalles: OP había trabajado durante 2 años en TI. Esto significa que OP tiene al menos una experiencia básica con uno de los principales lenguajes estáticamente tipados como Java o C ++. Por lo tanto, me estoy saltando la parte en la que el OP tiene que aprender un idioma (de lo contrario, OP puede aprender el nicho relacionado con Java / C ++, en cualquier lugar de Internet, practicar la escritura de código en ese lenguaje en particular).
La razón por la que sugerí un lenguaje tipado estáticamente es porque establece un mejor contexto sobre “¿qué representa qué?”, ​​Especialmente cuando codifica sus propias estructuras de datos.

Ahora, viene la parte importante donde aprenderá estructuras de datos y algoritmos. Un tema como este exige cierta aptitud para el pensamiento cuantitativo. Para seleccionar un lugar para aprender estructuras de datos y algoritmos, tengo tres mejores opciones para usted, de las cuales puede seleccionar según el tiempo disponible que tenga para practicar.

  1. Opción 1 (si el tiempo disponible es de alrededor de 6 semanas):
    Comience con las estructuras de datos básicas como Lista enlazada – Pila – Cola – Árboles binarios – Montón. Aprende de estructuras de datos – GeeksforGeeks. Cada vez que aprende una estructura de datos, practique preguntas relacionadas con ella. Las preguntas disponibles en GeeksforGeeks en forma de artículos presentan una solución en la misma página. Sugeriría no golpear directamente la solución. Intenta encontrar tu propio enfoque primero. Asigne un lapso de tiempo que, cuando haya expirado, pueda mirar, leer y comprender la solución. Termina todas las estructuras de datos básicos. (Opcional: más adelante tendrá una comprensión suficiente de algunas Estructuras de datos avanzadas como Segment Tree / Fenwick Tree / Trie. Esto solo se pregunta en las entrevistas en Tech Giants como Facebook, Amazon y Google).
    En este momento, es posible que haya adquirido un buen grado de pensamiento cuantitativo necesario para la práctica de algoritmos. Comience con la sección de algoritmos en Algoritmos – GeeksforGeeks. Repita el mismo ciclo de lectura, resolviendo preguntas para cada paradigma de algoritmo como Divide and Conquer / Greedy.
  2. Opción 2 (si el tiempo disponible es de alrededor de 8 a 10 semanas):
    Hay una serie de secciones para estructuras de datos y algoritmos en HackerEarth conocida como Code Monk (Code Monk – Sé un mejor programador). Esta es una serie impresionante compilada por HackerEarth. En cada sección proporcionan una explicación teórica clara y concisa (ahorro de tiempo) sobre la estructura de datos / algoritmo. En la parte inferior de la sección, proporcionan un enlace de práctica a algunos problemas relacionados con esa estructura / algoritmo de datos. Esta serie se organiza gradualmente en dificultad, como programación básica y matrices / cadenas al principio (que puede omitir ya que puede estar familiarizado con ellas). Luego viene la Clasificación-Búsqueda, pocas estructuras de datos, dividir y conquistar, secciones de programación dinámica. Completa todas estas secciones presentes en Code Monk.
  3. Opción 3 (si el tiempo disponible es más de 10 semanas):
    Puede finalizar las Estructuras de datos de GeeksforGeeks que se presentan en la Opción 1. Para los algoritmos en Stanford, existe el Curso de algoritmos de Tim Roughgarden Algorithms | Coursera. Complete este curso, resuelva las tareas. Este curso establecerá un pensamiento algorítmico concreto y también brindará un conocimiento formal sobre los algoritmos.

Después de probar cualquiera de las opciones anteriores, es posible que tenga conocimiento sobre estructuras de datos y algoritmos y también cierto grado de pensamiento algorítmico. Pero cada empresa exige sus propias necesidades únicas en la Prueba de codificación o en las entrevistas en ese lugar. Necesita practicar preguntas sabias de la compañía. Para este propósito, puede practicar en la sección Company Wise en este enlace (Un portal informático para geeks). Justo antes de una o dos semanas, cuando tenga una entrevista con una empresa, puede filtrar las preguntas para esa empresa en la página anterior de GeeksforGeeks. Resuelva preguntas relacionadas con esa compañía (también hay soluciones presentes para algunas preguntas). Además, le sugiero que lea las experiencias de entrevistas de otras personas archivadas en GeeksforGeeks. Supongamos que tiene una entrevista para Amazon, luego busque en Google “Amazon Interview Experience GeeksforGeeks”. Encontrará un enlace como este Amazon Archives – GeeksforGeeks. Consulte el enlace para ver las experiencias de la entrevista. Puede que mi sugerencia sobre la experiencia de la entrevista en Google en GeeksforGeeks sea absurda, pero estas páginas archivadas no están bien indexadas en GeeksforGeeks (por lo tanto, debe buscarlo en Google).

¡Feliz codificación y la mejor de las suertes!

PD:
El marco de tiempo que mencioné para esas Opciones se calcula en función de mi experiencia personal, la experiencia de mis compañeros de lote en mi universidad y de algunos de mis colegas en mis pasantías. Cada persona es diferente, puede terminar esas opciones antes del período de tiempo mencionado o puede tomar más tiempo. Pero el orden es el mismo

TimeRequired (Opción 1) <TimeRequired (Opción 2) <TimeRequired (Opción 3).

Además, el período de tiempo depende de la cantidad de preguntas prácticas que considere resolver para cada estructura de datos / algoritmo en la opción 1 y la opción 2.

Creo que esta pregunta es adecuada para mí, ya que no es de TI cómo pude aprender Estructura de datos y Algoritmos.

1. Aprende cualquier idioma, sé fuerte con los conceptos básicos .

2. Profundo conocimiento sobre colecciones .

3. Más tarde, puede inscribirse en Hackerearth, Hackerrank o Topcoder y comenzar a resolver tareas en Estructura de datos y Algoritmos.

4.ahora la mejor parte es participar en competiciones en línea, aquí es donde una vez se sabe qué tan bien han dominado los conceptos.

5. seguir aprendiendo y ser humilde para buscar conocimiento.

Gracias (+ _ +)

Para aprender el aprendizaje automático, debes ser mejor que el promedio en matemáticas. Estas son las matemáticas que debe aprender teniendo en cuenta el objetivo final para estar preparado.

  • Álgebra lineal-Álgebra lineal– MIT 18.06 Álgebra lineal por Gilbert Strang
  • Teoría de la probabilidad-Probabilidad y estadística – MIT 6.041 Análisis de sistemas probabilísticos y probabilidad aplicada por John Tsitsiklis
  • Cálculo
  • Cálculo de variaciones.
  • Teoría de grafos
  • Métodos de optimización (multiplicadores de Lagrange)
  • Cualquier lenguaje de programación ampliamente utilizado para ML como python, MATLAB o C ++.

PD: recomendaría Python aquí como lenguaje y recomendaría los siguientes enlaces:

  • Aprendizaje automático con texto en scikit-learn (PyCon 2016)
  • Aprendizaje automático en Python con scikit-learn

Una vez cumplidos estos requisitos, puede por fin comenzar a considerar Machine Learning.

¿6 PASOS FÁCILES para utilizar el APRENDIZAJE DE MÁQUINAS?

Este es el lugar donde comienza la diversión. Ahora, se espera que la base comience a echar un vistazo a algunas informaciones. La mayoría de las empresas de aprendizaje automático tienen básicamente el mismo proceso de trabajo:

PASO 1.) Fabrica tus fundamentos de aprendizaje automático estudiando material relacionado con el tema:

a.) Las conferencias de Andrew Ng’s Machine Learning son un gran comienzo:

Colección de conferencias | Aprendizaje automático: YouTube

b.) Certificado de aplicaciones y minería de datos de Stanford:

Certificado de Posgrado en Minería de Datos y Aplicaciones

c.) Escuela de verano de aprendizaje automático:

https://www.youtube.com/playlist

d.) Un enlace a la lista de reproducción completa está aquí (Lecture Collection | Machine Learning)
https://www.youtube.com/view_pla

e.) Introducción a la Inteligencia Artificial por el Prof. Deepak Khemani IIT Madras

http://nptel.ac.in/courses/10610

e.) “La mejor introducción de aprendizaje automático que he visto hasta ahora”.

PASO 2.) Tome un curso en línea

Lo principal que aconsejo a alguien que necesita ingresar al aprendizaje automático es tomar el curso en línea de Andrew Ng.

Creo que el curso de Ng es especialmente directo y excepcionalmente eficiente, por lo que es un conocimiento extraordinario para alguien que necesita ingresar a ML. Me sorprende cuando las personas me revelan que el curso es “excesivamente fundamental” o “excesivamente superficial”. En el caso de que me revelen que solicito que aclaren el contraste entre la Regresión logística y el SVM, PCA lineal frente a la factorización matricial, regularización o descenso de gradiente. He hablado con aspirantes que afirmaron años de encuentros de LD que no sabían la respuesta a estas preguntas. En su mayor parte, se aclaran claramente en el curso de Ng. Hay muchos otros cursos en línea que puede tomar después de este, pero ahora está en su mayor parte preparado para pasar a la siguiente etapa.

Vea mi publicación anterior 10 mejores videos, profesores y cursos sobre aprendizaje automático para principiantes y avanzados

PASO 3.) Algunas sugerencias de libros

Mi siguiente paso sugerido es obtener un libro de ML decente (mi lectura más abajo), leer las principales secciones de introducción, y después de eso rebotar a cualquier parte que incorpore un algoritmo, usted está interesado. Cuando haya descubierto ese algo, salte a él, vea cada uno de los puntos de interés y, en particular, impleméntelo. En el paso anterior del curso en línea, a partir de ahora habría actualizado algunos algoritmos en Octave. Sea como fuere, aquí estoy buscando ejecutar un algoritmo sin ninguna preparación en un lenguaje de programación “real”. En cualquier caso, puede comenzar con una simple, por ejemplo, Regresión logística regularizada en L2, o k-means, pero también debe impulsarse a actualizar todos los más intrigantes, por ejemplo, SVM. Puede utilizar una implementación de referencia en una de las muchas bibliotecas existentes para asegurarse de obtener resultados equivalentes.

  • El razonamiento bayesiano y el aprendizaje automático de David Barber
  • El aprendizaje automático de Kevin Murphy: una perspectiva probabilística
  • Los elementos del aprendizaje estadístico de Hastie, Tibshirani y Friedman
  • Reconocimiento de patrones y aprendizaje automático de Bishop
  • Aprendizaje automático de Mitchell

También hay numerosos libros excelentes que llaman la atención sobre un tema específico. Por ejemplo, Sutton and Re-Inforcement Learning es una obra de arte. Además, el libro Deep Learning (accesible en la web) prácticamente se está convirtiendo en un ejemplo antes de ser distribuido. Sea como fuere, necesita un par de esos libros para reunir una comprensión equilibrada y hasta cierto punto del campo.

Vea mi publicación anterior 10 eBooks gratuitos de lectura obligatoria sobre conceptos básicos de aprendizaje automático.

También puede ir específicamente a un trabajo de investigación que presente un algoritmo o enfoque que le interese y salte a él.

PASO 4.) Algoritmos más esenciales

Se confía en usted para conocer los aspectos básicos de un algoritmo esencial.

Vea mi anterior post 15 algoritmos que los ingenieros de aprendizaje automático deben saber.

En cualquier caso, aparte de los algoritmos, también es fundamental saber cómo configurar sus datos (selección de características, transformación y compresión) y cómo evaluar sus modelos. Tal vez, para empezar, podría consultar nuestro Aprendizaje automático en el ejercicio de instrucción scikit-learn en SciPy 2016. Se condensa una gran parte de los rudimentos al presentar la biblioteca scikit-learn, que puede resultar útil para la ejecución y otros exámenes. :

PASO 5.) Juega con algunos conjuntos de datos enormes que son de acceso abierto.

Descubra un conjunto de datos que le parezca especialmente interesante o sobre el que tenga hipótesis y compruebe si tiene razón.

Datos del gobierno de EE. UU. http://www.data.gov/

Ferrocarril Catering y Turismo Corporación http://www.irctc.co.in

PASO 6.) Participa con un equipo de personalización o aprendizaje automático centrado en el producto.

El grupo que busca debe estar cargado de ingenieros a quienes desea instruir y aprender. Esto lo mejorará para convertirse en un buen ingeniero de aprendizaje automático. Del mismo modo, al dividir un grupo de productos, descubrirá rápidamente cómo la ciencia y la hipótesis del aprendizaje automático varían de la capacitación. Específicamente, cómo la conducta del cliente le mostrará algo nuevo cada día.

Para aprender en 90 días, haga clic aquí.

Lo primero es lo primero, lo que sugeriría es que obtenga algunos conocimientos básicos de cualquier lenguaje de programación, lo que lo ayudará en las implementaciones posteriores. Puede consultar los tutoriales en línea para esto.

Una vez que esté configurado con el idioma, el siguiente paso es obtener un libro de estructuras de datos decente (puede hacerlo también en línea, a través de video conferencias, libros electrónicos, etc., pero prefiero un libro físico, ya que puede usar ¡en cualquier momento, para cualquier duda!). Recomendaría el libro Schaum Series Data Structures, para mí ha sido muy ingenioso.

Tienes el libro, tienes el idioma, ¡es hora de ensuciarte las manos ahora!

Comience con tipos de datos básicos, seguidos de cadenas / matrices, lea el libro de DS, intente implementar las estructuras basadas en las explicaciones, resuelva tantos problemas basados ​​en matrices / cadenas, tipos de datos como sea posible.

Repita el mismo procedimiento para listas vinculadas, pilas, colas, árboles y gráficos, tablas hash. El orden de las estructuras de datos mencionadas aquí es muy estándar, y la mayoría de los libros lo siguen.

Cada vez que te quedas atrapado en un problema, siempre tienes un desbordamiento de pila en tu rescate, tu libro de texto DS y Quora también.

¡La clave aquí es practicar tanto como puedas, codificar tanto como puedas!

Espero que esto ayude 🙂

Primero obtenga el conocimiento básico de un lenguaje de programación (C, C ++, Java o cualquier otro lenguaje)

Elija una estructura de datos a la vez y comprenda (centrarse en escribir código en lugar de teoría)

Array, String, struct, class, Linked list (individual y doble), Stack, Queue, Binary Tree, Graphs

La estructura de datos es una forma de organizar los datos. El algoritmo es la lógica que implementamos. Por ejemplo, si queremos hacer una búsqueda binaria. Entonces la estructura de datos puede ser una matriz y el algoritmo utilizado en esa estructura de datos es la búsqueda binaria.

Creo que deberías enfocarte en los algoritmos principales:

Búsqueda, ordenación, comparación de cadenas, recursión, enfoque codicioso, programación dinámica, seguimiento hacia atrás, divide y vencerás, BFS / DFS (algoritmos de gráficos).

Después de tener razonablemente el mando sobre las cosas anteriores, practicar, practicar y practicar.

Para la recursión y la programación dinámica, puede consultar mi libro Comprar programación dinámica para codificar entrevistas: un enfoque ascendente para la resolución de problemas Reserve en línea a precios bajos en India

Creo que la mejor manera de aprender estructuras de datos y algoritmos es a través de los diversos sitios de competencia.

  • USACO: mi favorito personal, ya que proporciona un camino claro a través del material
  • TopCoder: le brinda ese valor y la voluntad de ser un codificador.
  • Sphere Online Judge: excelente si quieres trabajar en otro idioma que no sea C / C ++ / Java

En cuanto a los libros, la mejor introducción individual que he visto para el especialista no matemático son las estructuras de datos y los algoritmos de Cormen. Le lleva a través de un algoritmo línea por línea y le muestra cómo se descompone matemáticamente, algo que la sección de análisis excelente de CLRS es un poco menos clara.

Si estás en Bangalore, entonces el único lugar para que cumplas tu sueño es el mejor para el entrenamiento de C ++ en India o Shambhala Technologies Private Limited.