A2A.
Narendra Nath ya había especificado las estructuras de datos básicas (Array, LinkedList, Stack, Queues).
Le sugiero que también aprenda las siguientes estructuras de datos:
- Árbol de búsqueda binaria:
Intenta implementarlo usando una matriz. Le enseñará el poder de la manipulación del índice de matriz. Cómo puede manipular la estructura del índice de matriz para acceder al elemento secundario izquierdo y derecho (Por ejemplo: si n es el índice del elemento primario en la matriz, entonces el índice secundario izquierdo es 2 * ny el índice secundario derecho es 2 * n + 1)Intente implementarlo usando punteros / referencias). Le enseñará el direccionamiento del puntero, para implementar una estructura tipo árbol.
- Heap (intente implementar Heap, maxHeap / minHeap). Los montones son fundamentales detrás de las estructuras de datos como Priority Queue (que usa minHeap). Building heap le enseñará cómo se puede utilizar la estrategia de indexación mencionada en la viñeta 1 para acceder de manera eficiente al elemento más pequeño o más grande en un conjunto
- Grafico:
Impleméntelo una vez usando la matriz de adyacencia (matriz bidimensional),
Impleméntelo una vez usando la lista de adyacencia (use vector si está usando C ++, o Vector of Vector si está usando Java). Aprenderá cómo usar la lista de adyacencia ayuda a optimizar los algoritmos DFS y BFS. Para cada implementación (matriz de adyacencia / lista de adyacencia) escriba el algoritmo DFS y BFS - Estructura de datos hash:
Implemente Hashing usando Array. Escriba una estrategia de sondeo lineal / sondeo cuadrático.
Utilice una variedad de punteros / referencias para implementar la estrategia de sondeo de cubos - Implemente Trie (frecuente en codificación / entrevistas técnicas en empresas basadas en productos):
Puedes imaginar que los diccionarios se crean / mantienen - Implemente Suffix Tree (frecuente en codificación / entrevistas técnicas en empresas basadas en productos):
Es una variante comprimida de Trie. - Árbol de segmentos / Árbol de Fenwick (Raramente se pregunta durante las entrevistas. Pero son divertidos de aprender):
Verá cómo se usan para las consultas de rango. Como devolverme elemento mínimo entre i y j. O incluso consultas de actualización de rango. Agregue / reste el valor x a cada elemento entre i a j, luego devuelva el elemento Min / Max entre p a q.
Hay muchas estructuras de datos que no he cubierto. Todo lo anterior es muy importante desde el punto de vista del aprendizaje y también en la perspectiva de la entrevista de codificación.
- Una computadora pequeña tiene 4 marcos de página. Un proceso hace la siguiente lista de referencias de página; 1,2,3,4,1,5,2,3,1,2. ¿Cuántas fallas de página ocurren usando los siguientes algoritmos de reemplazo de página?
- ¿Cuántos años se necesitan para aprender algoritmos de cero a héroe?
- ¿Cómo podemos verificar de forma recursiva si una lista vinculada individualmente es un palíndromo?
- ¿Qué algoritmo es usado por la función Java () de la búsqueda de subcadenas?
- Visión por computadora: ¿Cuáles son algunas técnicas de detección de bordes ultrarrápidas y eficientes en memoria?
Recuerde que leer un algoritmo (teoría) no es suficiente para aprender.
Durante mi segundo año, no he estudiado específicamente un libro para la estructura de datos. Había echado un vistazo a Comprar estructuras de datos usando C y C + Libro en línea a precios bajos en India una vez.
Solía leer la teoría para cada una de las estructuras de datos anteriores de Data Structures: GeeksforGeeks y Wikipedia.
Después de leer la teoría, había implementado cada una de las estructuras de datos anteriores usando C ++. Me ayudó mucho en el proceso de aprendizaje y desarrolló un pensamiento mecánico dentro.
¡Funcionó para mí, seguramente funcionará para usted!
¡Feliz codificación!