[MIT6.006] 10. Open Addressing, Cryptographic Hashing 开放定址,加密哈希
前几节课讲散列表的时候,我们需要用Chaining,链接法需要用到指针pointer,但有一种方法可以不要Chaining和指针,还能在发生冲突时,为产生冲突的关键字寻找下一个“空”的Hash地址。这种方法叫:开放定址法(Open Addressing)如下图所示:
在开放定址法中,用到探测法(Probing),它是让Hash函数指定slot的顺序去进行关键字key的探索,从而进行插入/查找/删除操作。简单来说,上图的例子就能看懂probing的运作机制了。为了方便确认slot是否已有关键字占用,为每个slot定义个flag,如果无占用就是None。
下面我们看下在开放定址下,它是如何进行插入/查找/删除操作:
对上图翻译如下:
- 插入(k,v):一直探测,直到一个空的slot出现,然后插入进去。注:k为要插入的数,v为散列表尝试插入的次数。
- 查找(k):只要slot上的关键字不等于k,则不断探测下去,直到遇到key=k的情况(返回:成功),或者遇到空slot(返回:失败)。
- 删除:删除简单来说就先用上面查找方式找到待删除k的位置,然后删除即可。但是如果散列表第1个slot就是空slot,那么查找(k)会返回失败的结果,然后实际上并不一定是对的,上图列子可以说明这一点。比如我先删除了586,之后要删496,散列表第1个位置上slot为空,则返回失败,这是不对的,因为496在散列表第3个位置上。这个时候为了解决这个问题,就加入了DeleteMe flag,如果第一个位置上586被删除了,则设DeleteMe != None,当要删496时,碰到DeleteMe != None时,跳过该位置,继续向下探测。需要注意的是,对于插入来说 DeleteMe和None没什么区别,只要为空就可以插入。
探测方法有几种,本课就讲了两种:线性探测法(Linear Probing)和再散列法(Double Hashing Probing)。
首先,如下图,线性探测法的散列函数为:h(k, i) = (h'(k) + i) mod m (其中h'(k)为正常的散列函数)。但这种方法有个弊端:线性探测法可能使第i个散列地址的同义词存入第i+1个散列地址,这样原本应存入第i+1个散列地址的元素就争夺第i+2个散列地址,从而造成大量元素在相邻的散列地址上“聚集”起来,减低了查找效率。
为了解决线性探测的聚集问题,可以使用再散列法,它的公式为:h(k, i) = (h1(k) + i * h2(k)) mod m(其中h1(k)和h2(k)两种不同的普通散列函数)。
课程的最后提到Uniform Hashing Assumption,如下图所示,具体的cost of operation instert作者没有讲的太细,所以我这边也没太看明白。而最后作者提到了密码加密的机制,简单来说就是一个密码x123456,然后你用hash(k=x123456)后保存在数据库中,因此想要猜到哈希加密后的密码是很难的。
[MIT6.006] 10. Open Addressing, Cryptographic Hashing 开放定址,加密哈希的更多相关文章
- [MIT6.006] 1. Algorithmic Thinking, Peak Finding 算法思维,峰值寻找
[MIT6.006] 系列笔记将记录我观看<MIT6.006 Introduction to Algorithms, Fall 2011>的课程内容和一些自己补充扩展的知识点.该课程主要介 ...
- Python与数据结构[4] -> 散列表[2] -> 开放定址法与再散列的 Python 实现
开放定址散列法和再散列 目录 开放定址法 再散列 代码实现 1 开放定址散列法 前面利用分离链接法解决了散列表插入冲突的问题,而除了分离链接法外,还可以使用开放定址法来解决散列表的冲突问题. 开放定 ...
- C# Dictionary源码剖析---哈希处理冲突的方法有:开放定址法、再哈希法、链地址法、建立一个公共溢出区等
C# Dictionary源码剖析 参考:https://blog.csdn.net/exiaojiu/article/details/51252515 http://www.cnblogs.com/ ...
- java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...
- 开放定址法——平方探测(Quadratic Probing)
为了消除一次聚集,我们使用一种新的方法:平方探测法.顾名思义就是冲突函数F(i)是二次函数的探测方法.通常会选择f(i)=i2.和上次一样,把{89,18,49,58,69}插入到一个散列表中,这次用 ...
- 开放定址法——线性探测(Linear Probing)
之前我们所采用的那种方法,也被称之为封闭定址法.每个桶单元里存的都是那些与这个桶地址比如K相冲突的词条.也就是说每个词条应该属于哪个桶所对应的列表,都是在事先已经注定的.经过一个确定的哈希函数,这些绿 ...
- [MIT6.006] 8. Hashing with Chaining 散列表
一.字典 在之前课里,如果我们要实现插入,删除和查找,使用树结构,最好的时间复杂度是AVL下的Ο(log2n),使用线性结构,最好的复杂度为基数排序Ο(n).但如果使用字典数据类型去做,时间复杂度可为 ...
- [MIT6.006] 9. Table Doubling, Karp-Rabin 双散列表, Karp-Rabin
在整理课程笔记前,先普及下课上没细讲的东西,就是下图,如果有个操作g(x),它最糟糕的时间复杂度为Ο(c2 * n),它最好时间复杂度是Ω(c1 * n),那么θ则为Θ(n).简单来说:如果O和Ω可以 ...
- [MIT6.006] 7. Counting Sort, Radix Sort, Lower Bounds for Sorting 基数排序,基数排序,排序下界
在前6节课讲的排序方法(冒泡排序,归并排序,选择排序,插入排序,快速排序,堆排序,二分搜索树排序和AVL排序)都是属于对比模型(Comparison Model).对比模型的特点如下: 所有输入ite ...
随机推荐
- shell-脚本开发基本规范及习惯
1.shell-脚本开发基本规范及习惯 1.开头指定脚本解析器 #!/bin/sh 或#!/bin/bash 2.开头加版本版权等信息 #Date: 2018/3/26 #Author: zhangs ...
- Java安全之Javassist动态编程
Java安全之Javassist动态编程 0x00 前言 在调试CC2链前先来填补知识盲区,先来了解一下Javassist具体的作用.在CC2链会用到Javassist以及PriorityQueue来 ...
- JS判断PC操作系统版本
var version = navigator.userAgent; console.log(version); //"Mozilla/5.0 (Windows NT 10.0; WOW64 ...
- android init.rc语法
转自:http://www.cnblogs.com/nokiaguy/p/3164799.html init.rc由如下4部分组成. 动作(Actions) 命令(Commands) 3. 服务(Se ...
- 多测师讲解python _函数中变量_高级讲师肖sir
定义的函数内部的变量名如果是第一次出现, 且在=符号前,那么就可以认为是 被定义为局部变量.在这种情况下,不论全局变量中是否用到该变量名,函数中 使用的都是局部变量.例如: num=100 #全局变量 ...
- C 和 C++ 打起来了!曾今最亲密的伙伴到现今的不爽?
70年代初,贝尔实验室创建了C语言,它是开发UNIX的副产品.很快C就成为了最受欢迎的编程语言之一.但是对于Bjarne Stroustrup来说,C的表达能力还不够.于是,他在1983年的博士论文中 ...
- 双栈排序(洛谷P1155)二分图的判定+思维贪心
题目:戳这里 题目大意: 给你一个数列,问能否通过两个栈的push与pop把它输出成一个升序序列(每个数只能入队并出队一次) 不能的话输出0,能的话输出操作方法 主要思路: 1.判断是否可以成功输出升 ...
- beego和gin对比
一.对mvc的支持 beego支持完整的mvc M:Model,beego orm,把数据库数据变成object 特性 支持go的所有类型存储 更简洁的curd风格 完整实现了健壮的ORM 支持的数据 ...
- 第二十六章 ansible主要模块介绍
一.Ansible模块回顾 1.command模块 [root@m01 ~]# ansible web01 -m command -a 'free -m' 2.shell模块 #支持管道符这种特殊符号 ...
- OpenCV开发笔记(七十一):红胖子8分钟带你深入级联分类器训练
前言 红胖子,来也! 做图像处理,经常头痛的是明明分离出来了(非颜色的),分为几块区域,那怎么知道这几块区域到底哪一块是我们需要的,那么这部分就涉及到需要识别了. 识别可以自己写模板匹配.特征 ...