Cómo aprender estructuras de datos de manera efectiva

Agregar un marco más general además de las respuestas de todos:

Paso 1: aprende la teoría y los fundamentos

Comprender los principales temas fundamentales cubiertos en las estructuras de datos, tales como:

  • Algoritmos, matrices, colecciones, análisis de complejidad, gráficos, tablas hash, montones, listas enlazadas, colas, recursividad, búsqueda, clasificación, pilas, árboles

Puede consultar estos sitios web para ayudar a cubrir los fundamentos:

  • www.geeks4geeks.com – explica todos los fundamentos de alto nivel
  • www.beehyve.io/data-structures – recursos y comunidad de estudiantes crowdsourced para cualquier tema en CS incluyendo estructuras de datos
    • Recursos de complejidad temporal
    • [BeeHyve] Hoja de trucos de complejidad de tiempo
  • https://visualgo.net/en: tiene visualizaciones de muchos algoritmos útiles

Aquí hay más escuelas que tienen clases de DS que pueden serle útiles:

  • CS 226 Algoritmos y estructuras de datos
  • Brown CS 16 Introducción a algoritmos y estructuras de datos
  • Stanford CS 166 Estructuras de datos
  • CMU CSE 15-211 Estructuras de datos fundamentales y algoritmos
  • Universidad de Washington en St. Louis CSE 241 Algoritmos y estructuras de datos
  • Harvard CSE 22 Estructuras de datos
  • Michigan EECS 281 Estructuras de datos y algoritmos
  • Cornell CS 2110 OO Programación y estructuras de datos
  • MiT 6.006 Introducción a los algoritmos

Paso 2: mira ejemplos, aplica tus conocimientos

Usando el conocimiento que ha aprendido de las fuentes anteriores, ahora aplicaría su conocimiento a través de la práctica. Los problemas de la entrevista son una buena forma de practicar estructuras de datos y algoritmos. Puedes ver:

  • Programación de preguntas de la entrevista | CareerCup
  • LeetCode
  • HackerRank
  • Descifrando el libro de entrevistas de codificación

Alternativamente, puede implementar diferentes algoritmos y estructuras de datos usted mismo para obtener una mejor comprensión de los fundamentos.

  • [BeeHyve] Implementaciones de diferentes estructuras de datos

Descargo de responsabilidad: este es un proyecto personal mío.

Matrices: algoritmos de clasificación y búsqueda populares

Clasificación de burbujas : uno de los algoritmos de clasificación más elementales para implementar, y también muy ineficiente. Corre en tiempo cuadrático. Un buen punto de partida para comprender la clasificación en general, antes de pasar a técnicas y algoritmos más avanzados. Una idea general de cómo funciona el algoritmo y el código para un programa en C.
Clasificación de inserción : otro algoritmo de clasificación de tiempo cuadrático, un ejemplo de programación dinámica. Una explicación y un paso a través de cómo funciona el algoritmo, así como el código fuente de un programa en C que realiza la ordenación por inserción.
Selección de selección : otro algoritmo de clasificación de tiempo cuadrático, un ejemplo de algoritmo codicioso. Una explicación y un paso a través de cómo funciona el algoritmo, así como el código fuente para un programa en C que realiza la selección de selección.
Shell Sort : un algoritmo ineficiente pero interesante, cuya complejidad no se conoce exactamente.
Ordenar fusión Un ejemplo de un algoritmo Divide and Conquer. Funciona en tiempo O (n log n). La complejidad de la memoria para esto es una desventaja.
Ordenación rápida En el caso promedio, esto funciona en tiempo O (n log n). Sin sobrecarga de memoria adicional, por lo que es mejor que combinar en este sentido. Se selecciona un elemento de partición, la matriz se reestructura de modo que todos los elementos mayores o menores que la partición estén en lados opuestos de la partición. Estas dos partes de la matriz se ordenan recursivamente.
Heap Sort : algoritmo de clasificación eficiente que se ejecuta en tiempo O (n log n). Utiliza la estructura de datos del montón.
Algoritmo de búsqueda binaria: algoritmo utilizado comúnmente para encontrar la posición de un elemento en una matriz ordenada. Se ejecuta en tiempo O (log n).

Estructuras de datos básicos y operaciones sobre ellos

http://www.thelearningpoint.net/http://www.thelearningpoint.net/http://www.thelearningpoint.net/
Apila las estructuras de datos Last In First Out (LIFO). Como una pila de cartas de las cuales recoges la que está en la parte superior (que es la última que se coloca en la parte superior de la pila). Documentación de las diversas operaciones y las etapas por las que pasa una pila cuando se insertan o eliminan elementos. Programa C para ayudarlo a tener una idea de cómo se implementa una pila en el código.
Estructura de datos de colas Primero en entrar, primero en salir (FIFO). Al igual que las personas que esperan para comprar boletos en una fila: el primero que se para en la fila, obtiene primero el ticket y sale primero de la fila. Documentación de las diversas operaciones y las etapas por las que pasa una cola a medida que se insertan o eliminan elementos. C Programe el código fuente para ayudarlo a tener una idea de cómo se implementa una cola en el código.
Lista enlazada única Una estructura de datos autorreferencial. Una lista de elementos, con una cabeza y una cola; cada elemento apunta a otro de su propio tipo.
Lista enlazada doble : una estructura de datos autorreferencial. Una lista de elementos, con una cabeza y una cola; cada elemento apunta a otro de su propio tipo delante de él, así como a otro de su propio tipo, que está detrás de él en la secuencia.
Lista enlazada circular Lista enlazada sin cabeza y cola: los elementos se apuntan entre sí de forma circular.

