文章目录

  • 一、散列(哈希)函数设计方法
    • 1. 折叠法
    • 2. 平方取中法
  • 二、散列函数设计:非数项
    • 总结

一、散列(哈希)函数设计方法

1. 折叠法

折叠法设计散列函数的基本步骤:

  1. 将数据项按照位数分为若干段;
  2. 将几段数字相加;
  3. 对散列表大小求余,得到散列值。

例如:对于电话号码62767255,可以两位两位分为4段(62、76、72、55),相加(62+76+72+55=265),散列表包括11个槽,那么就是265%11=1。所以, h ( 62767255 ) = 1 h(62767255)=1 h(62767255)=1。

有时候折叠法还会包括一个隔数反转的步骤。比如(62、76、72、55)隔数反转为(62、67、72、55),再累加(62+67+72+55=256),对11求余,(256%11=3),所以 h ′ ( 62767255 ) = 3 h'(62767255)=3 h′(62767255)=3。

虽然隔数反转从理论上看来毫无必要,但这个步骤确实为折叠法得到散列函数提供了一种微调手段。当我们发现折叠法得到的结果不太好时,就可以加入隔数反转,以便更好符合散列特性。

2. 平方取中法

平方取中法的基本步骤:

  1. 将数据项做平方运算;
  2. 取平方数的中间两位;
  3. 对散列表的大小求余,得到散列值。

例如:对44进行散列,首先 4 4 2 = 1936 44^2=1936 442=1936,然后取中间的93,对散列表大小11求余 93 % 11 = 5 93\%11=5 93%11=5,散列值为5。

折叠法和平方取中法都是完美散列函数,分散度都很好,但平方取中法计算量稍大

二、散列函数设计:非数项

对非数字的数据项进行散列时,把字符串中的每个字符看作ASCII码即可。
如字符串“cat”,ord('c')等于99,ord('a')等于96,ord('t')等于116。再将这些整数累加,对散列表大小求余。

当然,这样的散列函数对所有的变位词都返回相同的散列值,为了防止这一点,可以将字符串中字符所在的位置(“cat”中,“c”是第一位,“t”是第三位)作为权重因子,乘以ord值。即 99 × 1 + 97 × 2 + 116 × 3 = 641 99\times1+97\times2+116\times3=641 99×1+97×2+116×3=641,然后再去求余。

总结

我们还可以设计出更多的散列函数方法,但要坚持的一个基本出发点是,散列函数不能成为存储过程和查找过程的计算负担。否则,在散列身上花费太多计算资源,可能还不如简单地进行顺序查找或者二分查找,失去了散列本身的意义。

数据结构与算法——19. 散列函数设计方法相关推荐

  1. 特征图注意力_从数据结构到算法:图网络方法初探

    作者 | 朱梓豪 来源 | 机器之心 原文 | 从数据结构到算法:图网络方法初探 如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入. ...

  2. 《数据结构与算法》课程设计:18-背包问题

    <数据结构与算法>课程设计 18.背包问题 问题描述: 有n个物品,第i个物品的价值为V[i],重量为W[i],背包的最大容量为m.求在不超过背包容量的条件下,背包里装的物品价值最大. 实 ...

  3. 【IEEE CIM 2023】基于多目标进化算法的抗菌肽设计方法

    Evolutionary Multi Objective Optimization in Searching for Various Antimicrobial Peptides 小生境共享(Nich ...

  4. 数据结构与算法综合课程设计——校园导航系统

    1.设计目的  应用所学的数据结构与算法知识完成一个具有一定实际意义的应用程序的设计.编码与调试,锻炼实践动手能力,提高编程水平. 2.设计内容  课题名称:校园导航系统 问题描述:校园导航系统用无向 ...

  5. 从数据结构到算法:图网络方法初探

    如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入.图表示学习.网络嵌入等别名呈现出来,其实所有的这些方法本质上都是作用在图上的机器学 ...

  6. pagerank数据集_从数据结构到算法:图网络方法初探

    机器之心原创 作者:朱梓豪编辑:Qing Lin 如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入.图表示学习.网络嵌入等别名呈现出 ...

  7. 《数据结构与算法》课程设计报告——赫夫曼编码/译码器

    题目 赫夫曼编码/译码器 实验目的 本课程设计是为了让同学们了解学习数据结构的作用和意义.数据结构是计算机科学与技术专业的专业基础课,是十分重要的课程.所有的计算机系统软件和应用软件都要用到各种类型的 ...

  8. 【数据结构与算法】课程设计报告

    作者:何翔 学院:计算机学院 学号:04191315 班级:软件1903 转载或引用请标注本文链接: https://blog.csdn.net/HXBest/article/details/1223 ...

  9. 13:Scala语言的数据结构和算法

    第十九章 Scala语言的数据结构和算法 19.1 数据结构(算法)的介绍 数据结构的介绍   1.数据结构是一门研究算法的学科,只从有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮.更加 ...

最新文章

  1. 使用ASV2011研究Molehill API
  2. 来来来,个人blog第一弹——WordPress的Linux运行环境
  3. Windows Phone 7 不温不火学习之《ListBox 数据与Android ListView 数据绑定》
  4. 理解Node.js(译文)
  5. Best Time to Buy and Sell Stock with Cooldown
  6. 常见Serialize技术探秘(ObjectXXStream、XML、JSON、JDBC byte编码、Protobuf)
  7. raspberry pi_我如何使用Raspberry Pi与孙辈联系
  8. java怎么把毫秒转换成天数_关于java:如何将毫秒转换为“ hh:mm:ss”格式?
  9. 为什么易燥易怒以及柔润相处的练习
  10. 在线Excel文件解析转换成JSON格式
  11. 纯php代码打印数据表
  12. (附源码)Springboot宠物医院管理系统 毕业设计 180923
  13. 人工智能降噪PS插件 Topaz DeNoise AI
  14. 提供计算机网络通信功能,在计算机网络中,通信子网的主要作用是___ 答案:提供计算机网络的通信功能...
  15. 工作多年想转行,有哪些正确的方法及技巧呢
  16. 关于更换固态硬盘的一些经历...
  17. tzc 1345 推箱子
  18. 极光 · 底层逻辑 · doubleの浮点误差
  19. 2018秋季寒假作业2-记叙在人生路上对我影响最大的三位老师
  20. 华为Ascend昇腾CANN详细教程(二)

热门文章

  1. xftp无法连接到虚拟机
  2. 计算机硬件工程师需要学哪些,嵌入式硬件工程师要求是什么?需要掌握哪些内容...
  3. 嵌入式硬件开发工程师涉及哪些工作内容?
  4. mysql数据库管理-2019整理
  5. springboot+thymeleaf+shiro标签
  6. [转载] 深入 superviser
  7. 关于likely()与unlikely函数
  8. sketch交互动效能导入html吗,UI设计利器Sketch +最新交互利器 Framer 配合使用和动效制作...
  9. 惠普p1106打印机安装步骤_hp1106打印机安装驱动下载
  10. 两年工作经验面试经验以及面试题分享