¿Cuáles son las aplicaciones de los diferentes métodos de búsqueda en la estructura de datos?

La búsqueda se puede hacer en estructuras de datos internas o en estructuras de datos externas. La recuperación de información en el formato requerido es la actividad central en todas las aplicaciones informáticas. Esto implica buscar. Este bloque trata sobre técnicas de búsqueda. Los métodos de búsqueda están diseñados para aprovechar la organización de archivos y optimizar la búsqueda de un registro en particular o para establecer su ausencia. La organización de archivos y el método de búsqueda elegido pueden marcar una diferencia sustancial en el rendimiento de una aplicación.

Para buscar un elemento en una matriz dada, se puede hacer de las siguientes maneras:

1. Búsqueda lineal

Comience al principio de la lista y verifique cada elemento de la lista. Muy lento [orden O (n)] pero funciona en una lista sin ordenar.

Algoritmo de búsqueda lineal

Esto representa el algoritmo para buscar una lista de valores para encontrar el requerido.

ENTRADA: Lista de tamaño N. Valor objetivo T
SALIDA: Posición de T en la lista I
EMPEZAR

1. Establezca ENCONTRADO en falso
Establecer I a 0

2. Mientras (I <= N) y (ENCONTRADO es falso)
Si la lista [I] = T
ENCONTRADO = verdadero
Más
I = I + 1
FIN

3. Si ENCONTRADO es falso
T no está presente en la lista.
FIN

Análisis de búsqueda lineal

Ya sea que la búsqueda secuencial se lleve a cabo en listas implementadas como matrices o listas vinculadas o en archivos, la parte fundamental del rendimiento es el paso 2 del bucle de comparación. Obviamente, cuanto menor sea el número de comparaciones, antes terminará el algoritmo.

La menor cantidad posible de comparaciones = 1. Cuando el elemento requerido es el primer elemento de la lista. Las comparaciones máximas = N cuando el elemento requerido es el último elemento de la lista. Por lo tanto, si el elemento requerido está en la posición I en la lista, se requieren comparaciones. Por lo tanto, el número promedio de comparaciones realizadas por búsqueda secuencial es (N + 1) / 2

La búsqueda secuencial es fácil de escribir y eficiente para listas cortas. No requiere datos ordenados. Sin embargo, es desastroso para largas listas. No hay forma de establecer rápidamente que el elemento requerido no está en la lista o de encontrar todas las ocurrencias de un elemento requerido en un solo lugar. Podemos superar estas deficiencias con la búsqueda binaria.

Ejemplo 1. Programa para buscar un artículo usando la búsqueda lineal.

#include

/ * Buscar clave en la lista * /
int seq_search (clave int, int a [], int n)
{
Int I;
para (i = 0; i <n; i ++)
{
Si (una tecla [i] ==) devuelve i + 1
}
devuelve 0;
}

vacío principal()
{
int I, n, clave, pos, a [20];
printf (“Ingrese el valor de n”);
scanf (“% d”, & n);
printf (“Ingrese n valoresn”);
para (i = 0; i <n; i ++)
scanf (“% d”, y a [i]);

printf (“Ingrese el elemento a buscar”);
scanf (“% d”, & clave);

pos = seq_search (clave, n, a);
si (pos == 0)
printf (“Búsqueda n incorrecta”);
más
printf (“clave encontrada en la posición =% d n”, pos);
}

Ejemplo 2 . con implementación

Para buscar el elemento 5, irá paso a paso en un orden de secuencia.

función findIndex (valores, objetivo)
{
para (var i = 0; i <valores.length; ++ i)
{
if (valores [i] == objetivo)
{
volver i;
}
}
volver -1;
}
// llama a la función findIndex con matriz y número a buscar
findIndex ([8, 2, 6, 3, 5], 5);

2. Búsqueda binaria

Esto se utiliza para buscar en una matriz ordenada. Prueba el elemento del medio de la matriz. Si es muy grande Repita el proceso en la mitad izquierda de la matriz y la mitad derecha si es demasiado pequeño. De esta manera, la cantidad de espacio que debe buscarse se reduce a la mitad cada vez, por lo que el tiempo es O (log n).

Ejemplo 1. Busque la página número 6 en un libro de 20 páginas

Un ejemplo típico de búsqueda binaria es buscar una página en un libro. Supongamos que estaba buscando la página 6 en el libro de 20 páginas. Primero lo abrirías al azar hacia la mitad posterior del libro. Si la página es menor que 6, se abriría en una página a la derecha, es mayor que 6 que se abriría en una página a la izquierda, repitiendo el proceso hasta que se encuentre la página 6. Como puede ver, en la primera búsqueda instintiva, redujo drásticamente el número de páginas para buscar.

