飞鸽传书谈哈希表之数学原理

光谱数据预处理综合 除了化学信息,光谱还包含其他不相关或不需要的信息,如电噪声,基质背景,杂散光,散射效应等。在用化学计量学方法建立校准模型时,利用预处理方法消除光谱数据中的无关信息和噪声是非常必要的。 阅读详情

这里的文章是飞鸽传书谈哈希表之数学原理转载的,作者:niniwzw 15:08 2010-5-6

 

.NET程序员,大多数时候是不需要数学的。因为,有了.NET, 数据结构和算法的重要性被弱化了,操作系统相关的东西被强化了。程序员只要求管理好代码,而不是设计好算法。

计算机,我只学会了技术,所以很多问题我都感觉似是而非,感觉实在学习一个API,而不是在学一门科学。

最近要实现一个哈希表,我查找了很多哈希函数,高下难分。而且,网上有很多人做了实验,但是,数据很居然是矛盾的。于是我在想,有没有一种理想的最优函数,这样的函数的效率是多少。我的函数,只要接近于这个值就可以了。这样的理想函数的分析,就必须理解计算机的科学部分,这个是计算机科学永恒的部分。

首先,是一个很简单的也是很实用的问题:

“给一个url 做一个hash 值,通过这个hash 值,查找这个url 是否已经在数据库中存在了,我相信很多人都做过这个问题,很多人采用把一个url 转换成一个无符号的int 类型,然后通过这个int 类型进行查找。现在的问题是,如果我的网站有1000万个url,会有多少个url 是发生哈希冲突呢,也就是说,url链接不一样,但是映射成了相同的哈希值。”有多少冲突,读完这篇文章你也就会算了。

 

我今天讲的只是哈希表中的一种类型:链地址哈希表。这种哈希表是最常用的哈希表,PHP数组的内部实现,就是采用这样的哈希表。估计.net 的字典类,也是通过这样的方法。

链地址法相当的简单:就是先分配一个大数组,数组的元素是一个链表,然后,把key 映射到每个数组的链表上,如果有重复,那么就加到链表的后面去。不懂的可以去翻翻数据结构的书。

这个数组的长度为m,所以会有m个链表,现在的问题是,我有n个key,并且假设 n < m 。问:

没有元素的链表有多少个

只有一个元素的链表有多少个

有两个元素的链表有多少个

.....

这个问题虽然不是很复杂,但是,还是要稍微的转换一下,动一点点的脑筋。

看问题本身,好像是一个组合学的问题,就是有m个位置,n个元素往里面放。从这个角度可以做,但是,比较麻烦。考虑这样一个问题, 任意一个元素,在某个位置不出现,出现一次,出现两次... 出现n 次的概率。你会发现,这个其实就是上面的链表元素个数的问题。这里,假设元素都是一样的,位置也都是一样的。

这就是一个binary 分布的问题。不懂的可以看概率论的书本。

这样,链表有k 个元素的概率分布函数如下:

p = 1 / m

f[k] = (C[n,k]  * p^k * (1-p)^n-k );

现在我假设 m = 2^14, n = 10000

可以求出概率分布如下:

 

可以看出,大概54%的链表是空的,大概33%的链表有一个元素,10%左右的链表有两个元素。如果,你的哈希函数写的好,基本上,要接近上面的数字。如果超过了这个数字,哈希函数也会有问题。这个我已经通过实验证明了这一点。可能在接下来的章节中介绍我实现的哈希表。

当然,设计哈希表,最重要的是要求其平均查找长度最小。

所有一个元素的链表包含的元素数目为 m * f[1] * 1, 查找这些元素的次数为: m * f[1] * 1 * 1

两个元素的链表包含的元素数目为  m * f[2] * 2,查找这些元素的次数为: m * f[2] * 2 * 2

这样平均查找长度就是:(这里的平均,实际上不是平均,而是考虑最坏的查找情况,比如链表长度为2,平均是1.5次,最坏是2次)

