查找

Posted sanweizuiji

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找相关的知识,希望对你有一定的参考价值。

1 查找

在数据集合中寻找满足某种条件的数据元素的过程称为查找

查找长度——在查找运算中,需要对比关键字的次数称为查找长度

平均查找长度(ASL, Average Search Length)——所有查找过程中进行关键字的比较次数的平均值

2 顺序查找法

例 顺序查找法适合于存储结构为(顺序存储或链式存储)的线性表

3 折半查找法

例 对线性表进行折半查找时,要求线性表必须(以顺序方式存储,且结点按关键宇有序排列)

4 散列(Hash)技术(在各种查找方法中,平均查找长度与结点个数 n 无关的查找方法是散列查找法)

4.1 散列函数

除留余数法

H(key) = key % p

散列表表长为m,取一个不大于m但最接近或等于m的质数p(质数又称素数。指除了1和此整数自身外,不能被其他自然数整除的数)

用质数取模.分布更均匀,冲突更少

直接定址法

H(key) = key 或 H(key) = a*key + b

其中,a和b是常数。这种方法计算最简单,且不会产生冲突。它适合关键字的分布基本连续的情况,若关键字分布不连续,空位较多,则会造成存储空间的浪费。

4.2 散列表

散列法存储的思想是由关键字值决定数据的存储地址

4.3 散列冲突的发生及其解决方法(散列表的查找效率主要取决于散列表构造时选取的散列函数和处理冲突的方法)

拉链法(又称链接法、链地址法)把所有“同义词”存储在一个链表中

开放定址法(是指可存放新表项的空闲地址既向它的同义词表项开放,又向它的非同义词表项开放)

数学递推公式为

再散列法

4.4 负载因子(负载因子是散列表的一个重要参数,它反映了散列表的饱满程度)

装填因子a=表中记录数/散列表长度

以上是关于查找的主要内容,如果未能解决你的问题,请参考以下文章

hash算法解决冲突的方案

查找算法整理

Scala练习-哈希查找

查找技术

室友竟只在2021的最后一天就学会了哈希表

查找技术(21.12)