Estructuras de datos de árbol
http://www.thelearningpoint.net/
Árboles de búsqueda binaria Una forma básica de estructuras de datos de árbol. Insertar y eliminar elementos en ellos. Diferentes tipos de algoritmos transversales de árbol binario.
Montones : una estructura de datos similar a un árbol donde cada elemento es menor (o mayor) que el que está encima. Formación de montón, ordenando usando montones en tiempo O (n log n).
Árboles de altura equilibrada : garantizar que los árboles permanezcan equilibrados para optimizar la complejidad de las operaciones que se realizan en ellos.

http: // Gráficos y algoritmos de gráficos http: //
https://sites.google.com/a/thele
http://www.thelearningpoint.net/
Búsqueda de profundidad primero : atravesar un gráfico utilizando la Búsqueda de profundidad primero en la que los vecinos no visitados del vértice actual se introducen en una pila y se visitan en ese orden.
Breadth First Search : atravesar un gráfico utilizando Breadth First Search en el que los vecinos no visitados del vértice actual son empujados a una cola y luego visitados en ese orden.
Árboles de expansión mínima: Algoritmo de Kruskal : encontrar el árbol de expansión mínima utilizando el algoritmo de Kruskal, que es una técnica codiciosa. Presentamos el concepto de Union Find.
Árboles de expansión mínima: Algoritmo de Prim – Encontrar el árbol de expansión mínima usando el algoritmo de Prim.
Algoritmo de Dijkstra para rutas más cortas – Algoritmo popular para encontrar rutas más cortas: Algoritmo de Dijkstra.
Algoritmo de Floyd Warshall para rutas más cortas: todo el algoritmo de ruta más corta: Algoritmo de Floyd Warshall
Algoritmo de Bellman Ford : otro algoritmo de ruta más corto común: Algoritmo de Bellman Ford.
Algoritmos populares en programación dinámica

Programación dinámica Una técnica utilizada para resolver problemas de optimización, basada en la identificación y resolución de sub-partes de un problema primero.
Problema de mochila entera Un problema elemental, a menudo utilizado para introducir el concepto de programación dinámica.
Multiplicación de la cadena de matrices Dada una larga cadena de matrices de varios tamaños, ¿cómo las paréntesis para multiplicarlas? ¿Cómo elegir cuáles comenzar a multiplicar primero?
Subsecuencia común más larga Dadas dos cadenas, encuentre la subsecuencia común más larga entre ellas.
Algoritmos de programación dinámica cubiertos anteriormente: tipo de inserción, algoritmos de algoritmo de Floyd Warshall que ya hemos cubierto, que son ejemplos de programación dinámica.

http: // Algoritmos codiciosos http: //
Casos elementales: problema de mochila fraccional, programación de tareas Problemas elementales en algoritmos codiciosos – mochila fraccionaria, programación de tareas. Junto con el código fuente del programa C.
Compresión de datos con Huffman Trees Compresión con Huffman Trees. Una técnica codiciosa para codificar información.

Bueno, primero aprenda algoritmos antes que las estructuras de datos, porque es un proceso fácil de entender e implementar estructuras de datos. Comience a aprender estructuras de datos desde la etapa fácil hasta la compleja. Aprender a través de cursos en línea es la mejor manera en mi opinión. Te sugeriré los mejores cursos en línea.

Los mejores cursos en línea sobre estructuras de datos :

  • Estructuras de datos desde cero

De este curso puedes aprender sobre:

La estructura de datos es una forma eficiente de organizar los datos y mantener el desorden fuera de su sistema. Este curso enseña más sobre estas estructuras de datos. Las estructuras de datos más populares en la categoría de datos de la tienda incluyen árboles de búsqueda binarios, tablas hash, montones y gráficos. Después de aprender los códigos, podrá desarrollar su conocimiento junto con su maestro.

Y también … aplicar conceptos de estructura de datos en diferentes aplicaciones de la informática

comparar y contrastar diferentes estructuras de datos según la aplicación

escribe sus propios algoritmos y puede analizar entre diferentes algoritmos

implementar varios algoritmos en diferentes lenguajes de programación

Desarrollar habilidades de planificación necesarias para la estructura de datos

Recursos relevantes:

  • Estructuras de datos: pila, cola y LinkedList
  • Estructuras de datos fáciles de avanzadas

TODO LO MEJOR…

  • Dado que las estructuras de datos y los algoritmos van de la mano , seguramente los encontrará juntos en un libro / curso .
  • DS & Algo generalmente es independiente del idioma , por lo que una vez que los conozca (utilizando un pseudocódigo o cualquier idioma) más tarde, puede convertirlo fácilmente en la tecnología que elija .
  • Aquí intentaré categorizarlo wrt Facilidad de comprensión y contenidos cubiertos .

