索引|查找|数据结构|C++

1.索引1.1概述1.2检索未排序和已排序的数组1.3自组织线性表1.4集合检索1.5散列方法2.索引技术2.1线性索引2.2ISAM2.3基于树的索引2.4 2-3树2.5 B树
摘要由CSDN通过智能技术生成

1.检索

1.1概述

1.1.1定义

文字描述:
试图在一组记录中找到具有某个关键码值的记录,或者找到关键码值符合某些条件的一些记录,例如关键码值在某个值的范围内。
形式化定义
假定有一个包含n条记录的集合L,形式如下:
(K1,L2),(K2,L2),(K3,L3),…,(Kn,Ln)
其中Lj 是与关键码值Kj相关联的信息,1≤j≤n。给定某个关键码值K,检索问题就是在C中定位记录(Ki,Li),使得KI=K。检索为题就是定位关键码值Kj=K的记录的系统化方法

1.1.2分类

检索分类

  • 精确匹配检索
  • 范围查找检索

检索算法分类

  • 顺序表和线性表方法
  • 根据关键码值直接访问方法(散列法)
  • 树索引方法

1.1.3适用范围

  • 线性表:大多数适用于序列
  • 线性表、自组织线性表、集合检索:存储在RAM中的一组记录
  • 散列:记录存储在RAM或磁盘中
  • 基于树(B树):存储在磁盘的大量记录
    注:散列方法只能用于精确匹配查询,而且一般只有在关键码值不允许重复的情况下适用
    当散列方法不合适,基于动态磁盘的应用程序就可以选择B树方法。

1.2检索未排序和已排序的数组

1.2.1未排序

顺序检索算法
Θ(n)

1.2.2已排序

1.2.2.1跳跃检索
1.2.2.2字典检索
1.2.2.3二次二分检索

1.3自组织线性表

1.4集合检索

1.5散列方法

1.5.1基本概念

概念 定义
散列 根据关键码值直接访问表。通过一些计算,把关键码值映射到数组中的位置来访问记录
散列函数 把关键码值映射到位置的函数,h
散列表 存放记录的数组,HT
槽slot 散列表的一个位置
冲突collision 对于一个散列函数h和两个关键码值k1,k2,如果h(k1)=β=h(k2),其中β是表中的一个槽,那么就说k1和k2对于β在散列函数h下有冲突

适用范围

  • 不适用于允许多条记录有相同关键码值的应用程序。
  • 不适用于范围检索
  • 适用于基于主存的检索,适合基于磁盘的检索。
  • 组织存储在磁盘上的大型数据库的两种方法:散列表、B树

散列表查找过程

  1. 计算表的位置h(K)
  2. 从槽h(K)开始,使用(如果需要)** 冲突解决策略(collision resolution policy)** 找到包含关键码值的记录

1.5.2散列函数

  • (1)直接定址法:
    取关键字或关键字的某个线性函数值为哈希地址:H(key) = key 或 H(key) = a·key + b
    其中a和b为常数,这种哈希函数叫做自身函数。

注意:由于直接定址所得地址集合和关键字集合的大小相同。因此,对于不同的关键字不会发生冲突。但实际中能使用这种哈希函数的情况很少。

  • (2)相乘取整法:
    首先用关键字key乘上某个常数A(0 <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值