哈希表(hash)

C++ hash

STL c++ hash_table 分析

简介

  • 由索引到值的数据结构(data structure that maps keys to values)
  • 直接映射,需要很大的空间。空间的利用率不高,为了将某一元素映射到一个“大小可以接受之索引”,这样的函数为hash function(散列函数或者哈希函数)。通常的哈希函数为取模。

哈希函数(hash function)

h(key) => hash table index

好的哈希函数特点

  • 易于计算
  • 分布均匀(Reduce chance of collision)
    • different keys should ideally map to different indices
    • distribute keys uniformly over table

复杂度(complexity)

  • 最好情况O(1)查找
  • 最坏情况O(N)发生了冲突(collisions)

对于string类型哈希函数的设计

  • 简单的ASCII码值相加,隐患很大
  • 使用前三个字符,以27为基,计算key值
  • 使用所有字符,以比字符个数大的质数为基。26个字母,则选择,29,31,37

解决冲突的办法

  • 分离链路(Chaining):在哈希表索引同样的地方,以链表的形式存储value
  • 开放地址(Open addressing):
  • 二次哈希(double hash)

Reference

hash代码实现

usc课件

cis课件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值