散列函数设计:除留余数法
转载地址
感谢分享

除留余数法介绍
除留余数法此方法为最常用的构造散列函数方法。对于散列表长为m的散列函数公式为:

f( key ) = key mod p ( p ≤ m )

mod是取模(求余数)的意思。事实上,这方法不仅可以对关键字直接取模,也可在折叠、平方取中后再取模。
一个例子

很显然,本方法的关键就在于选择合适的p, p如果选得不好,就可能会容易产生同义词。下面我们来举个例子看看:

有一个关键字,它有12个记录,现在我们要针对它设计一个散列表。如果采用除留余数法,那么可以先尝试将散列函数设计为f(key) = key mod 12的方法。比如29 mod 12 = 5,所以它存储在下标为5的位置。

不过这也是存在冲突的可能的,因为12 = 2×6 = 3×4。如果关键字中有像18(3×6)、30(5×6)、42(7×6)等数字,它们的余数都为6,这就和78所对应的下标位置冲突了。

甚至极端一些,对于下图的关键字,如果我们让p为12的话,就可能出现下面的情况,所有的关键字都得到了0这个地址数,这未免也太糟糕了点。


但是我们如果不选用p=12来做除留余数法,而选用p=ll,则结果如下:

这个时候就只有12和144有冲突,相对来说,就要好很多了。
如何合理选取p值

使用除留余数法的一个经验是,若散列表表长为m,通常p为小于或等于表长(最好接近m)的最小质数或不包含小于20质因子的合数。这句话怎么理解呢?要不这样吧,我再举个例子:某散列表的长度为100,散列函数H(k)=k%P,则P通常情况下最好选择哪个呢?A、91 B、93 C、97 D、99
实践证明,当P取小于哈希表长的最大质数时,产生的哈希函数较好。我选97,因为它是离长度值最近的最大质数。

散列函数设计:除留余数法相关推荐

  1. 数据结构 散列表 除留余数法 线性探测法解决冲突

    已知9名学生的信息,每个学生信息包括编号和姓名.学生信息为11,王红,22,刘军,47,王亮,92,张强,16,吴迪,3,李伟,7,赵磊,29,钱鹤,8,孙芳.用散列表实现以编号为关键码的查找.散列函 ...

  2. (4)散列函数设计:除留余数法

    除留余数法介绍 除留余数法此方法为最常用的构造散列函数方法.对于散列表长为m的散列函数公式为: f( key ) = key mod p ( p ≤ m ) mod是取模(求余数)的意思.事实上,这方 ...

  3. 数据结构—— 构造散列函数的六种方法【直接定址法-数字分析法-平方取中法-折叠法-除留余数法-随机数法】

    目录: 一:直接定址法 二:数字分析法 三:平方取中法 四:折叠法 五:除留余数法 六:随机数法 这些方法原理都是将原来数字按某种规律变成另一个数字 一:直接定址法 取关键字的某个线性函数值作为散列地 ...

  4. 除留余数法构造哈希表_哈希表算法原理

    基本概念 哈希表(Hash Table)是一种根据关键字直接访问内存存储位置的数据结构.通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数. 哈 ...

  5. Hash(除留余数法+链地址法)

    //哈希函数:除留余数法 //处理冲突:链地址法 #include<stdio.h> #include<stdlib.h> #include<algorithm> ...

  6. 除留余数法构造哈希函数并用链地址法处理哈希冲突【C++实现】

    1.题目描述 哈希函数为H(key)=key%13,哈希冲突处理方法为:链地址法 c语言版数据结构上的例子 2.代码实现 首先建立一个哈希链表结点类HashNode,用于存放处理冲突时的关键字,其数据 ...

  7. 哈希函数 直接定址法 除留余数法

    直接定址法 直接定址法是以数据元素关键字k本身或它的线性函数作为它的哈希地址,即:H(k)=k  或 H(k)=a×k+b : (其中a,b为常数) 例1,有一个人口统计表,记录了从1岁到100岁的人 ...

  8. 【除留余数法定义hash函数+线性探测法解决hash冲突】数据结构实验之查找七:线性之哈希表

    Think: 1知识点:除留余数法定义hash函数+线性探测法解决hash冲突 数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB P ...

  9. 使用散列表进行查找【查找关键词:电话号码,名称】【平方取中法,除留余数法】【开放地址探测法,公共溢出区法】【计算ASL】

    Library import pandas as pd import numpy as np import time 读取数据 df = pd.read_excel('重庆市印刷和记录媒介复制业754 ...

最新文章

  1. Idea Debug调试介绍
  2. python使用 GPUs
  3. pcap java_java解析Pcap(io.pkts)
  4. 静心的最好的方法是什么?
  5. 【转】vb 关于commondialog的多选
  6. python派森编程软件_派森Python
  7. tinymce 上传本地视频
  8. Linux机器24项安全合规设置
  9. 牛客网网易机试模拟题(Android)记录
  10. PHP 操作图片水印
  11. mysql 时间函数的使用
  12. QWebEngine自动添加麦克风和摄像头权限
  13. excel表格怎么筛选出空白的单元格
  14. 如何查看大型工程源代码(非常不错)
  15. [HNOI2001] 产品加工
  16. 让你的终端更漂亮——MAC OS 终端的设置
  17. 【图解 HTTP】 读书笔记
  18. 14.JavaScript循环while、for、dowhile、break、continue、跳转标签
  19. 深度强化学习-基于价值的强化学习-TD算法和Q学习(三)
  20. 数据结构与算法题目集(中文) - 7-46 新浪微博热门话题(30 分)

热门文章

  1. Java Selenium3 WebDriver启动火狐、Chrome、IE,Edge浏览器的方法(一)
  2. python学习 之 pyqt5前后端分离试验(进度条)
  3. Codeforces Round #818 (Div. 2)
  4. Android数据存储(内部,外部,SharedPreferences,SQlite)
  5. 点燃我,温暖你,李峋同款爱心代码!
  6. 不规则三角网(TIN)
  7. 【论文解读|2019】HAHE - Hierarchical Atentive Heterogeneous Information Network Embedding
  8. java实训西游记人物实现_学习练习 java编写西游记人物类
  9. 明天就会有阳光...
  10. 华硕 内存条 不同步_千元级的RGB台式内存条——让你的主机流光溢彩