数据结构_06_查找

一、基本概念和一般方法

1. 基本概念
  1. 关键字、记录;
  2. 平均比较次数(平均查找长度)【ASL】:
    A S L = ∑ i = 0 n p i × c i ASL=\sum_{i=0}^{n}{p_i}\times c_i ASL=i=0npi×ci
    n n n 表示查找表中记录个数, p i p_i pi 表示查找第 i i i 个记录的概率, c i c_i ci 表示找到第 i i i 个记录所需的比较次数
2. 一般方法
  1. 顺序查找法: A S L 1 = ( n + 1 ) / 2 ASL_1=(n+1)/2 ASL1=(n+1)/2 A S L 2 = n ASL_2=n ASL2=n 【前者表示查找成功,后者表示查找失败】;
  2. 二分查找: T = O ( l o g 2 n ) T=O(log_2n) T=O(log2n) A S L = l o g 2 ( n + 1 ) − 1 ASL=log_2{(n+1)}-1 ASL=log2(n+1)1 A S L m a x = ⌊ l o g 2 n ⌋ + 1 ASL_{max}=\lfloor{log_2n}\rfloor+1 ASLmax=log2n+1
	int flag;	// 查找目标
	while(low<=high){
		mid = (low+high)/2;	// 也可使用 mid = low + (high-low)/2, 防止溢出
		if(A[mid] == flag)
			return mid;
		eles if(A[mid] < flag)
			low = mid + 1;
		else
			high = mid - 1;
  1. 分块查找:块与块之间保证关键字按大小有序排列,即前一块中的最大关键字要小于后一块中的最小关键字;然后先二分查找确定关键字所在块,再顺序查找确定关键字对应值;

二. 二叉树与散列表

1. 二叉树、B树
  1. 二叉查找树与平衡二叉树:数据结构_03_树
  2. B − B- B 树:B树和B+树的插入、删除图文详解B树、B+树、B*树
    2.1 B − B- B树中所有结点中孩子节点个数的最大值称为 B − B- B树的,通常用 m m m 表示,一般要求 m ≥ 3 m \geq 3 m3 (查找效率)
    2.2 每个结点最多有 m m m 个分支,最少分支数由根结点决定,若根结点不是叶子结点,则至少有两个分支,非根非叶结点至少有 ⌈ m / 2 ⌉ \lceil{m/2}\rceil m/2 个分支,
    2.3 有 n ( k ≤ n ≤ m ) n(k\leq n \leq m) n(knm) 个分支的结点有 n − 1 n-1 n1 个关键字,按递增(减)顺序排列, k = 2 k=2 k=2 k = ⌈ m / 2 ⌉ k=\lceil{m/2}\rceil k=m/2
    2.4 叶结点处于同一层;
  3. B + B+ B+树:
    3.1 n n n 个关键字的结点有 n n n 个分支,每个结点中的关键字个数 n n n 的范围为: ⌈ m / 2 ⌉ ≤ n ≤ m \lceil m/2 \rceil \leq n \leq m m/2nm,根节点的取值范围为: 2 ≤ n ≤ m 2\leq n \leq m 2nm
    3.2 在 B + B+ B+树中叶子结点包含信息,并且包含了全部关键字,叶结点引出的指针指向记录,而所有非叶结点仅为索引,不含该关键字对应记录的存储地址;
    3.3 在 B + B+ B+树上有一个指针指向关键字最小的叶结点,所有叶结点连接成一个线性表;

2. 哈希表
  1. 哈希函数、装填因子( a = n / m a=n/m a=n/m n n n 表示关键字个数, m m m 表示哈希表表长)
  2. 哈希函数构造方法:
    2.1 直接定址法: H ( k e y ) = a ⋅ k e y + b H(key)=a\cdot key+b H(key)=akey+b a , b a,b a,b 为常数;
    2.2 数学分析法;
    2.3 平方取中法;
    2.4 除留余数法: H ( k e y ) = k e y m o d p ( p ≤ m ) H(key)=key mod p (p\leq m) H(key)=keymodp(pm) p p p 一般取小于等于表长的最大素数;
  3. Hash冲突处理方法:
    3.1 开放定址法:线性探查法(堆积问题)、平方探查法;
    3.2 链地址法;
  4. 时间复杂度由表长决定,即 T = O ( 1 ) T=O(1) T=O(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值