查找
查找的基本概念
- 平均查找长度:
A
S
L
=
∑
i
=
1
n
P
i
C
i
ASL={\sum}_{i=1}^{n}P_i C_i
ASL=∑i=1nPiCi
- n n n为查找表的长度
- P i P_i Pi为查找第 i i i个元素的概率,一般认为每个元素查找概率相同
- C i C_i Ci是找到第 i i i个元素所需进行比较的次数
顺序查找
没什么
折半查找
基本思路:将给定的key值与表中间位置元素的关键字比较,若成功,则返回该元素的存储位置,若不等,则所需查找元素只能在中间元素以外的前半部分或者后半部分
int Binary_Search(SeqList L, ElemType key)
{
int low = 0, high = L.TableLen-1, mid;
while(low <= high)
{
mid = (low + high)/2;
if(L.elem[mid] == key)
return mid;
else if(L.elem[mid]>key)
high = mid-1;
else
low = mid +1;
}
return -1;
}
分块查找法(索引顺序查找)
思想:将查找表分为若干子块,块内元素可以无序也可以有序,但是块间有序(第一个块的元素最大关键字小于第二块的元素的最小关键字)
B树和B+树
- B树:多路平衡查找树,B树中的所有结点的还在结点树最大值称为B树的阶,通常用m表示。
- 注意插入和删除
散列表
- 散列函数构造方法:
- 直接定位法
- 除留余数法
- 数字分析法
- 平方取中法
- 折叠法
- 处理冲突方法:
- 开放定址法
- 线性探针法
- 平方探测法
- 再散列法
- 拉链发(链接法)
- 开放定址法
串
-
串的存储结构
- 顺序存储法
#define MAXLEN 255 typedef struct{ char ch[MAXLEN]; int Length; }SString;
- 块链存储表示
typedef struct{ char *ch; int length; }HString;
-
KMP算法是个问题!
这一章节的东西,其实都不难。但是还是要结合题目去刷