1.Libros: –

  • Fácil:
  • Estructuras de datos utilizando C por Reema Thareja.
  • Estructuras de datos de Seymour Lipschutz.

* Use ambos juntos, son de cortesía.

  • Avanzado:
  • CLRS ( Libro de referencia, wiki de DS y Algo )
  • Skienna ( aplicación del mundo real )
  • Tannenbum ( Simple )
  • Kleinberg-Tardos ( Mejores conceptos de gráficos con diferencia)
  • Adam Drozdek
  • Michael T. Goodrich y Roberto Tamassia
  • Mark Allen Weiss (Implementación recursiva )

2. Lectura en línea: –

  • GeeksforGeeks | Un portal informático para geeks

3. Videos: –

  • Fácil:
  • Estructuras de datos y algoritmos: IIT Kharagpur ( básico e intuitivo )
  • Computer Sc – Estructuras de datos y algoritmos
  • Avanzado:
    • MIT 6.006 Introducción a los algoritmos, otoño de 2011 ( Parte 1 )
    • MIT 6.046J Diseño y análisis de algoritmos, primavera de 2015 ( Parte 2 )

    4. Curso completo: –

    • Intermedio:
    • Algoritmos, Parte I – Universidad de Princeton | Coursera
    • Algoritmos, Parte II – Universidad de Princeton | Coursera
  • Avanzado:
    • Algoritmos | Coursera

    Debe leer:

    • Tutorial de estructuras de datos de Topcoder
    • La biblia de los algoritmos y las estructuras de datos : CLRS – Introducción a los algoritmos: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivestbook (que puede encontrar en línea de forma gratuita).
    • MIT Introducción a algoritmos videos de conferencias y MIT Introducción a algoritmos videos de recitación
    • La biblia de las entrevistas de codificación, que incluye estructuras de datos: Entrevista de descifrado de codificación: 150 Preguntas y soluciones de programación: Gayle Laakmann McDowell
    • También recomiendo programar preguntas de la entrevista | CareerCup por el autor del libro anterior
    • Obviamente, el tema de las estructuras de datos de Quora

    Pero, una vez que conoce algo de teoría, la práctica hace la perfección: TopCoder, Conjunto de problemas – Fuerzas de código – Etiquetas de estructuras de datos

    Simplemente siga adelante e intente resolver los problemas comenzando por los fáciles. Como está interesado en las estructuras de datos, mi consejo es que también aprenda la programación dinámica, que es muy bueno saber.

    Verás el mundo de manera diferente.
    Mira mi respuesta a Quiero aprender la memorización. ¿Me puede dar algunos enlaces con problemas de spoj / topcoder / codeforces? por empezar

    La mejor manera de inclinar las estructuras de datos es resolver tantos problemas en cada estructura de datos. Comience con estructuras de datos más simples como matrices, listas vinculadas, pilas, etc. y luego pase a otras más complejas como árboles, gráficos, intentos.

    Establezca metas para usted, digamos, para resolver tantas preguntas sobre matrices la primera semana. Cuando lea la pregunta, piense en las formas que usaría para resolver el problema y cómo codificará la solución. Si no puede encontrar la solución, mire la descripción del algoritmo para obtener una lógica básica de la solución y luego intente codificarse. En caso de que no pueda resolver el problema, mire la solución y asegúrese de comprenderla por completo, para todos los casos de prueba posibles. Debe comprender cómo debe comportarse la estructura de datos dada cualquier entrada, ya sea un caso marginal o una entrada regular.

    Aquí hay algunos enlaces de video de Youtube que encontré muy útiles:

    Matrices – YouTube

    Cuerdas – YouTube

    Listas vinculadas – YouTube

    Árboles – YouTube

    Gráfico: YouTube

    Programación dinámica

    También puede visitar el sitio web: IDeserve

    Esto tiene buenas preguntas y videos en algunas de las preguntas. Verifique la función de visualización del código. De esa forma, puede hacer un análisis de datos de prueba directamente en la página para comprender mejor la solución. Pero intente resolver el problema usted mismo primero. Eso te ayudará mucho.

    Aquí hay algunas preguntas:

    Algunos problemas de programación dinámica:

    Número de Fibonacci

    Suma máxima de subarreglos

    Word Break Problem

    Número total de posibles árboles de búsqueda binaria con teclas ‘n’

    Problema de suma de subconjunto

    Palindrome más corto

    Palindrome Min Cut

    Número mínimo de intentos para llegar desde la palabra fuente a la palabra de destino

    Número mínimo de monedas para realizar el cambio.

    Encuentra la ruta de costo mínimo en una matriz

    Subcadena palindrómica más larga

    La subsecuencia palindrómica más larga

    Encuentre la longitud de la subsecuencia creciente más larga en una matriz

    Subsecuencia creciente más larga O (n logn)

    Subcadena común más larga

    Subsecuencia común más larga

    Encuentre la longitud de la subsecuencia bitónica más larga en una matriz

    Para imprimir el número máximo de As usando las cuatro teclas dadas.

    Problema de la mina de oro

    Encuentra la distancia mínima de edición entre dos cadenas dadas

    0-1 Problema de mochila

    Distintas cadenas binarias de longitud n sin 1s consecutivos

    Cuente todas las decodificaciones posibles de una secuencia de dígitos dada

    Encuentra el número total de formas de hacer cambios usando un conjunto de monedas dado

    Establecer problema de partición | Programación dinámica

    Algunos problemas de árboles y gráficos:

    Reserva anticipada de un árbol binario

    Recorrido posterior al pedido de un árbol binario

    Recorrido en orden de un árbol binario

    Recorrido de orden de nivel de árbol binario

    Recorrido de orden de nivel en espiral de un árbol binario | Serie 1

    Imprimir vista derecha de un árbol binario

    Imprima todos los nodos de un árbol binario que no tienen hermanos

    Imprima todas las rutas de raíz a hoja de un árbol binario

    Profundidad mínima de un árbol binario

    Imprimir vista izquierda de un árbol binario

    Encuentra la suma de todas las hojas izquierdas de un árbol binario

    Encuentre la profundidad del nodo de hoja de nivel impar más profundo

    Compruebe si un árbol binario es un árbol binario completo o no

    Compruebe si un árbol binario está completo o no

    Compruebe si dos nodos son primos en un árbol binario

    Compruebe si dos árboles binarios son idénticos

    Compruebe si todos los nodos internos de BST tienen solo un hijo sin construir un árbol

    Convierte el árbol n-ary dado a su imagen especular

    Convierta un árbol binario en su árbol espejo

    Imprimir vista superior de un árbol binario

    Imprima la vista superior de un árbol binario usando el recorrido de orden de nivel

    Imprimir vista inferior de un árbol binario

    Imprima la vista inferior de un árbol binario usando el recorrido de orden de nivel

    Eliminar los nodos del árbol de búsqueda binario que están fuera del rango dado

    Elimine todos los nodos que se encuentran en la ruta que tiene una suma menor que k

    Eliminar todos los medios nodos de un árbol binario dado

    Imprimir árbol binario en orden vertical

    Rellene los vecinos correctos para todos los nodos en un árbol binario

    Ancestro común más bajo de dos nodos en un árbol de búsqueda binaria

    Sucesor en orden de un nodo en un árbol binario

    Recupere un árbol de búsqueda binaria si se intercambian las posiciones de dos nodos.

    Encuentre el piso y el techo de un elemento del conjunto de datos dado usando el árbol de búsqueda binario

    Suma diagonal de un árbol binario.

    Crear un árbol de búsqueda binaria equilibrado a partir de una matriz ordenada

    Convierta una lista ordenada doblemente enlazada en un árbol de búsqueda binaria equilibrado

    Convierta un árbol binario en una lista doblemente vinculada

    Compruebe si un árbol binario está equilibrado o no

    Compruebe si un árbol binario es un árbol de búsqueda binario

    Compruebe si dos árboles de búsqueda binarios son idénticos dadas sus representaciones de matriz | Set 2

    Compruebe si dos árboles de búsqueda binarios son idénticos debido a sus representaciones de matriz

    Compruebe si un árbol binario es un subárbol de otro árbol binario en el tiempo O (n)

    Compruebe si un árbol binario es un subárbol de otro árbol binario en el espacio O (1)

    Árbol de búsqueda binaria | Inserción y Búsqueda

    Árbol de búsqueda binaria | Supresión

    Compruebe si un árbol binario dado es un árbol simétrico o no

    Compruebe si el árbol n-ary dado es árbol simétrico o no

    Número total de posibles árboles de búsqueda binaria con teclas ‘n’

    Encuentra el tamaño de BST más grande en un árbol binario

    Ancestro común más bajo de 2 nodos en un árbol binario

    Encuentre la altura del árbol binario a partir de su representación de matriz principal

    Convertir árbol binario en árbol de búsqueda binario

    Construya el árbol binario a partir de su representación de matriz principal

    Construir un árbol binario a partir de recorridos internos y anteriores

    Construir árbol binario a partir de recorridos de orden y de postorder

    Árbol AVL | Lo esencial

    Árbol AVL | Inserción

    Árbol AVL | Supresión

    Estructura de datos de Trie | Insertar y buscar

    Estructura de datos de Trie | Borrar

    Coincidencia de patrones usando Trie

    La coincidencia de prefijo más larga con Trie

    Dada una secuencia de palabras, agrupe todos los anagramas e imprímalos.

    Serializar y deserializar un árbol de búsqueda binario

    Serializar y deserializar un árbol de búsqueda binario utilizando el recorrido de orden posterior

    Amplitud primera búsqueda en un gráfico

    Clasificación topológica de un gráfico acíclico dirigido.

    Número mínimo de intentos para llegar desde la palabra fuente a la palabra de destino

    Problema de círculos de amigos: teoría de grafos

    Algoritmo de ruta más corta de Dijkstra

    Algoritmo de Bellman-Ford

    Algunos problemas de matrices:

    Algoritmo de clasificación – Selección de selección

    Algoritmo de clasificación – Ordenar por inserción

    Algoritmo de clasificación – Clasificación de burbujas

    Ordenar fusión

    Clasificación de panqueques

    Algoritmo de clasificación – Clasificación de montón

    Girar una matriz

    Número de Fibonacci

    Combina dos matrices ordenadas sin usar espacio adicional

    Suma máxima de subarreglos

    Submatriz media máxima de tamaño k

    Subcadena más larga con caracteres no repetidos

    Líderes en una matriz

    Buscar subarrays de longitud mínima con suma K

    Búsqueda binaria en una matriz ordenada

    Buscar una matriz ordenada

    Reorganice los elementos en una matriz para colocar elementos positivos y negativos en orden alternativo

    Encuentra el siguiente número mayor usando los mismos dígitos

    Siguiente elemento mayor en una matriz

    Primer carácter no repetitivo en una cadena

    Encuentra el enésimo número más frecuente en la matriz

    Encuentra el número que falta en la secuencia creciente

    Encuentra duplicados en una matriz entera

    Encuentra elementos comunes en matrices ordenadas ‘n’

    Encuentra un elemento de pico en una matriz

    Distribuya el problema de los chocolates

    Cuente las frecuencias de los elementos de la matriz en el rango de 1 a n

    Encuentra todas las permutaciones de una cadena

    Buscar pivote en una matriz rotada ordenada

    Encuentra un elemento en una matriz rotada ordenada

    Buscar elemento en una matriz girada ordenada sin encontrar un pivote

    Comprar y vender acciones | Parte 2

    Comprar y vender acciones | Parte 1

    Encuentre el índice de 0 para reemplazar para obtener la secuencia continua más larga de 1s

    O (n) enfoque de tiempo para encontrar el índice de 0 para reemplazar y obtener la secuencia continua más larga de 1s

    Atrapando agua de lluvia entre torres

    El problema del horizonte

    Número mínimo de monedas para realizar el cambio.

    Encuentra la ruta de costo mínimo en una matriz

    Encuentre la longitud de la subsecuencia creciente más larga en una matriz

    Subsecuencia creciente más larga O (n logn)

    Encuentre la longitud de la subsecuencia bitónica más larga en una matriz

    Dado un conjunto con todos los elementos distintos, encuentre la longitud del subconjunto más largo que tiene elementos (no en ningún orden en particular) que podrían formar una secuencia contigua

    Encuentre una matriz entera correspondiente a la cadena que especifica transiciones de aumento-disminución

    Problema de la mina de oro

    Encuentra la mediana de dos matrices ordenadas

    Encuentra el elemento mayoritario en una matriz

    0-1 Problema de mochila

    Cuente todas las decodificaciones posibles de una secuencia de dígitos dada

    Encuentra el número total de formas de hacer cambios usando un conjunto de monedas dado

    Encuentre una subsecuencia creciente de longitud tres que tenga el producto máximo

    Encuentre una subsecuencia creciente de longitud tres que tenga el producto máximo | Enfoque optimizado

    Establecer problema de partición | Recursividad

    Establecer problema de partición | Programación dinámica

    Algunos problemas de cadenas:

    Invertir palabras en una cadena

    Eliminar espacios de una cadena dada

    Subcadena más larga con caracteres no repetidos

    Verificar paréntesis balanceados en una cadena

    Evaluación de expresión de postfix

    Agrupe todos los anagramas de una serie dada de cadenas | Serie 1

    Primer carácter no repetitivo en una cadena

    Encuentra todas las permutaciones de una cadena

    Word Break Problem

    Problema de suma de subconjunto

    Palindrome más corto

    Palindrome Min Cut

    Número mínimo de intentos para llegar desde la palabra fuente a la palabra de destino

    Subcadena palindrómica más larga

    Algoritmo de Manacher

    La subsecuencia palindrómica más larga

    Subcadena común más larga

    Subsecuencia común más larga

    Para imprimir el número máximo de As usando las cuatro teclas dadas.

    Encontrar secuencias de ADN repetidas de 10 letras.

    Encuentra la distancia mínima de edición entre dos cadenas dadas

    Distintas cadenas binarias de longitud n sin 1s consecutivos

    El cómputo de matriz de sufijo de prefijo más largo en el algoritmo de coincidencia de patrones KMP.

    El algoritmo Knuth Morris Pratt para la coincidencia de patrones.

    Algunas listas vinculadas y problemas de pila:

    Combinar dos listas vinculadas ordenadas

    Invertir una lista vinculada: recursiva

    Invertir una lista vinculada: iterativa

    Invierta cada k nodos alternativos de una lista vinculada

    Encuentre el enésimo nodo desde el final de una lista vinculada

    Suma de dos listas enlazadas usando pilas

    Suma de dos listas enlazadas usando recursividad | Serie 1

    Implementación de caché LRU

    Detecta un bucle en una lista vinculada y encuentra el nodo donde comienza el bucle.

    Convierta una lista ordenada doblemente enlazada en un árbol de búsqueda binaria equilibrado

    Convierta un árbol binario en una lista doblemente vinculada

    Encuentra la intersección de dos listas enlazadas

    Encuentre la intersección de dos listas enlazadas: O (m + n) Complejidad de tiempo y O (1) Complejidad de espacio

    Pila mínima O (1)

    Espero que esto ayude.

    Sí, sinceramente, el libro es muy intimidante. 😛
    Pero sin duda es el único libro que tiene todos los conceptos.
    Sin embargo, otra forma de aprender algoritmos es identificar los algoritmos básicos que se usan comúnmente en muchas aplicaciones.
    Tener una sólida comprensión de Divide y vencerás, Algoritmos codiciosos, Programación dinámica es importante.
    Puede usar una fuente como GeeksforGeeks para aprender lo mismo. GeeksforGeeks también tiene implementación de estos algoritmos básicos. Esto puede ayudarlo a traducir la lógica en código.
    Además, siga practicando estos algoritmos resolviendo una variedad de problemas en CodeChef / SPOJ.
    Es importante identificar dónde usa un algoritmo particular. Una vez que puedes hacer eso, honestamente estás a medio camino. El descanso es sobre todo una práctica constante.

    Yo diría en un simple paso que ayudó a lo largo de mi carrera: no saltes pasos 🙂

    Aprenda primero los fundamentos y fundamentos de estructuras de datos más simples. Las estructuras de datos más complejas tienen sus raíces en los fundamentos de estructuras de datos más simples. Por lo tanto, si lo hace, comprender ideas más difíciles en el futuro será más fácil para usted.

    Por ejemplo, comencé a aprender Singly Linked Lists. Me tomó dos días comprender completamente todas las ideas detrás de estas listas especiales. Pero cuando terminé de aprenderlo y traté de implementar una Lista Doblemente Vinculada por mi cuenta, se hizo mucho más claro, y tardé aproximadamente media hora. ¿Ves lo que quiero decir? 🙂

    Luego, si se siente cómodo con las ideas detrás de estas estructuras de datos relativamente simples, busque otras más complejas, como gráficos, listas de adyacencia, algoritmos de búsqueda de profundidad y amplitud, o incluso otros tipos de listas vinculadas, como listas enlazadas circulares individuales y dobles. .

    Esto le ayudará mucho a su razonamiento de programación, y estoy seguro de que se sentirá aún más cómodo programando y transmitiendo sus propias ideas a una sintaxis y lógica de lenguaje.

    Espero que esto ayude un poco, y siempre recuerda: sé diligente. Esta no es una tarea fácil, pero tampoco es difícil, como cualquier otra actividad de la vida diaria si quieres hacerlo bien. Si tiene más preguntas, no dude en preguntar.

    Gracias por A2A.

    Si eres un principiante entonces-

    1. Encuentre un libro con una buena explicación (Like- Data Structures por SK Shrivastav en C).
    2. Lea una estructura de datos a fondo.
    3. Codifíquelo (lleve un libro con usted) e intente comprender el código.
    4. Ahora codifícalo sin libro.
    5. Luego encuentre problemas simples que se puedan resolver usando esa Estructura de datos e intente resolverlos. Primero, será difícil para usted, vea editoriales y soluciones y luego codifique lo mismo.
    6. Después de un tiempo comenzarás a desarrollar tus lógicas. http://geeksforgeeks.com es una buena plataforma para tratar problemas relacionados con las estructuras de datos y también se ofrecen buenas editoriales.
    7. Resuelve tantos problemas como puedas relacionados con ese DS.
    8. Mantenga la calma, tenga paciencia ( recuerde que somos programadores, la paciencia es la clave del éxito ).

    Según yo, debes aprender las estructuras de datos en el siguiente orden:

    • Apilar
    • Lista vinculada (individual, doble, circular)
    • Cola (junto con DEQUE)
    • Árbol binario
    • Árbol de búsqueda binaria
    • Montón
    • Grafico
    • Estructuras de datos avanzadas (árbol de segmentos, árbol indexado binario, Trie… .etc)

    Si tiene una comprensión básica de todas las estructuras de datos, intente resolver problemas de práctica en plataformas de codificación en línea como:

    • Juez Esfera Online (SPOJ)
    • Concurso de programación, concurso de programación, programación informática en línea
    • http://geeksforgeeks.com

    #Todo lo mejor

    #HappyCoding

    Primero aprenda los conceptos teóricos de las estructuras de datos. Elija cualquier lenguaje de programación de su elección como C, Java, etc. Pruebe e implemente lo que haya aprendido con el lenguaje que haya elegido.

    Después de haber aprendido a implementar la estructura de datos, practique más y más. Siga buscando problemas en las estructuras de datos y resuélvalos. Después de resolver, optimice su solución.

    Mire a su alrededor, todo a su alrededor será una implementación de alguna estructura de datos. Por ejemplo, las personas que hacen cola, los papeles apilados unos sobre otros, los vagones de los trenes, etc. Inspírate en tu mundo y crea una versión virtual de él.

    A continuación hay algunos recursos que pueden ayudarlo a aprender estructuras de datos de manera eficiente,

    1. Introducción a los algoritmos, 3e
    2. GeeksforGeeks | Un portal informático para geeks
    3. Compre estructuras de datos y algoritmos de forma fácil en Java: estructura de datos y acertijos algorítmicos, libro de la segunda edición en línea a precios bajos en India

    Introducción a los algoritmos CLRS “es el mejor libro para comprender las estructuras de datos y los algoritmos. Algunas personas lo llaman biblia de DS y Algo. También contiene código de ejemplo escrito en pseudocódigo. Pero se pueden convertir fácilmente al lenguaje de programación.

    Si buscas preparación para la entrevista. Puede comenzar con “ Resolución de problemas en estructuras de datos y algoritmos ” escrito en varios lenguajes como C, C ++, Java, C #, Python, etc. Estos libros son fáciles de seguir y están escritos para el punto de vista de la entrevista . Además, estos libros tienen el último capítulo sobre Diseño de sistemas , que también se requiere en las entrevistas.

    Los enlaces de los libros en Amazon están abajo:

    1. Resolución de problemas en estructuras de datos y algoritmos utilizando C

    2. Resolución de problemas en estructuras de datos y algoritmos usando C ++

    3. Resolución de problemas en estructuras de datos y algoritmos utilizando Java

    4. Resolución de problemas en estructuras de datos y algoritmos con C #

    5. Resolución de problemas en estructuras de datos y algoritmos usando Python

    1. Tomar cursos básicos:
    Coursera
    Introducción a los algoritmos (SMA 5503)

    2. Practica persistentemente:
    Codeforces
    Concurso de programación, concurso de programación, programación informática en línea
    TopCoder, Inc.: sede de la comunidad de desarrollo más grande del mundo

    3. A veces aprende nuevas estructuras de datos avanzadas:
    Estructuras de datos avanzadas (6.851)

    Creo que es una buena forma de aprender estructuras de datos.

    No tenía experiencia previa en programación. Me presentaron mi primer programa Hello World en el segundo semestre de la Universidad. Aprendí C como parte del plan de estudios universitario de Let Us C Book – Por Yashvant Kanetkar.

    Y luego, en las vacaciones de semestre de verano, seguí este procedimiento:

    1. Comenzó con la programación básica.
    2. Aprenda estructuras de datos básicas como matriz, listas vinculadas, pilas, colas, etc.
    3. Comience la codificación competitiva en plataformas como codechef, codeforces, topcoder, hackerrank, SPOJ, etc. (Elija uno o dos que desee)
    4. Encontrará muchos problemas para los cuales necesita aprender a diseñar algoritmos y estructuras de datos avanzadas para optimizar su código. Así que comience a leer editoriales en topcoder o elija cualquier buen libro como CLRS (para algoritmos) y Goodrich (para estructuras de datos).
    5. Sigue practicando y definitivamente te convertirás en un buen programador.

    ¡Aclamaciones!

    Le llevará menos de 6 meses dominar los buenos programas. Si no me cree, vea mi perfil de HackerRank: Vineet Kumar (Vineet_007) en HackerRank

    Compre estructuras de datos y algoritmos en Java Book en línea a precios bajos en India

    Estructuras de datos y algoritmos en C ++, 2a edición

    Compre Introducción al libro de algoritmos en línea a precios bajos en India

    Si le gustó mi respuesta, le agradecería que la votara al presionar el botón azul claro a continuación.

    También puedes seguirme, a solo un clic de distancia 🙂

    La mejor manera de aprender estructuras de datos es entender primero cuál es el significado de esa estructura de datos y cuál es el punto positivo que tienen. Para el mejor libro que puedo aconsejar es Introducción a los algoritmos. Este es uno de los libros más completos en la forma en que se realiza el análisis de complejidad de diferentes algoritmos.

    Una vez que tenga la idea sobre esa estructura de datos, intente implementarla por su cuenta sin intentar buscar sus implementaciones en línea. Porque puede usar una estructura de datos de manera eficiente en diferentes escenarios solo cuando conoce la estructura y el flujo de datos.

    Una vez que haya implementado una estructura de datos, lo siguiente es practicar. Porque solo con el tiempo aprenderá esa estructura de datos correctamente. Uno de los mejores sitios web para practicar problemas de cualquier tipo es Sphere Online Judge (SPOJ). Para practicar preguntas de un campo en particular, puede referir a A2 Online Judge. Puede encontrar los problemas enumerados según la dificultad en A2OJ.

    Entonces, en resumen, intente implementar una estructura de datos por su cuenta y siga practicando.

    En primer lugar, ¿cuál es su definición de aprendizaje de estructuras de datos?

    si aprendiendo realmente quiere decir la capacidad de codificarlos bien, tengo que decir que cualquiera con conocimientos básicos de codificación puede hacerlo.

    Personalmente defino aprenderlo como la capacidad de usar la estructura de datos correcta para cada problema que enfrenta, pero ¿cómo se puede obtener tal cosa?

    En primer lugar, necesita un conocimiento básico de las anotaciones asintóticas para analizar las estructuras de datos y sus operaciones comunes, como agregar o eliminar datos de una, bueno, le recomiendo leer las primeras 100 páginas de

    Introducción a los algoritmos .

    El segundo objetivo es aprender a codificar estructuras de datos y sus usos generales, pros y contras.

    esta parte se basa en su lenguaje de programación preferido si le gusta Java, entonces intente leer Algoritmos de Robert Sedgewick, pero si le gusta C ++ lea Fundamentos de estructuras de datos, tenga en cuenta que (Los algoritmos incluyen tanto estructuras de datos como algoritmos, pero los Fundamentos de estructuras de datos son solo datos estructuras) la lectura de uno de estos libros es suficiente para obtener una comprensión básica de las estructuras de datos y también tratar de resolver los problemas mencionados en esos libros.

    No olvide resolver los problemas de programación competitivos que generalmente requieren una buena comprensión de las estructuras de datos.

    Creo que deberías comenzar con el libro.
    Introducción al algoritmo por Thomas H. Cormen
    Introducción a los algoritmos
    Esto se considera como biblia para su campo.
    No comience demasiado lento, como dedicar mucho tiempo a leer sobre estructuras básicas de datos.
    VAYA a la implementación de estructuras de datos tan pronto como lo conozca, de esta manera retendrá los conceptos durante más tiempo.
    En el comienzo, tendrás que mantener la paciencia porque la velocidad de comprensión será lenta y la velocidad de implementación más lenta, sigue intentándolo hasta que tengas éxito.
    He conocido a muchos desarrolladores que sabían cosas de los libros, pero si sacas una cosa de su preparación, se dan por vencidos.

    Aquí está mi recomendación sobre el aprendizaje de estructuras de datos para programación competitiva o entrevistas tecnológicas

    1. Fundamentos sólidos: puede utilizar Introducción a los algoritmos de Cormen. Concéntrese en la clasificación, pilas y colas, árboles, gráficos, programas dinámicos y codiciosos.
    2. Ensuciarse las manos: no solo mire algoritmos. Practica en tu editor de idiomas favorito. Asegúrese de poder escribir código que maneje con éxito todos los casos de esquina. Con el tiempo, desarrollará la capacidad de simular código mentalmente para detectar errores en él.
    3. Practique la programación competitiva: resuelva los desafíos de programación. Puede registrarse en varios sitios web de programación competitivos. Ver ¿Cuáles son algunos buenos sitios de competencia / práctica de codificación? para una buena lista de dichos sitios web.

    Todo lo mejor con tus entrevistas tecnológicas

    Me llevó un tiempo entender cómo funciona la codificación. Pero una vez que tenga los conceptos básicos claros, le resultará muy fácil aprender las estructuras de datos. La mejor manera de aprender esto sería considerar las estructuras de datos como entidades de la vida real y comprenderlo como lo usaría en la vida diaria.

    P.ej. Pila de libros .

    Una cola en el mostrador

    Un árbol como planta con hojas al final.

    Una lista vinculada como un contador de memoria 🙂

    Recuerde siempre comenzar con las matrices -> pila -> cola -> lista vinculada -> árbol -> gráfico y así sucesivamente …

    Mire videos de YouTube para una comprensión interactiva

    Resolviendo problemas reales con ellos.

    Pero, antes de eso, le sugiero que pruebe la teoría para posicionar su cerebro en lo que está sucediendo allí … Puede comenzar aquí:

    Algoritmos, Parte I | Coursera

    Algoritmos, Parte II | Coursera

    https://www.amazon.com/Algorithm

    https://www.amazon.com/Introduct

    https://www.amazon.com/Algorithm

    A mi gusto personal, le sugiero que comience con ese video curso, ya que el Profesor Sedgewick comienza desde el principio y explica todo muy bien. Su libro es más apetecible que el de CRLS o el de Skiena. No digo que sean peores o mejores, cubren más o menos el mismo terreno, pero el estilo de Sedgewick se basa menos en matemáticas o pruebas pesadas.

    Después de conocer los conceptos básicos, puede comenzar a ejecutar, vaya a leetcode, hackerhank, (cualquier otro sitio web con problemas) o compre CTCI https://www.amazon.com/Cracking-… o EPI: https: //www.amazon. com / Elements-

    Una nota muy importante que quiero hacer es que el aprendizaje lleva tiempo y práctica, a veces mucho tiempo y esfuerzo, así que trate de no frustrarse si no obtiene algo en las primeras 5 o 10 veces que lo prueba. 🙂

    Aclamaciones,

    Así es como me preparé en estructuras de datos y algoritmos para mis entrevistas técnicas.

    1. Fundamentos sólidos: puede utilizar Introducción a los algoritmos de Cormen. Concéntrese en la clasificación, pilas y colas, árboles, gráficos, programas dinámicos y codiciosos.
    2. Ensuciarse las manos: no solo mire algoritmos. Practica en tu editor de idiomas favorito. Asegúrese de poder escribir código que maneje con éxito todos los casos de esquina. Con el tiempo, desarrollará la capacidad de simular código mentalmente para detectar errores en él.
    3. Practique la programación competitiva: resuelva los desafíos de programación. Puede registrarse en varios sitios web de programación competitivos. Vea ¿Cuáles son algunos buenos sitios de competencia / práctica de codificación? para una buena lista de dichos sitios web.

    Todo lo mejor con tus entrevistas tecnológicas