Python全系列 教程
3567个小节阅读:5930.6k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
若key(关键字)为n,则其值存放在 f(n) = n % size
的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f函数为哈希(散列)函数,按这个思想建立的表为哈希(散列)表
但对不同的关键字可能得到同一散列地址,即n1 ≠ n2,而f(n1)==f(n2),这种现象称为冲突
在设计哈希表的时候,最需要注意两个基本因素:一个是散列函数的编写,一个是键冲突解决算法
哈希表中元素的位置是由哈希函数确定的。将数据n作为自变量,通过一定的函数关系计算出的值,即为该元素的存储地址。
直接定址法
哈希地址 = 学生ID
数字分析法
平方取中法
哈希地址 = 取中位数字(平方(关键字))
折叠法
(12 + 34 + 56 + 78 + 90) % 表大小
哈希地址 = 组的数字之和(关键字) % 表大小
随机数法
除留余数数法(常用)
哈希地址 = 关键字 % 表大小
单独链表法(常用)
将具有同一散列地址的记录存储在一条线性链表中
开放定址法 $hash(key)+n \quad mod \quad len(table)$
双散列 $h_i(k) = (hash_1(k)+i*hash_2(k))$
使用第二个哈希函数来计算步长,以决定下一个探测的位置
再散列
当哈希表变得太满时,增加表的大小并重新散列已有的关键字,以减少冲突的可能性
建立一个公共溢出区
实时效果反馈
1. 关于哈希表,说法错误的是?
A 哈希表是通过key映射到表中一个位置来访问记录
B 设计哈希表基本之一为:哈希函数的编写
C 设计哈希表基本之一为:键冲突解决算法
D 哈希表可以存储重复数据
答案
1=>D