En el ejemplo anterior, tenemos una lista ordenada de tamaño 20. La primera comparación es con el elemento medio Página número 10. Esto elimina los últimos 10 elementos, ya que la página 6 es menor que 10. La segunda comparación es con el elemento medio de Página 1 a página 10, es decir, con la página 5. Esto elimina la página 1 a la página 5, ya que la página 6 es mayor que la página 5. Esto continúa hasta que se encuentre la página 6. Ahora formulemos el algoritmo para la búsqueda binaria.

Algoritmo de Búsqueda Binaria

Esto representa el método de búsqueda binaria para encontrar un elemento requerido en una lista ordenada en orden creciente.

ENTRADA: LISTA ordenada de tamaño N, Valor objetivo T
SALIDA: Posición de T en la LISTA = I
EMPEZAR

1. MAX = N
MIN = 1
ENCONTRADO = falso

2. MIENTRAS (ENCONTRADO es falso) y (MAX> = MIN)
2.1 MID = (MAX + MIN) DIV 2
2.2 Si T = LISTA [MEDIO]
I = MEDIO
ENCONTRADO = verdadero
De lo contrario si T <LISTA [MEDIO]
MAX = MID-1
Más
MIN = MD + 1
FIN

Análisis de búsqueda binaria

El método de búsqueda binaria no necesita; más de [Iog2n] + 1 comparaciones. Esto implica que para una matriz de un millón de entradas, solo se necesitarán unas veinte comparaciones. Compare esto con el caso de búsqueda secuencial que en promedio necesitará (n + 1) / 2 comparaciones.

En el método de búsqueda binaria que se acaba de describir, siempre es la clave en el medio de la lista que se está examinando actualmente la que se utiliza para la comparación. La división de la lista se puede ilustrar a través de un árbol de decisión binario en el que el valor de un nodo es el índice de la clave que se está probando.

Supongamos que hay 31 registros, entonces la primera clave comparada está en la ubicación 16 de la lista ya que (1 + 31) / 2 = 16. Si la clave es menor que la clave en la ubicación 16, la ubicación 8 se prueba desde (1 + 15 ) / 2 = 8; o si la clave es menor que la clave en la ubicación 16, entonces la ubicación 24 se prueba.

Ejemplo-2. Programa para buscar un artículo usando la Búsqueda Binaria

#include

int main ()
{
int c, first, last, middle, n, search, array [100];

printf (“Ingrese el número de elementos \ n”);
scanf (“% d”, & n);

printf (“Ingrese% d enteros \ n”, n);

para (c = 0; c <n; c ++)
scanf (“% d”, & array [c]);

printf (“Ingrese el valor para encontrar \ n”);
scanf (“% d”, & búsqueda);

primero = 0;
último = n – 1;
medio = (primero + último) / 2;

while (primero <= último)
{
if (matriz [medio] <búsqueda)
primero = medio + 1;
si no (matriz [medio] == búsqueda)
{
printf (“% d encontrado en la ubicación% d. \ n”, búsqueda, medio + 1);
rotura;
}
más
último = medio – 1;

medio = (primero + último) / 2;
}
if (primero> último)
printf (“¡No encontrado!% d no está presente en la lista. \ n”, buscar);

devuelve 0;
}

Ejemplo-3. con implementación

Para buscar un elemento 13 de la matriz o lista ordenada.

función findIndex (valores, objetivo)
{
return binarySearch (valores, objetivo, 0, valores.length – 1);
};

función binarySearch (valores, objetivo, inicio, fin) {
if (inicio> fin) {return -1; } //no existe

var middle = Math.floor ((inicio + fin) / 2);
valor var = valores [medio];

if (value> target) {return binarySearch (valores, target, start, middle-1); }
if (value <target) {return binarySearch (valores, target, middle + 1, end); }
volver medio; //¡encontró!
}

findIndex ([2, 4, 7, 9, 13, 15], 13);

En la lógica del programa anterior, primero estamos comparando el número medio de la lista, con el objetivo, si coincide, devolvemos. Si no es así, vemos si el número del medio es mayor o menor que el objetivo.

Si el número del medio es mayor que el objetivo, comenzamos la búsqueda binaria nuevamente, pero esta vez en la mitad izquierda de la lista, es decir, desde el comienzo de la lista hasta el medio, no más allá de eso.

Si el número del medio es más pequeño que el objetivo, comenzamos la búsqueda binaria nuevamente, pero en la mitad derecha de la lista, es decir, desde el medio de la lista hasta el final de la lista.

3. Búsqueda de hash