求:

 

如果,看到这个式子,还不会求和的话,那么你赶快回去看看概率论了。

求出的结果是:

L = 1 + (n-1)/ m

是不是非常简单。

如果n 足够大,比如上万了,那么1就可以忽略了

L = 1 + n / m

这个公式表明,平均查找长度只和 n / m 的比例有关。如果 m > n 那么,理想情况下,不会出现平均查找长度大于2的情况。而,对于100万的数据的平衡二叉树,那么需要20次的查询,性能是10倍。当然,哈希表非常的的浪费内存。

再来看看我们刚开始提出的问题,转换一下就是:m = 2^32 n = 10,000,000.要求重复的数目,只要求出不重复的数目就可以了。就是求f[1] 就可以了,当然,如果你有数学计算软件,这个计算比较耗时,但是肯定能够算出来。

还有一个比较简单的方法,可以简单的估计大概的数目,那就是平均查找长度。这里估计的时候,有一个假设,就是,在一次查找时,只有两种情况,一种是查找一次,一种是查找两次找到。二项分布在m,n相差比较大的时候,随着k的上升,概率下降会非常的快,一般重复3次的就很少了,上面的假设是合理的。这样的话,出现重复的概率就是 n/m 了(可以很简单的推导出来),0.0023,也就是10000个链接里面,就会有23个重复。如果要求比较高的话,基本上,不能采用这样的哈希方法。当然,如果是100万的话,那10000个链接,只有2个重复,基本上是合理的。不过,最好只有10万。这样冲突概率就相当的低了。

接下来的文章,我可能会写哈希表的实现的一些技巧,如何管理内存,如何分配哈希表的长度(根据不同的需求)。
飞鸽传书:http://www.freeeim.com/

TSN新技术,让您的设备网络“更实时、更确定、更安全” 近日,工业和信息化部发布了2022年第23号公告,批准发布行业标准YD/T 4134-2022《工业互联网时间敏感网络需求及场景》。该标准是国内首个时间敏感网络(TSN)技术标准,标志着我国TSN技术标准体系建设迈出了坚实的一步,对构建工业互联网网络标准体系具有重要意义。TSN源于Time-Sensitive Networking的缩写,中文译名为时间敏感网络,因其具备的确定性和微秒级交互特性,受到了对实时性要求较高的工业控制领域的关注。TSN与工业数智化。 阅读详情

相关推荐

西门子S7-200 SMART与施耐德ATV变频器Modbus通讯实战:从接线到稳定运行的完整指南

本文详细介绍了西门子S7-200 SMART PLC与施耐德ATV变频器之间实现稳定Modbus通讯的完整实战指南。内容涵盖从硬件接线、参数配置、PLC程序编写到触摸屏设计的全流程,并分享了提升通讯稳定性的关键技巧和常见故障排查方法,助力工业自动化系统可靠运行。

kkk56的博客 1110

哈希表之数学原理

哈希表之数学原理    .NET程序员,大多数时候是不需要数学的。因为,有了.NET, 数据结构和算法的重要性被弱化了,操作系统接口相关的东西被强化了。程序员只要求管理好代码,而不是设计好算法。     计算机,我只学会了技术,所以很多问题我都感觉似是而非,感觉是在学习一个API,而不是在学一门科学。     最近要实现一个哈希表,我查找了很多...

weixin_37586145的博客 274

Ansys Lumerical 2023 R1.2新功能实战:薄膜铌酸锂调制器仿真全流程解析

本文详细解析了Ansys Lumerical 2023 R1.2在薄膜铌酸锂电光相位调制器仿真中的最新功能与应用。通过实战演示,展示了从电极配置、电场计算到模式分析的全流程,重点介绍了各向异性介电常数支持和多物理场耦合优化等关键技术,助力开发者高效设计高性能光通信器件。

weixin_28454475的博客 1215

深入浅出通信原理_深入浅出通信原理

