Estructuras de datos y algoritmos (DSA) se refieren al estudio de métodos para organizar y almacenar datos y al diseño de procedimientos (algoritmos) para resolver problemas, que operan sobre estas estructuras de datos. DSA Es una de las habilidades más importantes que todo estudiante de informática debe tener. A menudo se ve que las personas con buenos conocimientos de estas tecnologías son mejores programadores que otros y, por lo tanto, superan las entrevistas de casi todos los gigantes tecnológicos. Este Tutorial de DSA tiene como objetivo ayudarle a aprender estructuras de datos y algoritmos (DSA) de forma rápida y sencilla.
Tabla de contenidos
- Formulario completo de DSA
- ¿Qué es DSA?
- ¿Cómo aprender DSA?
- Cadena
- Listas enlazadas
- Matriz/Cuadrícula
- Pila
- Cola
- Montón
- Picadillo
- Árbol
- Grafico
- Algoritmo de búsqueda
- Algoritmo de clasificación
- Algoritmo divide y vencerás
- Algoritmos codiciosos
- recursividad
- Algoritmo de retroceso
- Programación dinámica
- Algoritmos de gráficos:
- Búsqueda de patrones
- Algoritmos matemáticos
- Algoritmos geométricos
- Algoritmos bit a bit
- Algoritmos aleatorios
- Algoritmo de rama y límite
Formulario completo de DSA
El término DSA significa Estructuras de datos y algoritmos , en el contexto de la Informática.
¿Qué es DSA?
Estructuras de datos y algoritmos (DSA) se refieren al estudio de métodos para organizar y almacenar datos y al diseño de procedimientos (algoritmos) para resolver problemas, que operan sobre estas estructuras de datos.
¿Cómo aprender DSA?
Lo primero y más importante es dividir el procedimiento total en pequeñas partes que deben realizarse de forma secuencial. El proceso completo para aprender DSA desde cero se puede dividir en 5 partes:
- Aprenda al menos un lenguaje de programación (esto lo dejamos a su elección).
- Aprenda estructuras de datos
- Aprender algoritmos
- Aprenda sobre las complejidades del tiempo y el espacio
- Problemas de práctica en DSA

