Curso En Algoritmos

Coursera

Descripción del programa

Lee la descripción oficial

Curso En Algoritmos

Coursera

Este curso cubre la información esencial que todo programador serio necesita saber sobre algoritmos y estructuras de datos, con énfasis en aplicaciones y análisis de rendimiento científico de implementaciones Java. La Parte I abarca las estructuras de datos elementales, la clasificación y los algoritmos de búsqueda. La Parte II se centra en los algoritmos de procesamiento de gráficos y cadenas.

SEMANA 1

Curso Introducción

Bienvenido a Algorithms, Part I.

Unión-Encuentre

Ilustramos nuestro enfoque básico para desarrollar y analizar algoritmos considerando el problema de conectividad dinámica. Introducimos el tipo de datos union-find y consideramos varias implementaciones (búsqueda rápida, unión rápida, unión rápida ponderada y unión rápida ponderada con compresión de trayectoria). Finalmente, aplicamos el tipo de datos union-find al problema de percolación de la química física.

Análisis de Algoritmos

La base de nuestro enfoque para analizar el rendimiento de los algoritmos es el método científico. Comenzamos realizando experimentos computacionales para medir los tiempos de ejecución de nuestros programas. Usamos estas mediciones para desarrollar hipótesis sobre el rendimiento. A continuación, creamos modelos matemáticos para explicar su comportamiento. Finalmente, consideramos analizar el uso de memoria de nuestros programas Java.

SEMANA 2

Pilas y colas

Consideramos dos tipos de datos fundamentales para almacenar colecciones de objetos: la pila y la cola. Implementamos cada uno utilizando una lista unificada o una matriz de redimensionamiento. Introducimos dos características Java avanzadas-genéricos e iteradores-que simplifican el código del cliente. Finalmente, consideramos varias aplicaciones de pilas y colas que van desde analizar expresiones aritméticas hasta simular sistemas de colas.

Clasificaciones elementales

Presentamos el problema de clasificación y la interfaz comparable de Java. Se estudian dos métodos elementales de clasificación (ordenación por selección y tipo de inserción) y una variación de uno de ellos (shellsort). También consideramos dos algoritmos para barajar uniformemente una matriz. Concluimos con una aplicación de clasificación para calcular el casco convexo a través del algoritmo de exploración de Graham.

SEMANA 3

Mergesort

Se estudia el algoritmo mergesort y se muestra que garantiza ordenar cualquier matriz de n elementos con un máximo de n lg n compara. También consideramos una versión ascendente no recursiva. Probamos que cualquier algoritmo de clasificación basado en comparación debe hacer al menos n lg n compara en el peor de los casos. Discutimos el uso de ordenamientos diferentes para los objetos que estamos clasificando y el concepto relacionado de estabilidad.

Ordenación rápida

Introducimos e implementamos el algoritmo de quicksort aleatorio y analizamos su desempeño. También consideramos selección rápida aleatoria, una variante del tipo de interés rápido que encuentra el kth elemento más pequeño en tiempo lineal. Finalmente, consideramos el quicksort de 3 vías, una variante del quicksort que funciona especialmente bien en presencia de claves duplicadas.

SEMANA 4

Colas Prioritarias

Introducimos el tipo de datos de cola de prioridad y una implementación eficiente utilizando la estructura de datos de montón binario. Esta implementación también conduce a un algoritmo de clasificación eficiente conocido como heapsort. Concluimos con una aplicación de colas de prioridad donde simulamos el movimiento de n partículas sujetas a las leyes de colisión elástica.

Tablas de símbolos elementales

Definimos una API para tablas de símbolos (también conocidas como arrays, mapas o diccionarios asociativos) y describimos dos implementaciones elementales que utilizan una matriz ordenada (búsqueda binaria) y una lista no ordenada (búsqueda secuencial). Cuando las claves son Comparable, definimos una API extendida que incluye los métodos adicionales min, max floor, ceiling, rank y select. Para desarrollar una implementación eficiente de esta API, estudiamos la estructura de datos binarios del árbol de búsqueda y analizamos su rendimiento.

Semana 5

Árboles de búsqueda equilibrada

En esta conferencia, nuestro objetivo es desarrollar una tabla de símbolos con un rendimiento logarítmico garantizado para la búsqueda y el inserto (y muchas otras operaciones). Comenzamos con 2-3 árboles, que son fáciles de analizar pero difíciles de implementar. A continuación, consideramos los árboles de búsqueda binarios rojo-negro, que vemos como una forma novedosa de implementar 2-3 árboles como árboles de búsqueda binaria. Finalmente, introducimos B-trees, una generalización de 2-3 árboles que son ampliamente utilizados para implementar sistemas de archivos.

Aplicaciones geométricas de BSTs

Empezamos con 1d y 2d rango de búsqueda, donde el objetivo es encontrar todos los puntos en un intervalo dado 1d o 2d. Para lograr esto, consideramos kd-trees, una generalización natural de BSTs cuando las teclas son puntos en el plano (o dimensiones más altas). También consideramos problemas de intersección, donde el objetivo es encontrar todas las intersecciones entre un conjunto de segmentos de línea o rectángulos.

Semana 6

Hash Tables

Comenzamos por describir las propiedades deseables de la función hash y cómo implementarlas en Java, incluyendo un principio fundamental conocido como la suposición de hashing uniforme que subyace al éxito potencial de una aplicación de hashing. Luego, consideramos dos estrategias para implementar tablas de hash: encadenamiento separado y sondeo lineal. Ambas estrategias producen rendimiento de tiempo constante para la búsqueda y el inserto bajo la suposición de hashing uniforme.

Aplicaciones de la tabla de símbolos

Consideramos varias aplicaciones de tablas de símbolos incluyendo conjuntos, clientes de diccionario, clientes de indexación y vectores escasos.

Esta institución educativa ofrece programas en:
  • Inglés


Última actualización August 4, 2017
Duración y Precio
Este curso es En línea
Start Date
Fecha de inicio
sept. 2018
Duration
Duración
6 semanas
Tiempo Parcial
Price
Precio
Information
Deadline
Locations
Estados Unidos de América - EE.UU. Online
Fecha de inicio: sept. 2018
Fecha límite de inscripción Contacto
Fecha de finalización Contacto
Dates
sept. 2018
Estados Unidos de América - EE.UU. Online
Fecha límite de inscripción Contacto
Fecha de finalización Contacto