Estructura de datos y fundamentos de algoritmos (Wang Zhuo) (27) Búsqueda en tabla lineal (1): búsqueda secuencial (búsqueda lineal)

Tabla de contenido

Conceptos básicos básicos:

palabras clave:

Tabla de búsqueda: (estática dinámica)

A menudo se realizan varias operaciones en la tabla de búsqueda:

Encuentre los criterios de evaluación del algoritmo:

1. Búsqueda secuencial (búsqueda lineal)

Condiciones previas:

Primera forma: (regular)

Segunda forma:

Tercera forma:

Encuentre secuencialmente el algoritmo mínimo final:

Implementación de programa: 


Conceptos básicos básicos:

Mira esto, no necesitas darle la vuelta al PPT


Encontrar:

Según un valor dado, determine un elemento de datos (o registro) en la tabla de búsqueda cuya clave sea igual a un valor dado


palabras clave:

Se utiliza para representar el valor de un elemento de datos de un elemento de datos (o registro)

Clave primaria:

Una palabra clave que puede representar de forma única un registro [ejemplo (por ejemplo): número de boleto de admisión al examen]

Palabras clave secundarias:

Palabras clave utilizadas para identificar varios registros [Ejemplo (por ejemplo): el nombre es xx, la calificación es xx puntos...]


Tabla de búsqueda: (estática dinámica)

Una colección de elementos de datos (o registros) del mismo tipo. Debido a la escasa relación entre los elementos de datos de la colección, la tabla de búsqueda es una estructura conveniente

Tabla de búsqueda estática:

Tabla de búsqueda para operaciones de consulta y recuperación

Tabla de búsqueda dinámica:

Una tabla de búsqueda para operaciones de inserción y eliminación


A menudo se realizan varias operaciones en la tabla de búsqueda:

  • 1. Consultar si un elemento de datos específico está en la tabla de búsqueda
  • 2. Recuperar varios atributos de un elemento de datos específico
  • 3. Si el resultado de la consulta no existe, inserte un elemento de datos en la tabla de búsqueda
  • 4. Si el resultado de la consulta existe, elimine un elemento de datos en la tabla de búsqueda

Encuentre los criterios de evaluación del algoritmo:

El número promedio de comparaciones de palabras clave, también conocido como longitud de búsqueda promedio (ASL)


 Procedimiento de devolución:

1. Búsqueda secuencial (búsqueda lineal)


Condiciones previas:

#include<iostream>
using namespace std;

typedef int KeyType;
//数据元素类型定义
struct ElemType
{
    KeyType key;  //关键字域
    //...           //其他域
};

struct SSTable
    //Sequential Search Table
{
    ElemType* R;  //表基址
    int length;   //表长
};  
SSTable ST;  //定义顺序表ST

Primera forma: (regular)

  • Comparar elementos de adelante hacia atrás
  • Siempre que el elemento de la matriz apuntado sea el mismo que el elemento de destino que queremos, devolverá
int Search_Seq(SSTable ST, KeyType key)
//Seq:顺序
//此查找表为从1开始,0号位置为空,可按需更改
{
    //正序
    for (int i = 1; i <= ST.length; i++)
        if (ST.R[i].key == key)
            return i;
    return 0;

    //倒序
    /*
    for (int i = ST.length; i >= 1 ; i--)
        if (ST.R[i].key == key)
            return i;
    return 0;
    */
}

Segunda forma:

  • empezar desde el principio
  • Siempre que el elemento de la matriz apuntado sea diferente del elemento de destino que queremos
  • solo (siempre) sigue yendo hacia atrás que

En orden inverso, se invierte el orden de recorrido

int Search_Seq(SSTable ST, KeyType key)
{
    //正序
    int i;
    for (i = 1; ST.R[i].key != key; i++)
    {
        if (i >= ST.length)
            break;
    }
    if (i > 0)
        return i;
    else
        return 0;

    //倒序
    /*
    int i;
    for (i = ST.length; ST.R[i].key != key; i--)
        {
        if (i <= 0)
            break;
    }
    if (i > 0)
        return i;
    else
        return 0;
    */
}

Tercera forma:

int Search_Seq(SSTable ST, KeyType key)
{
    //正序
    int i;
    for (i = 1 ; ST.R[i].key != key && i <= ST.length; i++);
    return i;

    //倒序
    /*
    int i;
    for (i = ST.length; ST.R[i].key != key && i > 0; i--);
    return i;
    */
}

similar:

  • empezar desde el principio
  • Siempre que el elemento de la matriz apuntado sea diferente del elemento de destino que queremos y el puntero comparado no exceda la cola
  • solo (siempre) sigue yendo hacia atrás que

La segunda y tercera formas de pensamiento no son fundamentalmente diferentes de la primera.

Es solo que la segunda y la tercera forma colocan la desigualdad en el siguiente ciclo y la colocan en la declaración de juicio del ciclo.

El bucle for no ejecuta la instrucción


Encuentre secuencialmente el algoritmo mínimo final:

Problemas (deficiencias) del algoritmo anterior:

Cada ciclo requiere dos comparaciones.

Entonces, ¿cómo lo mejoramos para que solo necesitemos hacer una comparación por ciclo en lugar de dos   ?

Funcionamiento mejorado:

Guarde la clave de palabra clave que se verificará en el encabezado de la tabla (puesto de vigilancia/vigilancia) y compárela una por una de atrás hacia adelante

Principio del método:

Elimine el paso de verificar si la búsqueda está completa en cada paso del proceso de búsqueda

Y se garantiza que la función tendrá un resultado de retorno final sin importar qué

Implementación de programa: 

int Search_Seq(SSTable ST, KeyType key)
{
    //正序
    ST.R[0].key = key;
    int i;
    for (i = 1; ST.R[i].key != key; i++);
    return i;

    //倒序
    /*
    ST.R[0].key = key;
    int i;
    for (i = ST.length; ST.R[i].key != key; i--);
    return i;
    */
}

Cuando ST.lenath es grande, esta mejora puede reducir casi a la mitad el tiempo promedio requerido para realizar una búsqueda.

Complejidad de tiempo y espacio: (sin contar centinelas)

Complejidad temporal O(n), complejidad espacial O(1), ASL=(n+1)/2


Adicionalmente, hay un

Para obtener detalles sobre disputas sobre el uso de [ST.R[ ]], consulte:

Fundamentos de estructura de datos y algoritmos (Wang Zhuo) (26) Búsqueda de tablas lineales (2): Búsqueda secuencial (búsqueda binaria, búsqueda de bloques)

Pregunta (1): [ST.R[mid].key]

Supongo que te gusta

Origin blog.csdn.net/Zz_zzzzzzz__/article/details/130084277
Recomendado
Clasificación