¿Qué son los algoritmos de clasificación y búsqueda?

Los algoritmos de clasificación y búsqueda son exactamente e intuitivamente lo que dicen que son. Hay un montón de algoritmos de clasificación diferentes: clasificación por inserción, clasificación por fusión, clasificación por burbujas, etc. Esencialmente clasifican una serie de elementos potencialmente desordenados (por ejemplo, como en una lista) en alguna noción de orden (por ejemplo, alfabético, numérico o alguna definición arbitraria de otro tipo de pedido). Por ejemplo, como ejemplo en un pseudocódigo aproximado de estilo ocaml:

clasificador rec (x: lista de enteros): lista de enteros =
si x = [], entonces []
de lo contrario si x = element1 :: element2 :: rest_of_list,
entonces si element1 <= element2, element1 :: sorter (element2 :: rest_of_list)
else element2 :: sorter (element1 :: rest_of_list)

Lo anterior es en realidad una iteración de clasificación de burbujas (donde el número más grande en una iteración dada ‘burbujea’ hasta el final). Como puede ver, esto no es * eficiente *, ya que necesitaría hacer varios pases para asegurarse de que la lista esté completamente ordenada. Se pueden lograr algoritmos de clasificación más eficientes con, por ejemplo, montones binarios.

En cuanto a la búsqueda, probablemente hayas oído hablar de la búsqueda binaria. Esto funciona si algo ya está ordenado. Como pseudocódigo de estilo pseudo-python aproximado con una función recursiva:

rec binary_search (x: lista entera) (n: elemento): bool
si x [middle_of_list] = n entonces verdadero
más si x [middle_of_list] <n entonces binary_search (firsthalfof_x) (n)
else binary_search (secondhalfof_x) (n)

También hay otros algoritmos de búsqueda. Casi cualquier buen algoritmo se basa en la idea de ‘divide y vencerás’. También puede buscar ingenuamente a través de cada elemento de una matriz o lista u otra estructura de datos y verificar si el elemento es el elemento de interés, [math] n [/ math].

Antes de que su pregunta original se fusionara con otra, era ambigua porque él y sus etiquetas podían leerse en términos de motores de búsqueda o algoritmos de búsqueda. Los siguientes párrafos definen ambas alternativas.

Para considerar primero los motores de búsqueda, utilizando la definición dada en Cómo funcionan los motores de búsqueda de Internet:

“Los motores de búsqueda en Internet son sitios especiales en la Web diseñados para ayudar a las personas a encontrar información almacenada en otros sitios. Existen diferencias en la forma en que funcionan varios motores de búsqueda, pero todos realizan tres tareas básicas:

  • Buscan en Internet, o seleccionan piezas de Internet, basándose en palabras importantes.
  • Mantienen un índice de las palabras que encuentran y dónde las encuentran.
  • Permiten a los usuarios buscar palabras o combinaciones de palabras encontradas en ese índice.

Los primeros motores de búsqueda tenían un índice de unos cientos de miles de páginas y documentos, y recibían tal vez una o dos mil consultas por día. Hoy, un motor de búsqueda superior indexará cientos de millones de páginas y responderá a decenas de millones de consultas por día. En este artículo, le diremos cómo se realizan estas tareas principales y cómo los motores de búsqueda de Internet reúnen las piezas para permitirle encontrar la información que necesita en la Web “.

Para algoritmos de búsqueda, ¿Qué es un algoritmo de búsqueda? – La definición de Techopedia proporciona una buena descripción:

“Un algoritmo de búsqueda es el procedimiento paso a paso que se utiliza para localizar datos específicos entre una colección de datos. Se considera un procedimiento fundamental en informática. En informática, cuando se buscan datos, la diferencia entre una aplicación rápida y una más lenta a menudo radica en el uso del algoritmo de búsqueda adecuado.

Todos los algoritmos de búsqueda utilizan una clave de búsqueda para continuar con el procedimiento. Se espera que los algoritmos de búsqueda devuelvan un estado de éxito o error, generalmente denotado por booleano verdadero / falso. Hay diferentes algoritmos de búsqueda disponibles, y el rendimiento y la eficiencia de los mismos dependen de los datos y de la forma en que se utilizan.

Un algoritmo de búsqueda lineal se considera el más básico de todos los algoritmos de búsqueda. Quizás lo mejor sea la búsqueda binaria. Existen otros algoritmos de búsqueda, como el algoritmo de búsqueda de profundidad primero, el algoritmo de amplitud primero, etc. La eficiencia de un algoritmo de búsqueda se mide por el número de veces que se realiza una comparación de la clave de búsqueda en el peor de los casos. La notación utilizada en los algoritmos de búsqueda es O ( n ), donde n es el número de comparaciones realizadas. Da la idea del límite superior asintótico del tiempo de ejecución requerido para el algoritmo con respecto a una condición dada.

Los casos de búsqueda en algoritmos de búsqueda se pueden clasificar como el mejor caso, el caso promedio y el peor caso. En algunos algoritmos, los tres casos pueden ser asintóticamente iguales, mientras que en algunos otros podría haber una gran diferencia. El comportamiento promedio del algoritmo de búsqueda ayuda a determinar la utilidad del algoritmo “.

Se me ocurren múltiples respuestas posibles:

  • Un algoritmo de búsqueda de gráficos, como Profund First Search o Breadth First Search. Estos se utilizan para visitar los nodos un gráfico en un orden específico.
  • Un algoritmo de búsqueda de ruta de gráfico, como Dijkstra o A *. Estos se utilizan para calcular la ruta más corta entre dos nodos en un gráfico, teniendo en cuenta el costo de los bordes entre los nodos. Esto se puede usar de manera más abstracta que simplemente encontrar el camino más corto entre dos puntos en un mapa. Por ejemplo, se puede utilizar para encontrar la forma más rápida de resolver un rompecabezas de fichas N, o incluso movimientos de ajedrez en ciertos casos.
  • Una base de datos o un algoritmo de búsqueda de documentos en red, como los que usan los motores de búsqueda. Estos pueden ser muy complicados y pueden manejar coincidencias no exactas. Los ejemplos de código abierto incluyen Elastic Search.