基础算法(九) --- 哈希与哈希表
来源:互联网 发布:网络分销策略 编辑:程序博客网 时间:2024/05/02 01:12
哈希是可以达到快速存取的一种算法。俺接触到的利用哈希的地方基本都是通过关键字进行查询的,而且关键字都是比较复杂,比如说字符串,根据关键字比较非常繁琐耗时。这样的情况下,哈希就非常有作用了。
它的存放过程是怎样的呢?首先,通过哈希函数将复杂的关键字计算出一个哈希表元素的索引;然后将真正的关键字的实际位置信息,作为索引位置对应的元素值。如果存在冲突,就继续找下一个合适的位置存放。下一个合适的位置是怎么找的呢,实际上很多解决冲突的办法。比较常见的有两个方式,一个是将当前的索引值向前推进找到空余地址为止;另外一个是采用链表,哈希表元素实际上是个链表的头节点,跟它相同哈希值的节点,都挂在它的后面。
那么查询过程又是怎样的呢?首先,根据关键字利用哈希函数得到哈希表的元素位置,然后获取到一个关键字的实际信息,比较两个关键字是否一样,如果命中则成功,否则根据解决冲突的方式查找下一个关键字的实际信息并进行比较,直到找到或者到了哈希表的尽头。
哈希表的性能跟哈希表的大小以及哈希函数有关,网上有很多哈希函数的介绍,这里就不多啰嗦了,有兴趣可以直接问百度。
Example 1:
简单的校验码。网络传输数据的时候,数据可能会被篡改。为了安全起见,网络应用传输的数据如果很重要的话,发送方会根据一个哈希算法计算出校验码,并传递给接收方。接收方在接收到数据之后,利用相同的算法计算出哈希值,并跟接收到的校验码进行比较是否是正确的数据。
Example 2:
HTML解析引擎的元素ID获取实现。HTML的元素名基本已经很明确了,就是W3C定义的那些。在解析HTML文本数据的时候,直接比较元素名称而获取元素ID的话,则显得比较浪费。那么可以将元素名与元素ID作为一个结构保存到数组里,并根据元素名作为关键字生成一个哈希表。这样在解析到一个元素名而要去获取元素ID的时候,可以先用哈希函数快速定位到当前元素名的位置信息,从而也就获取到元素ID了。
它的存放过程是怎样的呢?首先,通过哈希函数将复杂的关键字计算出一个哈希表元素的索引;然后将真正的关键字的实际位置信息,作为索引位置对应的元素值。如果存在冲突,就继续找下一个合适的位置存放。下一个合适的位置是怎么找的呢,实际上很多解决冲突的办法。比较常见的有两个方式,一个是将当前的索引值向前推进找到空余地址为止;另外一个是采用链表,哈希表元素实际上是个链表的头节点,跟它相同哈希值的节点,都挂在它的后面。
那么查询过程又是怎样的呢?首先,根据关键字利用哈希函数得到哈希表的元素位置,然后获取到一个关键字的实际信息,比较两个关键字是否一样,如果命中则成功,否则根据解决冲突的方式查找下一个关键字的实际信息并进行比较,直到找到或者到了哈希表的尽头。
哈希表的性能跟哈希表的大小以及哈希函数有关,网上有很多哈希函数的介绍,这里就不多啰嗦了,有兴趣可以直接问百度。
Example 1:
简单的校验码。网络传输数据的时候,数据可能会被篡改。为了安全起见,网络应用传输的数据如果很重要的话,发送方会根据一个哈希算法计算出校验码,并传递给接收方。接收方在接收到数据之后,利用相同的算法计算出哈希值,并跟接收到的校验码进行比较是否是正确的数据。
Example 2:
HTML解析引擎的元素ID获取实现。HTML的元素名基本已经很明确了,就是W3C定义的那些。在解析HTML文本数据的时候,直接比较元素名称而获取元素ID的话,则显得比较浪费。那么可以将元素名与元素ID作为一个结构保存到数组里,并根据元素名作为关键字生成一个哈希表。这样在解析到一个元素名而要去获取元素ID的时候,可以先用哈希函数快速定位到当前元素名的位置信息,从而也就获取到元素ID了。
- 基础算法(九) --- 哈希与哈希表
- 基础算法系列(九)排序算法之计数排序
- 数据结构与算法(九)快排
- 签名与加密安全技术基础(一)------哈希算法
- SQL基础(一九)--- HAVING与LIMIT
- Oracle基础(九):数据备份与恢复、死锁等
- <Android 基础(九)> Ndk配置与Demo
- Swift基础(九)id兼容性与nil对象
- jquery基础(九)
- JAVASE基础(九)
- [数据结构]九大基础排序算法总结
- 相机模型与标定(九)--LM算法
- 九大基础排序总结与对比
- 九大基础排序总结与对比
- 九大基础排序总结与对比
- 九大基础排序总结与对比
- 九大基础排序总结与对比
- 九大基础排序总结与对比
- struts2学习小问题解决
- Inno Setup 编程技术全图文教程(转载)
- Speex 语音编解码算法概述
- warning maven-compiler-plugin is missing
- RMAN恢复案例之五
- 基础算法(九) --- 哈希与哈希表
- 在移动硬盘上安装centos5.8
- C语言之函数返回值的问题
- 研究人员称用Waze数据可有效阻止交通事故
- Android APN管理 (接入点管理)
- linux操作系统的特点
- 眼花缭乱:微软内部结构图,瞎了
- SSE指令
- C#中winform里的google地图定位