Tabla de contenido
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)
Encuentre secuencialmente el algoritmo mínimo final:
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:
Pregunta (1): [ST.R[mid].key]