Primero lea esta respuesta que escribí a una pregunta similar: la respuesta del usuario de Quora a ¿Cómo comienzo a aprender o fortalezco mi conocimiento de las estructuras de datos y algoritmos?
Cubre cómo comenzar y aprender algoritmos básicos. Escribí otras respuestas que te ayudan a comenzar con la programación competitiva. Léelos.
Echa un vistazo a este curso: estructuras de datos avanzadas. Es de MIT OpenCourseWare. Es muy teorico. Pero trate de implementar las ideas presentadas en cada conferencia.
- ¿Cuáles son los libros de Ciencias de la Computación (Algoritmo) que recomendará un topcoder?
- ¿Cuáles son algunos algoritmos informáticos inspirados en la naturaleza?
- ¿Cuánto tiempo lleva aprender el algoritmo?
- Cómo elegir el mejor algoritmo de aprendizaje profundo o paquete R para un conjunto de datos
- ¿Cuánto AlphaGo es IA real frente a algoritmos de procesamiento informático muy potentes?
Además, también hay un capítulo sobre “Estructuras de datos avanzadas” en “Introducción a los algoritmos”. Léelo Intenta repasar los detalles matemáticos y resolver los ejercicios.
Es muy difícil nombrar varias estructuras de datos que se utilizan para fines de nicho. Entonces, cada vez que encuentre algo que no sea lo que escuchó en la clase de algoritmos introductorios, puede pasar por ellos.
Aquí hay algunas estructuras de datos “avanzadas” que podría pensar en este momento.
- Segmente los árboles con propagación diferida : la mejor forma de aprenderlo y aplicarlo es la programación competitiva. Piense en ello como memorizar la estructura de árbol en algoritmos de divide y vencerás.
- Árboles indexados binarios / árboles Fenwick : es un poco complicado de explicar. Pero es extremadamente fácil de codificar. Consulte los tutoriales de TopCoder para obtener más información.
- Treap: es un árbol binario donde cada nodo, además de la clave, tiene alguna prioridad. Si sigues las teclas es un árbol de búsqueda binario. ¡Si sigues la prioridad, es un montón binario! El uso de prioridades aleatorias proporciona un árbol de búsqueda binario que está “probablemente equilibrado” sin ningún esquema de equilibrio (como AVL o árboles rojo-negros).
- Estructuras de sufijos de cadena (árbol de sufijos, autómata y matriz): son una representación concisa de varios sufijos de una cadena determinada. Puede encontrar varias subcadenas distintas, lexicográficamente kth subcadena, la subcadena más larga que se repite y muchas otras cosas interesantes.
- Estructuras de datos persistentes: en las estructuras de datos que implican actualizaciones, puede “viajar en el tiempo”. Es decir, se puede acceder a todas las versiones anteriores sin copiar toda la estructura de datos, lo que ahorra mucho espacio.
- Aho-Corasick Automaton: imagine que tiene un cuerpo y un texto grandes y que tiene que encontrar un par de palabras de manera eficiente. Este lo hace tan fácil. Es una extensión del algoritmo Knuth-Morris-Prat para encontrar un patrón en el texto dado.
- Link-Cut trees / Euler-tour trees – Mantenga árboles dinámicos, camino y agregados de subárbol de manera eficiente.
Incluso hay más como filtros Bloom, diagrama de Voronoi, conectividad dinámica en gráficos generales, etc.
¡Bienvenido a Algoland! Todo lo mejor 🙂