数据结构随手笔记之哈希表
来源:互联网 发布:知之者 编辑:程序博客网 时间:2024/04/30 14:23
好记性不如烂笔头~
哈希表又名散列,能够在O(1)的预期内完成对字典的获取插入和删除操作。
哈希表hash table,记为ht,每个ht有b个桶,记为ht[1].....ht[b-1]。每个桶由s个槽组成,每个槽可以放置一条记录。
关键字为K 的一个记录的地址或位置由哈希函数h确定,h(k)为k的哈希地址。
定义:关键字密度n/t,n是哈系表中记录的数目,t是所有可能的关键字数目。
装填密度或者装填因子a为n/sb。
1.1 构造哈希表
构造哈希表的方法是:设要存储的数据元素个数为 n,设置一个长度为m(m≥n)的连续内存单元(即数组),分别以每个数据元素的关键字Ki(0≤i≤n-1)为自变量,以哈希函数h(Ki)值为该数据元素在数组中的下标值存储该数据元素。
//抄的http://blog.csdn.net/yigelangmandeshiren/article/details/8257012 写的很不错
1.2 哈希函数
要求是即容易计算又能够将冲突数目最小化
1.除留余数法。应用最广泛。
关键字是非负整数,通过模运算取得初始存储桶。
h(k)=k%D
D要取20以上的质数。这样分配是相当均匀的。
2.平方取中法
3.折叠法
4.数字分析法
数字分析法是取数据元素关键字中某些取值较均匀的数字位构造哈希函数的方法。它只适合于所有关键字值已知的情况。
1.3 溢出/冲突处理
最常用的有开放定址法和链地址法。
1.开放定址法
线性探测法:s=1;
1)计算h(k); 2)以 ht[ (h(k)+j)%b] 依次顺序找
均匀的哈希函数与现行探测同时使用,查询一个关键字的平均比较次数的期望是(2-a)/(2-2a). a是装填因子
2.链地址法
若有数字,每个桶指向链表的第一个节点。搜寻平均比较次数的期望是1+a/2。
无论什么方法,最坏情况下比较次数都是O(n).
- 数据结构随手笔记之哈希表
- 随手笔记之Effective C++
- 随手笔记之VC++(六)
- 随手笔记之VC++ (七)
- 随手笔记之VC++(三)
- 随手笔记之VC++(四)
- 随手笔记之VC++(五)
- 随手笔记之VC++(八)
- JAVA随手笔记一之图标按钮
- GMapping源码分析之随手笔记
- 随手笔记
- 随手笔记
- 随手笔记
- 随手笔记
- 随手笔记
- 随手笔记
- 随手笔记
- 随手笔记
- 贪吃蛇游戏
- Morgan Stanley Programming Constest 2014题目Free Fall
- ARM汇编--pc 跳转方法
- 网络存储学习之SAN
- 【算法】堆排序
- 数据结构随手笔记之哈希表
- 百度云推送
- 二维背包(hdu2159)
- hdu 1157 Who's in the Middle (水题,中位数)
- 解决jQuery引入多个库的冲突问题 jQuery.noConflict( [removeAll ] )
- 仿网易新闻客户端Tab标签Android 开源框架ViewPageIndicator 和 ViewPager
- TEST
- struts2如何实现页面分步骤滑动
- myeclipse 上安装 Maven3 插件 .