在刘璟的《计算机算法引论——设计与分析》一书中介绍了几种完备哈希(PHF)构造技术,里面提到了Fredman构造法。这本书是零几年写的比较早,光看书中介绍不太容易理解这一构造法的具体流程,搜了一下网上居然极少有这一方法的介绍,看了很多数据结构与算法的书也很少有。在这里先介绍原理与构造方法,再拿一个例子过一遍操作。

原理:

Fredman通过构造法证明了:对任意的关键字集合S⊆U,|S|=n,至多取m=3n(即m≤3n,α=n/m>0.33),一定可以在形如

h(x)=((kx) mod N) mod n (N=|U|)

的Hash函数中找到S的PHF。相关的论文应该是这一篇Storing asparse table with O(1) worst case access time

构造方法:

已知:实际关键词集合S⊆U,|S|=n,且|U|=N为素数。

1.      对此S,先构造函数

h'(x)=((kx) mod N) mod n

用枚举法选择k值,使的

其中,bi=|Si|(i=0,1,…,n-1),Si={x|x∈S, h'(x)=i}。Si是被h'映射为i的关键字集合。

已经证明,满足条件的k值一定存在。

2.      对于每个Si(i=0,1,…,n-1)选择适当的ki,构造函数hi(x)=((kix)mod N) mod Ci

其中,Ci=1+bi(bi-1),使的hi:Si→[0..Ci-1]为单一映射函数(无冲突)。由于这时的集合Si较小,Ci值也不大,因此ki一定存在,且不难求。

3.      取,定义函数h: U→[0..m-1],使对于任意X∈S

h(x)=C0+C1+C2+…+Ci-1+((kix) mod N) mod Ci

其中,i=h'(x)=((kx) mod N) mod n。

函数h(x)就是S∈U的一个PHF。

该方法时间代价为(n·N),空间代价为5n+C。

例子:


哈希表总共17格,关键字存放如下

Fredman构造法构造完备哈希相关推荐

  1. 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA)

    编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA) 文章目录 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA) 简 ...

  2. 面向对象-构造法(构造器)

    1. 概述: 作⽤:⽤于对象初始化. 执⾏时机:在创建对象时,⾃动创建. 特点: 所有的Java类中都会⾄少存在⼀个构造⽅法: 如果⼀个类中没有明确的编写构造⽅法, 则编译器会⾃动⽣成⼀个⽆参的构造⽅ ...

  3. c语言链地址法构造哈希表,链地址处理法构造简单哈希表

    链地址法:将所有关键字为同义词的记录保存在一个线性链表中(拉链法) 设某哈希函数产生的哈希地址在区间[0,12]上,则创建指针数组add[12],其中每个元素都是一个单项链表的头结点(有值). 由于仅 ...

  4. 机器人雅可比矩阵的求法_构造法

    机器人雅可比矩阵的求法_构造法 雅可比矩阵对于机器人运动学逆解.静力学分析和动力学分析有重要意义,是机器人位置\力控制的基础.这篇文章主要讲如何用构造法求解雅可比矩阵. 上一篇文章中讲到,D-H矩阵中 ...

  5. 《算法设计编程实验:大学程序设计课程与竞赛训练教材》——2.3 构造法模拟的实验范例...

    2.3 构造法模拟的实验范例 构造法模拟需要完整.精确地构造出反映问题本质的数学模型,根据该模型设计状态变化的参数,计算模拟结果.由于数学模型建立了客观事物间准确的运算关系,因此其效率一般比较高. 构 ...

  6. 【HDU - 6441】Find Integer (费马大定理 + 奇偶数列法构造勾股定理)

    题干: people in USSS love math very much, and there is a famous math problem . give you two integers n ...

  7. 【编译原理】:NFA转变为DFA的子集构造法

    整体的步骤是三步:  一,先把正规式转换为NFA(非确定有穷自动机),  二,在把NFA通过"子集构造法"转化为DFA,  三,在把DFA通过"分割法"进行最小 ...

  8. LL1分析构造法_16条数学得分法,想提分快来看!

    距离高考不足百日,在注重数学基础的同时,也要注重技巧,好迅速拿分,今天送同学们一份数学得分法,帮助同学们最大限度得分,在高考中取得最高分! 1.圆锥曲线中最后题往往联立起来很复杂导致k算不出,这时你可 ...

  9. LL1分析构造法_行测技巧:比较构造法两步轻松解决方程题

    所谓比较构造法,指的是对同一事物进行两种不同维度的描述,通过找到其中的差异,从而构造等量关系.定义当中有两个非常重要的要点需要着重把握. 一.应用环境:同一事物.两种不同维度的描述 比较构造法最主要的 ...

最新文章

  1. Contos7 克隆实例 以及 配置网络-服务-等相关信息
  2. verilog中数组的定义_开源仿真工具Icarus Verilog中的verilog parser
  3. CODEVS-1758-维护数列-NOI2005-splay
  4. java布局垂直居中_CSS水平居中和垂直居中解决方案(转)
  5. Mysql和mono,.net – Mac OS X Mono和MySql连接器问题
  6. 【8-20】java学习笔记02
  7. 前端学习(2224):react之函数式组件
  8. 关于虚拟机linux密码的那点事
  9. 百度SEO站群支付宝当面付打赏系统源码
  10. onenote快捷键_onenote链接系列:链接笔记如何产生?与插入链接的区别
  11. Structure from Motion综述
  12. android 动态截图软件,点点GIF(动态图片制作工具)
  13. 五、OpenCV-python 之图像处理(Ⅲ)——傅里叶变换
  14. JAVA发送HttpClient
  15. huya弹幕提取小尝试
  16. SAP SMTP邮箱配置全过程
  17. FORM 6i 安装
  18. Python-爬取淘宝搜索结果
  19. django channels socket通信实现
  20. j2me写的方块小游戏

热门文章

  1. vue手机适配媒体查询用法@media
  2. vue页面换成手机适配屏幕
  3. css3如何实现字体放大缩小动画
  4. ES6——let-const的变量声明以及模板字符串
  5. 为了苦苦寻觅视频素材的你,我们整理了 9 个版权视频网站
  6. 知晓云 php,2020 知晓云小程序年度评选获奖名单发布
  7. 内部存储空间不足_手机提示存储空间不足的原因和解决方法
  8. ug怎么画曲线_120种UG表达式曲线画法
  9. android 极光推送解绑,app集成极光推送笔记(angular js)
  10. 全连接层输入为什么是固定维度的(拉直/压扁Flatten成为列向量)