Buscar una tabla hash es fácil y extremadamente rápido, solo encuentre el valor hash para el elemento que está buscando, luego vaya a ese índice y comience a buscar en la matriz hasta que encuentre lo que está buscando o llegue a un punto en blanco. El orden es bastante cercano a o (1), dependiendo de cuán llena esté su tabla hash.

4. Búsqueda de árbol binario

Buscar en un árbol binario es tan fácil como buscar en una tabla hash, pero generalmente es más lento (especialmente si el árbol está muy desequilibrado). Solo comienza en la raíz. Luego baje el subárbol izquierdo si la raíz es demasiado grande y el subárbol derecho si es demasiado pequeño. Repita hasta que encuentre lo que desea o el subárbol que desea no está allí. El tiempo de ejecución es O (log n) en promedio y O (n) en el peor de los casos.

Según mi experiencia, todos los que usan teléfonos inteligentes o computadoras se encuentran con la operación de buscar (buscar en MS Word) o buscar.

Si se trata de sitios web de compras como Amazon, flipkart, etc., buscamos el producto. Incluso en la guía telefónica buscamos los números de contacto,

Cualquier operación de búsqueda que encuentre en cualquier lugar, implica búsqueda lineal o búsqueda binaria.

El tipo de algoritmo de búsqueda que utiliza depende en gran medida de la estructura de datos que está utilizando. Tratemos de entender esto usando un ejemplo simple. Supongamos que tenemos una matriz ordenada, simplemente podemos usar una búsqueda binaria. ¿Qué sucede si la matriz no está ordenada? Solo puede usar la búsqueda lineal. Pasemos ahora a la lista de enlaces. La única opción es usar la búsqueda lineal. ¿Qué pasa con el árbol binario? La única opción es lineal. ¿Qué pasa con el árbol de búsqueda binario? Ans depende de si el árbol está equilibrado o no. En caso de equilibrado, es logn ya que se reduce al algo de búsqueda binaria, pero para desequilibrado, sigue siendo el caso O (n) funciona. Entonces, la estructura de datos que usamos y el algoritmo de clasificación que usamos están relacionados con un nivel mucho más profundo de lo que pensamos. Espero eso ayude. feliz codificación … 🙂

Mi búsqueda secuencial puede mostrar la última página de una multa de 89 MB en 8 segundos. Más de 2 millones de líneas leídas dos veces.

Lee el archivo una vez que cuenta el número de líneas y luego lo lee por segunda vez con la pantalla comenzando aproximadamente 30 líneas desde el final del archivo.

Al agregar notas al final de un archivo secuencial, es casi instantáneo

Secuencial se presta al azar. Sin azar no tienes nada.

Se utilizan diferentes métodos de búsqueda para una declaración de problemas en tiempo real eficaz y que ahorre tiempo

por ejemplo, si tiene datos aleatorios, puede aplicar una búsqueda aleatoria, pero si ha ordenado datos, si aplica una búsqueda binaria, reducirá aproximadamente la mitad de su tiempo de ejecución. entonces aplique de acuerdo a su reclutamiento.

More Interesting

¿Cómo funciona un algoritmo?

Cómo resolver http://www.spoj.com/problems/SAMER08A/ usando el algoritmo de Dijkstra

Sin el uso de un generador de números aleatorios, ¿cuál es el método más complicado que se te ocurre para generar una serie de números enteros?

¿Cuál es el algoritmo para resolver el cubo de Rubik solo para la última esquina?

Cómo hacer un software de árbol de decisiones más interactivo

¿Cuáles son algunos algoritmos utilizados por las grandes empresas (como Amazon) para determinar de manera eficiente desde qué almacén se debe cumplir un pedido?

¿Cuáles son algunas de las mejores grandes empresas y startups para trabajar en Silicon Valley si te apasionan los algoritmos y la codificación?

¿Por qué la notación O grande no se parece más a O (c) y O (cn) en lugar de a O (1) y O (n), esto último no tiene sentido?

Supongamos que tenemos el recorrido de preorden de un árbol de expresión. ¿El árbol que creamos con este recorrido es único?

¿El algoritmo codicioso siempre resuelve el problema de cobertura de subconjunto?

¿Qué estrategia debo usar para resolver esta pregunta? - HackerEarth | Iniciar sesión (Equipo del proyecto | HackerEarth)

¿Qué algoritmo se puede usar para la predicción de pasajes aéreos?

¿Cuáles son los ejemplos de implementación de algoritmos de clasificación en Android?

¿Cuántas veces se realiza la comparación [código] i> = n [/ código] en el siguiente programa? [código] int i = 200, n = 110; main () {while (i> = n) {i = i-1; n = n + 1;}} [/ código]

¿Cuál es el algoritmo para resolver el buscaminas?