【数据结构与算法】哈希表(散列表)问题

哈希表(散列表)

​ 哈希法牺牲空间换取了时间,因为要使用额外的数组、set 或者 map 来存放数据,才能实现快速的查找;

  • 常见的哈希结构:数组、集合、映射

哈希结构的选取

数据结构特点
数组长度有限,便于查询但不擅长插入;
如果元素过少,哈希值太大会造成内存的浪费;
set (集合)内部元素只能是一个key
map(映射)<key, value>结构,可分别保存键值和对应数据

求解算法题时,应先分析题目后选择具体哪种哈希结构;进一步选择是需要:

  • 一般的容器即可?(map、set);
  • 还是无序列但是效率更高的?(unordered_map、unordered_set);
  • 或是可存放重复值?(multimap、multiset);
  1. 哈希法作用原理
  • 根据关键码的值直接访问数据;(数组就是哈希表结构,其中关键码就是索引下标)
  1. 哈希法主要解决什么问题?
  • 一般用来快速判断一个元素是否出现在集合中;
  1. 数据是怎样和关键值相匹配的?
  • 哈希函数(散列函数)将数据直接映射到哈希表上的索引,(例:hashCode 可以通过特定编码方式将其他数据格式转化为不同的数值,进一步其他格式的数据可以映射到哈希表上的索引数字)
  1. 映射过程中为什么会有哈希碰撞问题?
  • 如果数据规模大于哈希表的大小,可能救会出现多个不同的数据都映射到了索引的同一位置,此现象称为“哈希碰撞”;
  1. 如何解决哈希碰撞问题?
  • (1)拉链法:在冲突发生的索引位置引出一个链表,将冲突元素都存储在此处链表中;(既不会因为数组空值而浪费大量内存,也不会因为链表太长而在查找上浪费时间)
  • (2)线性探测法:前提要保证哈希表大于数据规模,将要发生冲突的元素存放在空位中;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值