¿Cuál es el orden correcto para tomar cursos en línea sobre algoritmos (del MIT y Stanford) para un estudiante interesado en aspectos teóricos y teoría de la complejidad?

Hablando para las clases de MIT, creo que no existe un “orden correcto” coherente más allá de una cierta comprensión básica de los algoritmos esenciales necesarios para profundizar en temas especializados.

En general, los estudiantes comienzan a aprender técnicas matemáticas formales utilizadas en la informática teórica en 6.042: Matemáticas para la informática. La mayoría de los estudiantes toman 6.042 al principio de su plan de estudios MIT para construir esta base de comprensión de pruebas y técnicas de redacción de pruebas. En este curso se dan conceptos introductorios como la noción de gráficos.

El seguimiento se convierte en 6.006: Introducción a los algoritmos. En 6.006, los estudiantes amplían su conocimiento desde 6.042 para aprender enfoques algorítmicos generales más pertinentes y conocidos en informática, como el algoritmo de ruta más corta y la programación dinámica. También se enseñan estructuras de datos cruciales, como montones y árboles binarios equilibrados, y muchas abstracciones teóricas de la informática se basan en estos conceptos fundamentales. El curso prueba tanto la capacidad algorítmica de resolución de problemas como la capacidad de implementación real.

Finalmente, 6.046: Diseño y análisis de algoritmos es una clase que proporciona la introducción más rigurosa a muchos componentes de la informática teórica. Esta clase prueba la capacidad de abstracción pura y resolución de problemas, y se escriben cero líneas de código a lo largo del curso. Los estudiantes amplían las ideas introducidas en 6.006 a los principales campos de investigación en informática teórica, como la teoría básica de la complejidad, algoritmos informáticos distribuidos, algoritmos en línea y más. También se enseñan técnicas más avanzadas basadas en gráficos, como el flujo máximo y los problemas de coincidencia máxima. La clase se enfoca en tocar la mayor cantidad posible de temas teóricos de ciencias de la computación sin profundizar en ninguna área, por lo que muchos consideran que es la última clase en tomar el “orden correcto” antes de abordar cursos de posgrado. Tenga en cuenta que 6.046 se considera una clase de encabezado de pregrado, y también se considera uno de los requisitos más difíciles para un título universitario de ciencias de la computación en el MIT.

De aquí en adelante, los estudiantes pueden elegir libremente un área de enfoque. Por ejemplo, 6.851: Estructuras de datos avanzadas se enfoca principalmente en estructuras de datos, expandiéndose sobre uno de los componentes cubiertos en 6.046, y por lo tanto no requerirá haber tomado otra clase similar de nivel de posgrado, como 6.854: Algoritmos avanzados, que se expanden más en Algoritmos en línea más difíciles y problemas de algoritmos de aproximación que podrían haberse prescrito en 6.046. Del mismo modo, 6.856: Algoritmos aleatorios solo se enfoca en la construcción de conocimiento sobre algoritmos aleatorios, otro pilar introducido en 6.046. La mayoría de las clases graduadas mencionadas en la descripción son similares en el sentido de que no necesariamente tienen un “orden correcto”.

Puede haber algún conocimiento matemático en algunas clases secundarias que no se mencionan y que podría ser necesario para las clases de nivel de posgrado debido a la intersección de las matemáticas en ciencias de la computación. Por ejemplo, comprender el cálculo (18.01) es un requisito previo establecido de 6.042, y la teoría a menudo también involucra el cálculo. Del mismo modo, 18.06: Álgebra lineal podría proporcionar una intuición más matemática sobre cómo funcionan los algoritmos como la programación lineal y min-max en 6.046, y 18.600: Probabilidad y variables aleatorias también ayuda a comprender algoritmos aleatorios.

Supongo que el plan de estudios de Stanford también sigue un flujo similar, donde después de cierta línea de base, no es necesario tomar clases en un cierto orden, especialmente especializándose en el nivel de posgrado.

¡Espero que esto sea informativo!

Cada una de estas universidades tiene un catálogo de cursos disponible en línea. Aquí está el enlace al catálogo del MIT para el curso 6: Ingeniería Eléctrica y Ciencias de la Computación (Curso 6). Una vez que visite esta página, verá que cada curso tiene una lista de requisitos previos como este:

Puede subir los requisitos previos y comenzar desde la parte superior del árbol. Por ejemplo, 6.006 en el MIT tiene 6.042 (matemática discreta) e introducción a la informática (incluidos los principios básicos de Python como requisitos previos). Si te sientes cómodo con ellos, puedes seguir adelante. ¡Feliz aprendizaje!

Como prerrequisito para tomar lo anterior, si aún no lo ha hecho, le recomiendo tomar al menos tres cursos en teoría de grafos de división superior primero.

Además, necesita al menos un par de cursos en estructuras de datos y también un par de cursos en algoritmos en el nivel de división superior.

Solo una nota al margen.

More Interesting

Tengo un algoritmo iterativo que minimiza una cantidad dada en cada iteración (por lo que finalmente termina). ¿Cuál es la mejor manera de probar un límite superior en el número de iteraciones del algoritmo?

Si el punto (3, -4) divide la línea entre el eje x y el eje y en la relación 2: 3, ¿cuál será la ecuación lineal?

¿Cómo juegan las matemáticas un papel importante en la programación?

¿Cómo puede un estudiante inteligente de la escuela refutar teoremas muy grandes y bien establecidos en matemáticas?

Binario (sistema de números): ¿Qué sucede si un byte tiene 16 bits en lugar de 8?

¿Podría un genio aleatorio resolver el problema P vs NP o pasará a través de avances muy lentos en la ciencia por un grupo de personas que trabajan juntas?

¿Podemos crear música original a través de la permutación digital?

¿Por qué nos trasladamos además?

¿Por qué las matemáticas discretas se llaman 'discretas'?

¿Qué tipos de matemáticas son las más destacadas en informática?

¿Hay ejemplos fractales que usen entradas aleatorias externas de alguna manera en las iteraciones?

¿El concepto de implicación en matemáticas y ciencias de la computación preocupa a todos, o solo soy yo?

¿Cómo escribirías un programa que pueda calcular los dígitos de phi (proporción áurea)?

¿Qué habilidades matemáticas te ayudarán a prepararte para obtener un título en ciencias de la computación?

Sistemas distribuidos: ¿El resultado de imposibilidad de FLP y el teorema de CAP de Brewer son básicamente equivalentes?