哈希表

哈希表

直接寻址表

img

通过键值对存储数据(key,value)

U为key的域:即key可能出现的所有值

K为key的值:如我们想存储键值对的key值为2,3,5,8

存储方式:将键值对(2,value)。。。插入对应的T中,查找删除时,直接根据key值查找删除,时间复杂度为O(1)

优点

  1. 时间复杂度低
  2. 查找删除简单

缺点

  1. 当U很大而K很小时,占用大量内存且大量空间被浪费

  2. 无法处理关键字为非数字的情况

哈希表

​ 由一个哈希函数h(key)和一个直接寻址表组成,哈希函数对键值对(key,value)中的key进行处理,通过h(key)可以得到对应的下标。

如:一个长度为7的哈希表,存储的键值对为(7,14)(5,12)(9,100),哈希函数为h(key)=key%7,处理后得到(7,14)存储在表中的第一个位置,(5,12)存储在表中的第六个位置,(9,100)存储在表中的第四个位置

缺点(哈希冲突)

当h(key)返回的值重复时,如7%7=0,14%7=0,会发生哈希冲突,两个数都应该存在第一个位置

哈希冲突的解决方式

开放寻址法

当发生哈希冲突时,将第二个值向后探查,存储到空的位置中,如7%7=0,14%7=0,若第二个位置为空,则放置14在第二个位置上

拉链法

寻址表中存储的不再是一个值,而是一个链表,解决冲突问题

posted @ 2021-02-05 10:14  2月2日  阅读(96)  评论(0)    收藏  举报