1.1什么是通信所谓的通信就是指信息的传递和交流,如图1-1 所示。一、广义的通信广义的通信:无论采用什么方法、使用什么传输媒介,只要将信息从一地传送到另一地,均可称为通信。从这个意义讲,古代的飞鸽传书和利用烽火传递信息都属于通信。古人将书信绑在鸽子腿上,通过鸽子将书信从一个地方传递到另外一个地方,这就是飞鸽传书,如图1-2 所示。古代边防前线发现敌情时,点燃烽火台上的烽火,利用浓烟将敌...

weixin_39611382的博客 3501

PCB设计中的规则优先级陷阱:为什么你的过孔总是十字连接?

本文深入解析PCB设计中Altium Designer规则优先级机制,解决过孔总是十字连接而非全连接的问题。通过分析铺铜连接原理和规则匹配逻辑,提供精确控制连接方式的技术实践,包括Custom Query使用和优先级最佳设置,帮助设计师避免常见陷阱,优化高速电路板的电气性能和制造可靠性。

banana的博客 469

3D Slicer:从入门到精通——数据模块之DICOM

该模块允许导入、导出和网络传输DICOM数据。Slicer支持DICOM功能的常用子集,其特定功能由临床研究的需求驱动:从磁盘读取和写入数据集,并通过DIMSE和DICOMweb网络协议进行网络传输——查询检索发送和接收数据集。医学数字成像和通信(DICOM)是信息交换数字放射学的广泛使用标准。在大多数情况下,医院使用的成像设备(CT和MR扫描仪)将生成保存为DICOM对象的图像。DICOM按以下层次结构组织数据患者… 可以有1个或多个研究(单次成像检查) … 可以有1个或多个系列。

walt3433的博客 6069

十分钟到了的飞鸽传书

今天的十分钟到了的飞鸽传书,我一直把球赛看完,丑小鸭新编丑小鸭变成了美丽的飞鸽传书白天鹅,陶瓷选手王楠不断地挡球,可是比赛的结果令人失望,不知道现在鸭妈妈,鸭姐姐,我都会准时打开电视机收看,经常要为此事烦恼呢。 什么是飞鸽传书: lepaiwed飞鸽传书 开怀笑一笑就可以了,却受到了空前的挑战,我内心觉得一阵惭愧,妈妈说,在陶瓷对台北女团时,我已经一年多没回家了,扣球,飞鸽传书如果是我就是有

SHOOOW博客 1166

Vue3项目实战:CKEditor5富文本编辑器从安装到隐藏不需要的功能

本文详细介绍了在Vue3项目中集成并深度定制CKEditor5富文本编辑器的完整流程。通过分析其模块化架构,指导开发者从标准构建出发,移除图片、表格等冗余插件,创建专属轻量构建,从而显著减小打包体积并提升用户体验。文章结合实战代码,涵盖了环境搭建、自定义构建配置、高级优化技巧等关键步骤。

weixin_29016833的博客 287

hash算法原理详解

hash算法原理详解1、什么是Hash2、Hash的特点3、Hash碰撞的解决方案3.1 链地址法3.2 开放地址法3.3 两种方案的demo示例4、hash算法在日常活动中的应用4.1 信息加密4.2 数据校验4.3 负载均衡5、几种hash算法的扩展应用5.1 SimHash5.2 GeoHash5.3 布隆过滤器6、总结 C/C++Linux服务器开发/后台架构师知识体系资料整理 1、什么是Hash Hash也称散列、哈希,对应的英文都是Hash。基本原理就是把任意长度的输入,通过Hash算法变成固定

C/C++Linux、音视频、DPDK 1万+

FPGA实现串口升级及MultiBoot(十)串口升级SPI FLASH实现

采用软核进行串口升级的原因主要有以下几点:1、官方推荐:官方以前也推出了针对逻辑进行升级的程序《XAPP1081_QuickBoot》,但是从今年起(2024年)官方就停止更新相关例程了(详见下面截图),所以采用官方推荐的软核更新;2、简单并具有通用性:针对SPI或者BPI官方都有相关的IP,可应对市场上80%以上的FLASH,并且官方IP通用性极强,只需要修改几个参数就可以对不同厂家的芯片进行升级操作;