¿Cómo aprender DSA?
Con la esperanza de que haya aprendido un lenguaje de programación de su elección, avancemos con el siguiente paso para aprender DSA en este tutorial de DSA.
Aquí viene la etapa más importante y más esperada de la hoja de ruta para aprender la estructura de datos y el algoritmo: la etapa en la que comienza a aprender sobre DSA. El tema de DSA consta de dos partes:
- Estructuras de datos
- Algoritmos
Aunque son dos cosas diferentes, están muy interrelacionadas y es muy importante seguir el camino correcto para aprenderlas de la manera más eficiente. Si no sabe cuál aprender primero, le recomendamos que consulte nuestro análisis detallado sobre el tema: Aquí hemos seguido el flujo de aprendizaje de una estructura de datos y luego los algoritmos más relacionados e importantes utilizados por esa estructura de datos.
Aprenda estructuras de datos
Estructuras de datos son componentes esenciales que ayudan a organizar y almacenar datos de manera eficiente en la memoria de la computadora. Proporcionan una forma de gestionar y manipular datos de forma eficaz, permitiendo operaciones de acceso, inserción y eliminación más rápidas. Las estructuras de datos comunes incluyen matrices, listas enlazadas, pilas, colas, árboles y gráficos , cada uno de los cuales tiene propósitos específicos según los requisitos del problema en cuestión. Comprender las estructuras de datos es fundamental para diseñar algoritmos eficientes y optimizar el rendimiento del software.
Formación Es una estructura de datos lineal que almacena una colección de elementos del mismo tipo de datos. A los elementos se les asigna memoria contigua, lo que permite el acceso en tiempo constante. Cada elemento tiene un número de índice único.
- Operaciones en matriz:
- El recorrido : Iterando a través de los elementos de una matriz.
- Inserción : Agregar un elemento a la matriz en un índice específico.
- Supresión : Eliminar un elemento de la matriz en un índice específico.
- buscando : Encontrar un elemento en la matriz por su valor o índice.
- Tipos de matrices :
- Matriz unidimensional : una matriz simple con una única dimensión.
- Matriz multidimensional : una matriz con múltiples dimensiones, como una matriz.
- Aplicaciones de matriz :
- Almacenamiento de datos de forma secuencial.
- Implementación de colas, pilas y otras estructuras de datos
- Representar matrices y tablas.
- Temas relacionados en Array:
- Tutorial de matrices
- Los 50 problemas principales de codificación de matrices para entrevistas
- Practicar problemas sobre matrices
2. cuerda
A cadena es una secuencia de caracteres, normalmente utilizada para representar texto. Se considera un tipo de datos que permite la manipulación y procesamiento de datos textuales en programas informáticos.
- Operaciones en cadena :
- Concatenación : Unir dos cuerdas.
- Comparación : Comparación lexicográfica de dos cadenas.
- Subcadena extracción : Extraer una subcadena de una cadena.
- Buscar : Buscando una subcadena dentro de una cadena.
- Modificación : Cambiar o reemplazar caracteres dentro de una cadena.
- Aplicaciones de la cuerda :
- Procesamiento de texto
- La coincidencia de patrones
- Validación de datos
- Gestión de base de datos
- Artículos Relacionados:
- Tutorial de cuerdas
- Los 50 problemas principales de codificación de cadenas para entrevistas
- Problemas de práctica con cuerdas
3. Listas enlazadas
A lista enlazada Es una estructura de datos lineal que almacena datos en nodos, que están conectados por punteros. A diferencia de las matrices, las listas enlazadas no se almacenan en ubicaciones de memoria contiguas.
- Características de la lista enlazada:
- Dinámica : El tamaño de las listas vinculadas se puede cambiar fácilmente agregando o eliminando nodos.
- No contiguos : Los nodos se almacenan en ubicaciones de memoria aleatorias y están conectados mediante punteros.
- Acceso secuencial : Solo se puede acceder a los nodos de forma secuencial, comenzando desde el principio de la lista.
- Operaciones en lista enlazada:
- Creación : Crear una nueva lista vinculada o agregar un nuevo nodo a una lista existente.
- El recorrido : Iterando por la lista y accediendo a cada nodo.
- Inserción : Agregar un nuevo nodo en una posición específica de la lista.
- Supresión : Eliminar un nodo de la lista.
- Buscar : Encontrar un nodo con un valor específico en la lista.
- Tipos de lista enlazada :
- Lista enlazada individualmente : cada nodo apunta al siguiente nodo de la lista.
- Lista doblemente enlazada : Cada nodo apunta tanto al nodo siguiente como al anterior de la lista.
- Lista circular enlazada : El último nodo apunta hacia el primer nodo, formando un bucle circular.
- Aplicaciones de lista enlazada :
- Las listas enlazadas se utilizan en diversas aplicaciones, entre ellas:
- Implementación de colas y pilas
- Representar gráficos y árboles.
- Mantener datos ordenados
- Gestión de la memoria
- Temas relacionados:
- Tutorial de lista enlazada
- Los 50 problemas principales en la lista vinculada para entrevistas
- Practicar problemas en listas enlazadas
4. Matriz/Cuadrícula
A matriz Es una matriz bidimensional de elementos, organizados en filas y columnas. Se representa como una cuadrícula rectangular, con cada elemento en la intersección de una fila y una columna.
- Conceptos clave:
- Filas : Líneas horizontales de elementos en una matriz.
- columnas : Líneas verticales de elementos en una matriz.
- Dimensiones : el número de filas y columnas de una matriz (por ejemplo, una matriz de 3×4 tiene 3 filas y 4 columnas).
- Elemento Acceso : Se puede acceder a los elementos mediante índices de filas y columnas (por ejemplo, M[2][3] se refiere al elemento de la fila 2, columna 3).
- Aplicaciones de Matrix/Grid :
- Procesamiento de imágenes
- Análisis de los datos
- Problemas de optimización
- Artículos Relacionados:
- Tutorial de matrices/cuadrículas
- Los 50 problemas principales en Matrix/Grid para entrevistas
- Problemas de práctica en Matrix/Grid
5. Pila
Pila Es una estructura de datos lineal que sigue un orden particular en el que se realizan las operaciones. El orden puede ser LIFO (Último en entrar, primero en salir) o FILO (primero en entrar, último en salir) . LIFO implica que el elemento que se inserta último, sale primero y FILA implica que el elemento que se inserta primero, sale el último.
- Operación en pila :
- Empujar : Agrega un elemento a la parte superior de la pila.
- Estallido : Elimina y devuelve el elemento en la parte superior de la pila.
- Ojeada : Devuelve el elemento en la parte superior de la pila sin eliminarlo
- Tamaño : Devuelve el número de elementos en la pila
- Esta vacio : Comprueba si la pila está vacía
- Aplicaciones de la pila :
- Llamadas a funciones
- Evaluación de expresiones
- Retroceder
- Deshacer/rehacer operaciones
- Temas relacionados en Stack:
- Tutorial de pila
- Los 50 problemas principales en Stack para entrevistas
- Practica problemas en Stack
6. Cola
A Cola La estructura de datos es un concepto fundamental en informática que se utiliza para almacenar y gestionar datos en un orden específico. Sigue el principio de Primero en entrar primero en salir ( FIFO ), donde el primer elemento agregado a la cola es el primero en ser eliminado
- Operación en cola :
- poner en cola : Agrega un elemento al final de la cola.
- Respectivamente : Elimina un elemento del frente de la cola
- Ojeada : Recupera el elemento frontal sin quitarlo.
- Esta vacio : Comprueba si la cola está vacía
- Está lleno : Comprueba si la cola está llena
- Tipo de cola :
- Cola circular : El último elemento se conecta al primer elemento.
- Cola de doble extremo (Deque) : Las operaciones se pueden realizar desde ambos extremos.
- Cola de prioridad : Los elementos se organizan según la prioridad.
- Aplicaciones de cola :
- programación de trabajos
- Cola de mensajes
- Modelado de simulación
- Almacenamiento en búfer de datos
- Temas relacionados:
- Tutorial de cola
- Los 50 problemas principales en la cola para entrevistas
- Practicar problemas en cola
7. Montón
A Montón es una estructura de datos de árbol binario completa que satisface la propiedad del montón: para cada nodo, el valor de sus hijos es menor o igual a su propio valor. Los montones se utilizan generalmente para implementar colas prioritarias , donde el elemento más pequeño (o más grande) siempre está en la raíz del árbol.
- Operaciones de montón :
- Insertar : Agrega un nuevo elemento al montón mientras mantiene las propiedades del montón.
- Extraer-Max/Extraer-Min : Elimina el elemento raíz y reestructura el montón.
- Tecla de aumento/disminución : Actualiza el valor de un nodo y reestructura el montón.
- Tipos de montón :
- montón máximo : El nodo raíz tiene el valor máximo entre sus hijos.
- montón mínimo : El nodo raíz tiene el valor mínimo entre sus hijos.
- Aplicaciones del montón :
- Colas prioritarias
- Clasificación
- Algoritmos de gráficos (por ejemplo, el algoritmo de Dijkstra)
- Artículos Relacionados:
- Tutorial del montón
- Los 50 problemas principales en Heap para entrevistas
- Problemas de práctica en montón
8. Picadillo
hash es una técnica que genera una salida de tamaño fijo (valor hash) a partir de una entrada de tamaño variable utilizando fórmulas matemáticas llamadas funciones hash . El hash se utiliza para determinar un índice o ubicación para almacenar un elemento en una estructura de datos, lo que permite una recuperación e inserción eficientes.
- Conceptos clave:
- Función hash : una función matemática que asigna una entrada a un valor hash.
- Tabla de picadillo : una estructura de datos que almacena pares clave-valor, donde la clave es un valor hash y el valor son los datos reales.
- Colisión : Cuando dos claves diferentes producen el mismo valor hash.
- Tipos de funciones hash :
- Método de división : divide la entrada por una constante y utiliza el resto como valor hash.
- Cuadrado medio Método: eleva al cuadrado la entrada y toma los dígitos del medio como valor hash.
- Método de plegado : divide la entrada en bloques del mismo tamaño y los suma para obtener el valor hash.
- Método de multiplicación : multiplica la entrada por una constante y toma la parte fraccionaria como valor hash.
- Técnicas de resolución de colisiones :
- Encadenamiento separado (hashing abierto) : almacena elementos en colisión en una lista vinculada con el valor hash correspondiente.
- Direccionamiento abierto (hash cerrado) : Utiliza varias estrategias para encontrar una ubicación alternativa para los elementos en colisión dentro de la tabla hash.
- Aplicaciones de hash :
- Almacenar y recuperar datos de manera eficiente en bases de datos y sistemas de archivos.
- Verificación de contraseñas y firmas digitales.
- Distribuir solicitudes entre múltiples servidores.
- Generación de hashes seguros para la integridad y autenticación de datos.
- Artículos Relacionados:
- Tutorial de hash
- Problemas de práctica sobre hash
9. Árbol
A árbol es una estructura de datos jerárquica no lineal que consta de nodos conectados por bordes, con un nodo superior llamado raíz y nodos que tienen nodos secundarios. Se utiliza en informática para organizar datos de manera eficiente.
encontrar números bloqueados en Android
- Recorrido del árbol : Los métodos de recorrido de árbol se utilizan para visitar y procesar nodos en una estructura de datos de árbol. Los tres métodos transversales comunes son:
- En orden : Visite el subárbol izquierdo, el nodo actual y luego el subárbol derecho.
- Hacer un pedido : Visita el nodo actual, el subárbol izquierdo y luego el subárbol derecho.
- Orden de publicación : Visite el subárbol izquierdo, el subárbol derecho y luego el nodo actual.
- Clasificaciones de árboles:
- Clasificaciones de Árboles se refieren a agrupar árboles en función de determinadas características o criterios. Esto puede implicar categorizar árboles según su factor de equilibrio, grado de nodos, propiedades de orden, etc. A continuación se muestran algunas clasificaciones importantes de árboles.
Clasificación | Descripción | Tipo | Descripción |
---|---|---|---|
Por grado | Los árboles se pueden clasificar según la cantidad máxima de hijos que puede tener cada nodo. | Árbol binario | Cada nodo tiene como máximo dos hijos. |
Árbol ternario | Cada nodo tiene como máximo tres hijos. | ||
Árbol N-ario | Cada nodo tiene como máximo N hijos. | ||
Al realizar el pedido | Los árboles se pueden clasificar según el orden de los nodos y subárboles. | Árbol de búsqueda binaria (BST) | niño izquierdo |
Montón | Árbol binario especializado con propiedad de montón. | ||
Por saldo | Los árboles se pueden clasificar según su equilibrio. | Las alturas de los subárboles difieren como máximo en uno. Los ejemplos incluyen árboles AVL y árboles Rojo-Negro. | |
Árbol desequilibrado | Las alturas de los subárboles pueden diferir significativamente, lo que afecta el rendimiento en operaciones como la búsqueda y la inserción. |
- Aplicaciones de los árboles:
- Sistemas de archivos
- Bases de datos
- documentos XML
- Inteligencia artificial
- Artículos Relacionados:
- Tutorial de árbol
- Los 50 principales problemas de codificación de árboles
- Practicar problemas en Tree
10. Gráfico
A Grafico es una estructura de datos no lineal que consta de un conjunto finito de vértices (o nodos) y un conjunto de aristas que conectan un par de nodos.
- Recorridos de gráfico:
- Búsqueda en amplitud (BFS) : Visita nodos nivel por nivel.
- Búsqueda en profundidad (DFS) : Visita nodos de forma recursiva, explorando una rama a la vez.
- Aplicaciones de gráficos :
- Redes sociales
- Mapas y navegación
- Planificación
- Procesamiento de datos
- Artículos Relacionados:
- Representación gráfica
- Tipos de gráficos
- Tutorial de gráficos
- Practica problemas en Graph
Aprender algoritmos
Una vez que hayas aclarado los conceptos de Estructuras de datos , ahora es el momento de comenzar tu viaje a través del Algoritmos . Según el tipo de naturaleza y uso, los algoritmos se agrupan en varias categorías, como se muestra a continuación:
1. Algoritmo de búsqueda
Algoritmos de búsqueda Se utilizan para localizar datos específicos dentro de un conjunto más grande de datos. Ayuda a encontrar la presencia de un valor objetivo dentro de los datos. Existen varios tipos de algoritmos de búsqueda, cada uno con su propio enfoque y eficiencia.
- Algoritmos de búsqueda más comunes:
- Búsqueda lineal : Búsqueda iterativa de un extremo al otro.
- Búsqueda binaria : Búsqueda de divide y vencerás en una matriz ordenada, reduciendo a la mitad el espacio de búsqueda en cada iteración.
- Búsqueda ternaria : Búsqueda de divide y vencerás en una matriz ordenada, dividiendo el espacio de búsqueda en tres partes en cada iteración.
- Otros algoritmos de búsqueda:
- Saltar búsqueda
- Búsqueda por interpolación
- Búsqueda exponencial
- Temas relacionados:
- Problemas de práctica sobre el algoritmo de búsqueda.
2. Algoritmo de clasificación
Algoritmos de clasificación Están acostumbrados a organizar los elementos de una lista en un orden específico, como numérico o alfabético. Organiza los elementos de forma sistemática, facilitando la búsqueda y el acceso a elementos específicos.
hacer y mientras bucle en java
Hay muchos tipos diferentes de algoritmos de clasificación. Algunos algoritmos ampliamente utilizados son:
Algoritmo de clasificación | Descripción |
---|---|
Ordenamiento de burbuja | Compara iterativamente elementos adyacentes y los intercambia si no están en orden. El elemento más grande aparece hasta el final de la lista con cada pasada. |
Orden de selección | Encuentra el elemento mínimo en la parte no ordenada de la lista y lo intercambia con el primer elemento. Repite este proceso hasta que se ordene toda la lista. |
Tipo de inserción | Crea la lista ordenada un elemento a la vez insertando cada elemento sin clasificar en su posición correcta en la parte ordenada. |
Ordenación rápida | Un algoritmo de divide y vencerás que selecciona un elemento pivote, divide la lista en dos sublistas según el pivote y aplica recursivamente el mismo proceso a las sublistas. |
Combinar ordenar | Otro algoritmo de divide y vencerás que divide recursivamente la lista en sublistas más pequeñas, las clasifica y luego las vuelve a fusionar para obtener la lista ordenada. |
Temas relacionados:
- Tutorial de algoritmo de clasificación
- Clasificación de preguntas y problemas principales de la entrevista
- Problemas de práctica sobre el algoritmo de clasificación.
3. Algoritmo divide y vencerás
Divide y conquistaras Los algoritmos siguen una estrategia recursiva para resolver problemas dividiéndolos en subproblemas más pequeños, resolviendo esos subproblemas y combinando las soluciones para obtener la solución final.
Pasos:
- Dividir : Divida el problema en subproblemas más pequeños e independientes.
- Conquistar : Resuelve recursivamente cada subproblema.
- Combinar : Fusionar las soluciones de los subproblemas para obtener la solución final.
Ejemplos:
- Combinar ordenación: divide la matriz en dos mitades, ordena cada mitad de forma recursiva y combina las mitades ordenadas.
- Ordenación rápida: selecciona un elemento pivote, divide la matriz en dos subarreglos según el pivote y ordena recursivamente cada subarreglo.
- Búsqueda binaria: divide el espacio de búsqueda por la mitad repetidamente hasta que se encuentra el elemento de destino o se agota el espacio de búsqueda.
Artículos relacionados:
- Tutorial divide y vencerás
- Practique problemas sobre el algoritmo Divide And Conquer
4. Algoritmos codiciosos
Como sugiere el nombre, este algoritmo construye la solución pieza por pieza y elige la siguiente pieza que brinda el beneficio más obvio e inmediato, es decir, cuál es la opción más óptima en ese momento. Entonces, los problemas en los que elegir localmente óptimo también conduce a soluciones globales son los más adecuados para Greedy.
Algunos problemas importantes de los algoritmos codiciosos son:
Algoritmo | Descripción |
---|---|
Mochila fraccionaria | Encuentre el valor total máximo de artículos que se pueden colocar en la mochila, permitiendo la inclusión fraccionada de artículos. |
Algoritmo de Dijkstra | Encuentra la ruta más corta desde un vértice de origen a todos los demás vértices en un gráfico ponderado. |
Algoritmo de Kruskal | Encuentra el árbol de expansión mínimo de un gráfico ponderado. |
Codificación Huffman | Crea un código de prefijo óptimo para un conjunto de símbolos, minimizando la longitud total de codificación. |
Artículos relacionados:
- Tutorial de algoritmo codicioso
- Problemas de práctica sobre el algoritmo codicioso
5. recursividad
recursividad es una técnica de programación donde una función se llama a sí misma dentro de su propia definición. Generalmente se utiliza para resolver problemas que se pueden dividir en instancias más pequeñas del mismo problema. Por ejemplo: Torres de Hanoi (TOH) , Cálculo factorial y Secuencia Fibonacci etc.
Pasos :
- Caso base : Defina una condición que detenga las llamadas recursivas y proporcione una solución.
- Caso recursivo : Defina los pasos para dividir el problema en instancias más pequeñas y realizar llamadas recursivas.
- Devolver : Devuelve la solución de las llamadas recursivas y combínalas para resolver el problema original.
El punto que hace que la recursividad sea uno de los algoritmos más utilizados es que forma la base de muchos otros algoritmos como Recorridos de árboles , Recorridos de gráficos , Algoritmos divide y vencerás y Algoritmos de retroceso .
Temas relacionados:
- Tutorial de recursividad
- Funciones recursivas
- Recursión de cola
- Los 50 problemas principales del algoritmo recursivo para entrevistas
- Problemas de práctica sobre el algoritmo de recursividad.
6. Algoritmo de retroceso
Como se mencionó anteriormente, el Retroceder El algoritmo se deriva del algoritmo de recursión, con la opción de revertir si falla una solución recursiva, es decir, en caso de que una solución falle, el programa rastrea hasta el momento en el que falló y construye sobre otra solución. Básicamente, prueba todas las soluciones posibles y encuentra la correcta.
Algunos problemas importantes y más comunes de los algoritmos de retroceso, que debes resolver antes de seguir adelante, son:
Problema | Descripción |
---|---|
El problema de la gira del caballero | Encontrar una secuencia de movimientos de un caballo en un tablero de ajedrez de modo que visite cada casilla exactamente una vez. |
Rata en un laberinto | Encontrar un camino desde la posición inicial hasta la salida en un laberinto, con obstáculos representados como paredes. |
Problema de N-Reina | Colocar N reinas en un tablero de ajedrez N × N de modo que dos reinas no se ataquen entre sí. |
Problema de suma de subconjuntos | Determinar si existe un subconjunto del conjunto dado con una suma determinada. |
Sudokus | Resolver un rompecabezas de cuadrícula de 9 × 9 con números del 1 al 9 de modo que cada fila, columna y subcuadrícula de 3 × 3 contenga todos los dígitos sin repetición. |
Artículo relacionado:
- Tutorial de retroceso
- Problemas de práctica sobre el algoritmo de retroceso
7. Programación dinámica
Programación dinámica es un método utilizado en matemáticas e informática para resolver problemas complejos dividiéndolos en subproblemas más simples. Al resolver cada subproblema una sola vez y almacenar los resultados, se evitan cálculos redundantes, lo que conduce a soluciones más eficientes para una amplia gama de problemas.
Conceptos clave:
- Subestructura óptima : La solución óptima a un problema se puede construir a partir de las soluciones óptimas a sus subproblemas.
- Subproblemas superpuestos : Los subproblemas a menudo se repiten en el problema más grande, lo que lleva a cálculos redundantes.
- Memorización / Tabulación : Almacenar las soluciones a los subproblemas para evitar un nuevo cálculo.
Algunos problemas importantes y más comunes de los algoritmos de programación dinámica, que debes resolver antes de seguir adelante, son:
Problema | Descripción |
---|---|
Secuencia Fibonacci | Generar números de Fibonacci mediante programación dinámica para evitar cálculos redundantes. |
Subsecuencia común más larga | Encontrar la subsecuencia más larga común a dos secuencias. |
Subsecuencia creciente más larga | Encontrar la subsecuencia más larga de una secuencia dada en la que los elementos están ordenados en orden creciente. |
0/1 Problema de mochila | Determinar el valor máximo que se puede obtener seleccionando artículos con pesos y valores dados, sin exceder un límite de peso específico. |
Problema de corte de varilla | Maximizar el beneficio cortando una varilla de una longitud determinada en trozos y vendiéndolas a precios determinados. |
Problema de cambio de moneda | Determinar el número de formas de dar cambio por una cantidad determinada utilizando un conjunto determinado de denominaciones de monedas. |
Editar distancia | Encontrar el número mínimo de operaciones (inserción, eliminación, sustitución) necesarias para convertir una cadena en otra. |
Problema de suma de subconjuntos | Determinar si existe un subconjunto de un conjunto dado con una suma dada. |
La subsecuencia palindrómica más larga | Encontrar la subsecuencia más larga de una secuencia dada que sea un palíndromo. |
Suma máxima de subarreglo | Encontrar el subarreglo contiguo con la suma más grande dentro de un arreglo unidimensional dado. |
Suma de subconjunto igual de partición | Determinar si es posible dividir un conjunto dado en dos subconjuntos con igual suma. |
Ruta de costo mínimo | Encontrar la ruta de costo mínimo desde la esquina superior izquierda hasta la esquina inferior derecha de una cuadrícula determinada. |
Subconjunto máximo de productos | Encontrar el subarreglo contiguo con el producto más grande dentro de un arreglo unidimensional dado. |
Artículos relacionados:
- Tabulación versus memorización
- ¿Cómo resolver un problema de programación dinámica?
- Tutorial de programación dinámica
- Los 50 problemas principales de codificación de programación dinámica para entrevistas
- Practique problemas sobre el algoritmo de programación dinámica.
8. Algoritmos gráficos :
Algoritmos gráficos En estructuras y algoritmos de datos (DSA) son un conjunto de técnicas y métodos utilizados para resolver problemas relacionados con gráficos, que son una colección de nodos y aristas. Estos algoritmos están diseñados para realizar diversas operaciones en gráficos, como buscando, atravesando, encontrando el camino más corto y determinando conectividad . Son esenciales para resolver una amplia gama de problemas del mundo real, incluido el enrutamiento de redes, el análisis de redes sociales y la asignación de recursos.
Tema | Descripción del tema | Algoritmo | Descripción del algoritmo |
---|---|---|---|
Recorrido de gráficos | Técnicas para visitar todos los vértices de un gráfico. | Búsqueda en profundidad (DFS) | Explora lo más lejos posible a lo largo de cada rama antes de retroceder. |
Búsqueda en amplitud (BFS) | Explora los vértices vecinos antes de pasar al siguiente nivel de vértices. | ||
Árboles de expansión mínima | Los árboles de expansión mínima son los árboles más pequeños que conectan todos los nodos de un gráfico sin formar ciclos, lo que se logra agregando los bordes más cortos posibles. | Encuentra un árbol de expansión mínimo para un gráfico ponderado conectado. Agrega el borde de peso más pequeño que no forma un ciclo. | |
También encuentra un árbol de expansión mínimo para un gráfico ponderado conectado. Agrega el borde de peso más pequeño que conecta dos árboles. | |||
Clasificación topológica | La clasificación topológica es una ordenación lineal de los vértices en un gráfico acíclico dirigido (DAG) de modo que para cada arista dirigida desde el vértice u al vértice v, u viene antes de v en el orden. edad de salman khan | Algoritmo de Kahn | El algoritmo de Kahn encuentra un orden topológico de un gráfico acíclico dirigido (DAG). |
Algoritmo basado en DFS | El algoritmo basado en DFS utiliza la búsqueda en profundidad para realizar una clasificación topológica en un gráfico acíclico dirigido (DAG). | ||
Camino más corto | Un camino más corto en un gráfico es el camino entre dos vértices en un gráfico que tiene la suma mínima de pesos a lo largo de sus bordes en comparación con todos los demás caminos entre los mismos dos vértices. | Algoritmo codicioso para encontrar la ruta más corta entre todos los nodos en tiempo O (E * V logV). | |
Encuentra el camino más corto entre todos los pares de nodos en tiempo O(V^3). | |||
Encuentra el camino más corto desde una única fuente en tiempo O(V * E). | |||
Algoritmo de Johnson | Encuentra los caminos más cortos entre todos los pares de vértices en tiempo O(V^2 logV + V * E). | ||
Componentes fuertemente conectados | Un componente fuertemente conectado (SCC) de un gráfico dirigido es un conjunto máximo de vértices tal que hay un camino desde cada vértice del conjunto hasta todos los demás vértices del conjunto. | El algoritmo de Kosaraju es un algoritmo de dos pasos que encuentra eficientemente los componentes fuertemente conectados (SCC) de un gráfico dirigido. | |
Algoritmo de Tarjan | El algoritmo de Tarjan es otro algoritmo eficiente para encontrar SCC en un gráfico dirigido |
Temas relacionados:
- Tutorial de gráficos
- Los 50 problemas principales de codificación de gráficos para entrevistas
- Problema de práctica sobre algoritmos gráficos
9 . Búsqueda de patrones
Búsqueda de patrones es una técnica fundamental en DSA que se utiliza para encontrar apariciones de un patrón específico dentro de un texto determinado.
A continuación se muestran algunos algoritmos de búsqueda de patrones estándar:
Algoritmo | Descripción | Complejidad del tiempo |
---|---|---|
Fuerza bruta | Compara el patrón con cada subcadena del texto. | O(mn) |
Knuth-Morris-Pratt | Utiliza una función de falla precalculada para omitir comparaciones innecesarias. | O(metro + norte) |
boyer-moore | Compara el patrón de derecha a izquierda, omitiendo caracteres según la última discrepancia | O(mn) |
Rabin-Karp | Utiliza hash para comprobar rápidamente posibles coincidencias. | O(metro + norte) |
Temas relacionados:
- Tutorial de búsqueda de patrones
- Problema de práctica en Búsqueda de patrones
10 . Algoritmos matemáticos
Algoritmos matemáticos son una clase de algoritmos que resuelven problemas relacionados con conceptos matemáticos. Se utilizan ampliamente en diversos campos, incluidos gráficos por computadora, análisis numérico, optimización y criptografía.
Algoritmo | Descripción |
---|---|
MCD y LCM | Encuentra el máximo común divisor y el mínimo común múltiplo de dos números. |
Factorización prima | Descomponer un número en sus factores primos. |
Números de Fibonacci | Genera la secuencia de Fibonacci, donde cada número es la suma de los dos anteriores. |
Números catalanes | Cuente el número de expresiones válidas con un número determinado de pares de paréntesis. |
Aritmética modular | Realizar operaciones aritméticas con números módulo un valor dado. |
Función del paciente de Euler | Cuente el número de números enteros positivos menores que un número dado que son primos relativos a él. |
Cálculos nCr | Calcule el coeficiente binomial, que representa el número de formas de elegir r elementos de un conjunto de n elementos. |
Números primos y pruebas de primalidad | Determinar si un número dado es primo y encontrar números primos de manera eficiente. |
Algoritmos de tamiz | Encuentra todos los números primos hasta un límite dado. |
Temas relacionados:
- Problema de práctica sobre algoritmo matemático
11. Algoritmos geométricos
Algoritmos geométricos son una clase de algoritmos que resuelven problemas relacionados con la geometría. Los algoritmos geométricos son esenciales para resolver una amplia gama de problemas en informática, tales como:
Algoritmo | Descripción |
---|---|
Casco convexo | Encuentra el polígono convexo más pequeño que contiene un conjunto de puntos. |
Par de puntos más cercano | Encuentra los dos puntos de un conjunto que están más cerca uno del otro. |
Intersección de líneas | Determina si dos líneas se cruzan y, de ser así, encuentra el punto de intersección. |
Punto en polígono | Determina si un punto determinado está dentro o fuera de un polígono. |
Temas relacionados:
- Problema de práctica sobre algoritmos geométricos
12. Algoritmos bit a bit
Algoritmos bit a bit son algoritmos que operan en bits individuales de números. Estos algoritmos manipulan la representación binaria de números para realizar tareas como manipulación de bits, operaciones lógicas bit a bit (AND, OR, XOR), bits cambiantes , y configuración o borrar bits específicos dentro de un número. Los algoritmos bit a bit se utilizan comúnmente en Tareas de programación, criptografía y optimización de bajo nivel. donde se requiere una manipulación eficiente de bits individuales.
Tema | Descripción |
---|---|
Cambio de bits | Desplaza bits hacia la izquierda o hacia la derecha un número específico de posiciones. |
Desplazamiento a la izquierda (<<) | Desplaza los bits hacia la izquierda, multiplicando efectivamente el número por 2. |
Desplazamiento a la derecha (>>) | Desplaza los bits hacia la derecha, dividiendo efectivamente el número por 2. |
Extraer bits | Usar máscaras para extraer bits específicos de un número entero. |
Bits de configuración | Usar máscaras para establecer bits específicos en 1 en un número entero. |
bits de limpieza | Usar máscaras para establecer bits específicos en 0 en un número entero. |
bits de alternancia | Usar XOR (^) para alternar bits específicos en un número entero. |
Contando bits establecidos | Contar el número de bits establecidos (1) en un número entero. |
Temas relacionados:
- Tutorial de algoritmos bit a bit
- Problema de práctica sobre algoritmos bit a bit
13. Algoritmos aleatorios
Los algoritmos aleatorios son algoritmos que utilizan la aleatoriedad para resolver problemas. Hacen uso de información aleatoria para lograr sus objetivos, lo que a menudo conduce a soluciones más simples o más eficientes.
Tipos de algoritmos aleatorios:
- Las Vegas : Siempre produce un resultado correcto, pero el tiempo de ejecución es aleatorio.
- Monte Carlo : Puede producir un resultado incorrecto con una pequeña probabilidad, pero el tiempo de ejecución suele ser más rápido.
Algoritmos importantes que utilizan algoritmos de aleatorización:
Algoritmo | Descripción |
---|---|
Ordenación rápida | Un algoritmo de clasificación aleatorio con una complejidad temporal promedio de O (n log n). |
Saltar lista | Una estructura de datos aleatoria que proporciona operaciones rápidas de búsqueda e inserción. |
Filtro de floración | Una estructura de datos probabilística para pruebas eficientes de membresía de conjuntos. |
14. Algoritmo de rama y límite
El Algoritmo de rama y límite Es un método utilizado en problemas de optimización combinatoria para buscar sistemáticamente la mejor solución. Funciona dividiendo el problema en subproblemas más pequeños o ramas, y luego eliminando ciertas ramas según los límites de la solución óptima. Este proceso continúa hasta que se encuentra la mejor solución o se han explorado todas las ramas.
Problemas estándar sobre algoritmos de rama y límite:
Problema único | Descripción |
---|---|
Mochila 0/1 usando Branch and Bound | Detalles de implementación del enfoque de bifurcación y enlace para resolver el problema de mochila 0/1. |
Mochila 0/1 usando rama de menor costo y encuadernada | Resolver el problema de la mochila 0/1 utilizando la técnica de rama y encuadernación de menor costo. |
8 problemas de rompecabezas usando Branch and Bound | Aplicación de rama y obligado a resolver el problema de 8 rompecabezas, un popular juego de rompecabezas deslizante. |
Problema de N Queen usando Branch and Bound | Utilizando rama y obligado a encontrar soluciones al problema de N Reinas, un problema clásico del ajedrez. |
Temas relacionados:
- Tutorial de algoritmos de ramificación y enlace
Aprenda sobre las complejidades
En Estructuras de Datos y Algoritmos (DSA), el objetivo principal es resolver problemas de forma eficaz y eficiente. Para determinar la eficiencia de un programa, analizamos dos tipos de complejidades:
- Complejidad del tiempo : Esto nos dice cuánto tiempo tarda nuestro código en ejecutarse.
- Complejidad espacial : Esto nos dice cuánta memoria usa nuestro código.
Notación asintótica :
Para comparar la eficiencia de los algoritmos, utilizamos la notación asintótica, una herramienta matemática que estima tiempo Residencia en tamaño de entrada sin ejecutar el código. Se centra en la cantidad de operaciones básicas del programa.
Notación | Descripción |
---|---|
O grande (Ο) | Describe el peor de los casos y proporciona un límite de tiempo superior del algoritmo. |
Omega (Ω) | Describe el mejor de los casos y ofrece un límite de tiempo inferior del algoritmo. |
theta (θ) | Representa la complejidad promedio de un algoritmo de algoritmo. |
La notación más utilizada para el análisis de código es Notación O grande , proporcionando un límite superior en el tiempo de ejecución o el uso de memoria con respecto al tamaño de entrada.
Temas relacionados:
- Comprender la complejidad del tiempo con ejemplos simples
- Complejidades temporales de diferentes estructuras de datos.
- Cómo analizar bucles para el análisis de complejidad de algoritmos
- Preguntas de práctica sobre análisis de complejidad del tiempo
Hojas de trucos para problemas de práctica:
Listas seleccionadas de problemas de los siguientes artículos:
- Hoja de ruta de DSA por Sandeep Jain
- HOJA SDE: una guía completa para la preparación de SDE
- Hoja maestra de techcodeview.com: lista de todas las hojas de trucos