哈希表的平均查找长度是()的函数。
A.哈希表的长度
B.哈希表的装填因子
C.哈希函数
D.表中元素的多少
装填因子 = 关键字个数 / 表长
符号表:是 “名字(Name)–属性(Attribute)”对的集合
符号表也叫散列表(哈希表)
散列是一种重要的查找方法
它的基本思想是:以数据对象的关键字key为自变量,通过一个确定的函数关系h,计算出
对应的函数值h(key),把这个值解释为数据对象的存储地址,并按此存放,即“存储位置=h(key)”
散列方法中使用的计算函数称为**“散列函数/哈希函数”**
按这个思想构造的表称为散列表
散列函数的构造方法:
数字关键词的散列函数构造
- 直接定址法:h(key)=a*key+b
- 除留余数法:h(key)=key mod p
- 数字分析法
字符串关键词的散列函数构造
处理冲突的方法:
开放地址法
线性探测法
冲突发生时,顺序查看表中下一单元,直到找出一个空单元或查遍全表
二次探测法
冲突发生时,在表的左右进行跳跃式探测,比较灵活
采用开放定址法处理冲突中的二次探测再散列(也即是题目中的二元探测法),则哈希函数变为Hash(key) = (Hash(key) + d) % 11,其中d = 12, -12, 22, -22, 32,……,则开始计算。
分离链接法
其做法就是将散列到同一个值的所有元素保存到一个表中。
双散列探测方法
对于使用平方探测的开放定址散列法,当元素填得太满的时候,操作运行的时间将消耗过长,而且插入操作有可能失败,此时则可以进行一次再散列来解决这一问题。
再散列会创建一个新的散列表,新的散列表大小为大于原散列表大小2倍的第一个素数,随后将原散列表的值重新散列至新的散列表中。
假定有K个关键字互为同义词,若用线性探测法把这K个关键字存入散列表中,至少要进行多少次探测?
A.K−1
B.K
C.K+1
D.K(K+1)/2
从一个具有N个结点的单链表中查找其值等于X的结点时,在查找成功的情况下,需平均比较多少个结点?
A.N/2
B.N
C.(N−1)/2
D.(N+1)/2
由于单链表只能进行单向顺序查找,以从第一个节点开始查找为例,查找第m个节点需要比较的节点数f(m)=m,查找成功的最好情况是第一次就查找成功,只用比较1个节点,最坏情况则是最后才查找成功,需要比较n个节点。
所以一共有n种情况,平均下来需要比较的节点为(1+2+3+…+(n-1)+n)/n=(n+1)/2。
下面关于哈希查找的说法,不正确的是( )。
A.采用链地址法处理冲突时,查找一个元素的时间是相同的
B.采用链地址法处理冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的
C.用链地址法处理冲突,不会引起二次聚集现象
D.用链地址法处理冲突,适合表长不确定的情况