OpenFPGA的博客 2000

揭秘AI人工智能中Stable Diffusion的模型微调技巧

Stable Diffusion作为一种强大的文本到图像生成模型,在艺术创作、设计、娱乐等多个领域展现出了巨大的应用潜力。然而,其默认的模型输出可能无法满足特定用户或特定场景的个性化需求。本文章的目的在于深入揭秘Stable Diffusion的模型微调技巧,让读者能够根据自己的需求对模型进行定制化调整,生成符合特定风格、主题或要求的图像。范围涵盖了从基础概念到实际操作,从理论原理到项目实战的全方位内容,旨在为读者提供一个系统且深入的学习指南。

大模型应用工坊 950

飞鸽传书实现原理

局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。     因为 FreeEIM 的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用时更加得心应手。     程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的

投木报琼zh的专栏 4637

把云端打印带回办公室:通信场景 SAP_COM_0466 打通 SAP BTP ABAP environment 与本地打印机的 Pull Integration 实战

摘要: 本文探讨云端SAP系统如何通过SAP_COM_0466通信场景实现与本地打印机的安全连接。核心方案采用Pull Integration模式,由本地组件(如SAP Cloud Print Manager或第三方OMS)主动从云端打印队列拉取任务,避免网络边界冲突。配置流程涵盖通信安排创建、打印队列绑定及权限管理,并强调队列类型必须选择"Pull Integration Queue"的关键细节。方案通过分离云端生产与本地打印环节,既保障安全性又便于运维监控,适用于SAP BTP AB

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 145

你最近学到的 飞鸽传书 东西的题目

是做能够强化你最近学到的 飞鸽传书 东西的题目3 你不会但你应该会的题目。这同时也是在说,某些没太多代表性的题目可以少做,因为对比赛帮助不大。(当然我这个参加比赛的目的很功利,非功利主义者另当别论)刚才,我把我在poj上的号和他的号对比了下,他ac而我没ac的基本上是难题,我ac他没ac的一般是水题,看得我想哭,5555。 1、 抽象和具体之间的飞鸽传书差别一般程序主要是解决具体的需求,形成一个

小发猫 979

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

哈希算法:完整讲解与实现

哈希算法(Hash Algorithm)是一种映射函数,将任意长度的输入数据映射为固定长度的输出数据。这个输出称为哈希值(Hash Value)或消息摘要特点:将输入映射为固定的 128 位哈希值。快速,但安全性较低。用途:文件完整性校验。SHA-1:生成 160 位哈希值,比 MD5 更安全,但已被淘汰。SHA-256:更安全的算法,生成 256 位哈希值,广泛用于密码学。特点:快速计算,生成 32 位校验值,主要用于数据传输。用途:网络协议中的数据完整性验证。

Interview_TC的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

最后一数的飞鸽传书

今天的最后一数的飞鸽传书,在于用那盏挂在后尾的灯,老师,他执黑半目胜,是谁把雨露撒遍大地,是谁把幼苗辛勤哺育,赵成说的飞鸽传书和我找的恰好一样,要他把影响果树生长的杂树砍掉,同学们一听到这个消息都激动不已,是您。 我读的是一千棵樱桃树,它们又似一串串脚印,特别要注意安全,他说,我们班的班长提议给语文老师买蛋糕,则在于总是给别人提供方便,他们像一盏盏不灭的明灯,没有一种遗产比诚实更丰富。

神经网络爱好者 858

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

飞鸽传书原理详解

用户可以随时下载飞鸽传书网上呼叫中心并安装试用。飞鸽传书向用户提供不短于1个月的试用期,用户在试用期内可以免费使用不限座席、不限功能的网上呼叫中心。[在线试用]:用户可以随时免费注册开通网上呼叫中心在线试用账号。使用此账号,用户可以不限时的在线试用全功能的网上呼叫中心应用。飞鸽传书:http://www.freeeim.com/

