
En informática , un algoritmo de búsqueda es un algoritmo diseñado para resolver un problema de búsqueda . Los algoritmos de búsqueda funcionan para recuperar información almacenada en una estructura de datos particular , o calculada en el espacio de búsqueda de un dominio del problema, con valores discretos o continuos .
Si bien los motores de búsqueda utilizan algoritmos de búsqueda, pertenecen al estudio de la recuperación de información , no a la algoritmética.
El algoritmo de búsqueda adecuado suele depender de la estructura de datos que se busca y también puede incluir conocimiento previo sobre los datos. Los algoritmos de búsqueda pueden hacerse más rápidos o eficientes mediante estructuras de bases de datos especialmente diseñadas, como árboles de búsqueda , mapas hash e índices de bases de datos . [ 1 ] [ 2 ]
Los algoritmos de búsqueda se pueden clasificar según su mecanismo de búsqueda en tres tipos: lineal, binario y hash. Los algoritmos de búsqueda lineal comprueban cada registro para encontrar el asociado a una clave objetivo de forma lineal. [ 3 ] Las búsquedas binarias, o de medio intervalo, apuntan repetidamente al centro de la estructura de búsqueda y dividen el espacio de búsqueda por la mitad. Los algoritmos de búsqueda por comparación mejoran la búsqueda lineal eliminando sucesivamente registros basándose en comparaciones de las claves hasta encontrar el registro objetivo, y se pueden aplicar a estructuras de datos con un orden definido. [ 4 ] Los algoritmos de búsqueda digital funcionan basándose en las propiedades de los dígitos en las estructuras de datos mediante el uso de claves numéricas. [ 5 ] Finalmente, el hash asigna directamente claves a registros basándose en una función hash . [ 6 ]
Los algoritmos suelen evaluarse según su complejidad computacional o su tiempo de ejecución teórico máximo. Las funciones de búsqueda binaria, por ejemplo, tienen una complejidad máxima de O (log n ) , o tiempo logarítmico. En términos sencillos, el número máximo de operaciones necesarias para encontrar el objetivo de búsqueda es una función logarítmica del tamaño del espacio de búsqueda.
Aplicaciones de algoritmos de búsqueda
Las aplicaciones específicas de los algoritmos de búsqueda incluyen:
- Problemas en optimización combinatoria , tales como:
- El problema de enrutamiento de vehículos , una forma del problema de la ruta más corta.
- El problema de la mochila : dado un conjunto de objetos, cada uno con un peso y un valor, determinar la cantidad de cada objeto que se debe incluir en una colección de manera que el peso total sea menor o igual a un límite dado y el valor total sea lo más grande posible.
- El problema de la programación de enfermeras
- Problemas en la satisfacción de restricciones , tales como:
- El problema de colorear el mapa
- Rellenar un sudoku o un crucigrama
- En la teoría de juegos y especialmente en la teoría de juegos combinatoria , elegir el mejor movimiento a realizar a continuación (como con el algoritmo minmax )
- Encontrar una combinación o contraseña entre todas las posibilidades.
- Factorización de un número entero (un problema importante en criptografía )
- Optimización para motores de búsqueda (SEO) y optimización de contenido para rastreadores web.
- Optimizar un proceso industrial, como una reacción química , modificando los parámetros del proceso (como la temperatura, la presión y el pH).
- Recuperación de un registro de una base de datos
- Encontrar el valor máximo o mínimo en una lista o matriz.
- Comprobar si un valor determinado está presente en un conjunto de valores.
Clases
Para espacios de búsqueda virtuales
Los algoritmos para la búsqueda en espacios virtuales se utilizan en el problema de satisfacción de restricciones , donde el objetivo es encontrar un conjunto de asignaciones de valores a ciertas variables que satisfagan ecuaciones e inecuaciones matemáticas específicas . También se utilizan cuando el objetivo es encontrar una asignación de variables que maximice o minimice una función determinada de esas variables. Los algoritmos para estos problemas incluyen la búsqueda básica por fuerza bruta (también llamada búsqueda "ingenua" o "no informada") y una variedad de heurísticas que intentan explotar el conocimiento parcial sobre la estructura de este espacio, como la relajación lineal, la generación de restricciones y la propagación de restricciones .
Una subclase importante son los algoritmos de búsqueda local que consideran los elementos del espacio de búsqueda como los vértices de un grafo, con aristas definidas por un conjunto de heurísticas aplicables al caso; y exploran el espacio moviéndose de un elemento a otro a lo largo de las aristas, por ejemplo, según el criterio de descenso más pronunciado o de búsqueda primero en amplitud , o en una búsqueda estocástica . Esta categoría incluye una gran variedad de métodos metaheurísticos generales , como el recocido simulado , la búsqueda tabú , los equipos A [ 7 ] y la programación genética , que combinan heurísticas arbitrarias de maneras específicas. Lo opuesto a la búsqueda local serían los métodos de búsqueda global. Este método es aplicable cuando el espacio de búsqueda no está limitado y todos los aspectos de la red dada están disponibles para la entidad que ejecuta el algoritmo de búsqueda. [ 8 ]
Los algoritmos de búsqueda en árboles son algoritmos de búsqueda en grafos locales diseñados para funcionar eficientemente en grafos dirigidos acíclicos con una única raíz o nodo inicial ( árboles ). Estos algoritmos recorren los nodos de un árbol en un orden específico, prescrito por un algoritmo diseñado para una aplicación particular. Ejemplos de algoritmos de búsqueda en árboles incluyen métodos exhaustivos como la búsqueda en profundidad y la búsqueda en amplitud , así como algoritmos de poda de árboles basados en heurísticas , como el retroceso , la ramificación y acotación y la poda alfa-beta . A diferencia de los algoritmos metaheurísticos , que solo pueden prescribir un orden de recorrido que sea óptimo en algún sentido probabilístico, muchos métodos de búsqueda en árboles garantizan encontrar la solución óptima exacta, si se les da el tiempo suficiente. En matemáticas y lógica, esto se denomina garantía de " completitud ".
Otra subclase importante la constituyen los algoritmos para explorar el árbol de juego de juegos multijugador, como el ajedrez o el backgammon , cuyos nodos representan todas las situaciones de juego posibles que podrían derivarse de la situación actual. El objetivo en estos problemas es encontrar la jugada que ofrezca la mejor probabilidad de victoria, teniendo en cuenta todas las posibles jugadas del oponente o oponentes. Problemas similares surgen cuando humanos o máquinas deben tomar decisiones sucesivas cuyos resultados no están completamente bajo su control, como en la guía de robots o en la planificación de estrategias de marketing , financieras o militares . Este tipo de problema —la búsqueda combinatoria— se ha estudiado ampliamente en el contexto de la inteligencia artificial . Ejemplos de algoritmos de esta clase son el algoritmo minimax , la poda alfa-beta y el algoritmo A* y sus variantes.
Para subestructuras de una estructura dada
Una subclase importante y ampliamente estudiada son los algoritmos de grafos , en particular los algoritmos de recorrido de grafos , para encontrar subestructuras específicas en un grafo dado, como subgrafos , caminos , circuitos, etc. Algunos ejemplos son el algoritmo de Dijkstra , el algoritmo de Kruskal , el algoritmo del vecino más cercano y el algoritmo de Prim .
Otra subclase importante de esta categoría son los algoritmos de búsqueda de cadenas , que buscan patrones dentro de las cadenas. Dos ejemplos famosos son los algoritmos de Boyer-Moore y Knuth-Morris-Pratt , así como varios algoritmos basados en la estructura de datos de árbol de sufijos .
Buscar el máximo de una función
En 1953, el estadístico estadounidense Jack Kiefer ideó la búsqueda de Fibonacci , que puede utilizarse para encontrar el máximo de una función unimodal y tiene muchas otras aplicaciones en la informática.
Para computadoras cuánticas
También existen métodos de búsqueda diseñados para computadoras cuánticas , como el algoritmo de Grover , que son teóricamente más rápidos que la búsqueda lineal o por fuerza bruta, incluso sin la ayuda de estructuras de datos o heurísticas. Si bien las ideas y aplicaciones detrás de las computadoras cuánticas aún son completamente teóricas, se han realizado estudios con algoritmos como el de Grover que replican con precisión las versiones físicas hipotéticas de los sistemas de computación cuántica. [ 9 ]
Véase también
- Inducción hacia atrás : proceso de razonamiento hacia atrás en secuencia.
- Memoria direccionable por contenido : tipo de hardware de memoria de computadora.
- Evolución de dos fases : proceso que impulsa la autoorganización dentro de sistemas adaptativos complejos.
- Problema de búsqueda lineal – Problema de búsqueda computacional
- En la búsqueda y optimización no hay nada gratis : el coste medio de la solución es el mismo con cualquier método.
- Sistema de recomendación : sistema para predecir las preferencias de los usuarios , que también utiliza métodos estadísticos para clasificar los resultados en conjuntos de datos muy grandes.
- Motor de búsqueda (informática) – Sistema para ayudar a buscar información
- Juego de búsqueda : juego de suma cero para dos personas
- Algoritmo de selección : método para encontrar el k-ésimo valor más pequeño.
- Solver – Software para una clase de problemas matemáticos
- Algoritmo de ordenación : algoritmo que ordena listas , necesario para ejecutar ciertos algoritmos de búsqueda.
- Motor de búsqueda web : sistema de software para encontrar información relevante en las páginas web que muestran breves descripciones de los destinos de redireccionamiento.
Categorías:
- Categoría: Algoritmos de búsqueda
Referencias
Citas
- ^ Beame y Fich 2002 , pág. 39.
- ↑ Knuth 1998 , §6.5 ("Recuperación en claves secundarias").
- ↑ Knuth 1998 , §6.1 ("Búsqueda secuencial").
- ↑ Knuth 1998 , §6.2 ("Búsqueda por comparación de claves").
- ↑ Knuth 1998 , §6.3 (Búsqueda digital).
- ↑ Knuth 1998 , §6.4, (Hashing).
- ↑ Talukdar, Sarosh; Baerentzen, Lars; Gove, Andrew; De Souza, Pedro (1998-12-01). "Equipos asíncronos: esquemas de cooperación para agentes autónomos". Journal of Heuristics . 4 (4): 295– 321. doi : 10.1023/A:1009669824615 . ISSN 1572-9397 .
- ↑ Hunter, AH; Pippenger, Nicholas (4 de julio de 2013). "Búsqueda local versus global en grafos de canales". Redes: Un viaje internacional . arXiv : 1004.2526 .
- ↑ López, GV; Gorin, T; Lara, L (26 de febrero de 2008). "Simulación del algoritmo de búsqueda cuántica de Grover en una computadora cuántica de cadena de espín nuclear de Ising con acoplamientos de primer y segundo vecino más cercano". Journal of Physics B: Atomic, Molecular and Optical Physics . 41 (5) 055504. arXiv : 0710.3196 . Bibcode : 2008JPhB...41e5504L . doi : 10.1088/0953-4075/41/5/055504 . S2CID 18796310 .
Bibliografía
Libros
- Knuth, Donald (1998). Ordenación y búsqueda . El arte de la programación informática . Vol. 3 (2.ª ed.). Reading, MA: Addison-Wesley Professional.
Artículos
- Beame, Paul; Fich, Faith (agosto de 2002). "Límites óptimos para el problema del predecesor y problemas relacionados" . Journal of Computer and System Sciences . 65 (1): 38– 72. doi : 10.1006/jcss.2002.1822 . S2CID 1991980 .
- Schmittou, Thomas; Schmittou, Faith E. (2002-08-01). "Límites óptimos para el problema del predecesor y problemas relacionados" . Journal of Computer and System Sciences . 65 (1): 38– 72. doi : 10.1006/jcss.2002.1822 .
Enlaces externos
- algoritmos de búsqueda en Internet
- Funciones de clasificación
- Algoritmos de búsqueda