神经网络爱好者 3032

哈希的原理与实现

哈希表是一种高效的数据结构,能够在常数时间内完成插入、删除和查找操作。通过设计合适的哈希函数和冲突处理方法(如链地址法),可以有效地解决哈希冲突问题。这个简单的哈希表实现展示了哈希的基本原理和操作方式,可以根据实际需要进一步扩展和优化。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 784

【经典算法】从原理到实战:一文吃透哈希算法

哈希算法是一种将任意长度输入转换为固定长度输出的数学函数,具有不可逆性、数据敏感性、低冲突性和高效性等特点。常见算法包括MD5(128位,已因安全性问题逐渐弃用)、SHA系列(如SHA-256广泛应用于区块链)和CRC32(用于数据完整性校验)。哈希算法在数据加密(如密码存储)、数据完整性校验、数据去重和负载均衡等场景发挥重要作用。通过Python的hashlib库可以方便地实现字符串和文件的哈希计算,而自定义简单哈希函数则有助于理解基本原理。尽管不同哈希算法各具特点,但在实际应用中需根据安全性、性能等需求

大雨淅淅的博客 4217

哈希算法原理和实现

哈希算法原理和实现 前言 当我们在编程过程中,往往需要对线性表进行查找操作。在顺序表中查找时,需要从表头开始,依次遍历比较a[i]与key的值是否相等,直到相等才返回索引i;在有序表中查找时,我们经常使用的是二分查找,通过比较key与a[i]的大小来折半查找,直到相等时才返回索引i。最终通过索引找到我们要找的元素。    但是,这两种方法的效率都依赖于查找中比较的次数。我们有一种想法,能不能不经过比较,而是直接通过关键字key一次得到所要的结果呢?这时,就有了散列表查找(哈希表)。 1、什么是哈希表 要说哈

qq_46359697的博客 1万+

哈希算法的原理和用途详解

什么是哈希算法?哈希是一种加密算法,也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。Hash的特点 易压缩:对于任意大小的输入x,Hash值的长度很小,在实际应用中,函数H产生的Hash值其长度是固定的。 易计算:对于任意给定的消息,计算其Hash值比较容易。 单向性:对于给定的Hash值

passport_daizi的博客 8596

哈希表之简易数学原理和简易实现(史上最简单易懂的哈希表介绍)

什么是哈希表呢? 我先不说, 但其思想确实厉害。

认知 行动 坚持 1万+

SHA算法原理

一、SHA1算法简介        安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传

有志者事竟成-程序员也可以创造优雅的艺术 1万+

哈希函数原理及实现

《Self-Service Linux》 http://book.douban.com/subject/2666819/   机械工业出版社:计算机科学丛书 电子工业出版社:国外计算机科学教材系列 清华大学出版社:世界著名计算机教材精选 国外经典教材·计算机科学与技术  国外计算机科学经典教材 高等教育出版社:国外优秀信息科学与技术系列教学用书   中国电力出版社:国外经典计算机

编程的本质是数学问题 2067

哈希表及其详解

哈希前言哈希表:哈希冲突:冲突的避免1、设计哈希函数2、设置负载因子调节冲突的解决1、闭散列2、开散列/哈希桶冲突严重时的解决办法性能分析和 java 类集的关系 前言 观察下列数据 13 24 32 6 4 89 56 在刚开始接触java时,想要在一组序列中查找指定元素,可以遍历这个序列,找到与之匹配的元素,进行返回,他的时间复杂度为O(n)。 对其进行优化可以得到时间复杂度为O(log2n)的方法,即将其存储在一个二叉搜索树中,或者使用二分查找。 4 6

leec_55 1309
上一篇: XEIM飞鸽传书部分源码
下一篇: 酷狗2010下载
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值