`
liguanyi11111
  • 浏览: 63011 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类
最新评论

一些浅显的hash算法知识介绍

 
阅读更多

      有人可能经常听到hash,感觉很高深的样子。其实只不过他并不懂而已。hash其实是非常浅显的东西,浅显到我们几乎每天都在使用它,只不过我们并不知道而已。一份学校的名单,一个电脑里的硬盘都可以说是来自于hash算法。hash,不过就是一个对大量资料、文件的整理过程而已。让一些同类的或者说是有相似特征的放在一起,方便我们查找。而hash算法,就是一个分类的过程。就如同图书馆的书籍,如果散乱的排布,到处乱扔,想从中找到其中一本那可是一个浩大的工程。而经过分类处理,我们这可以节省大量的时间。我们知道,无论是什么电脑,其内存都是有限的。不可能在任何情况下都把所有的资料全部放入内存中供cpu去调取。这时候分类的作用就体现出来了,先把类别放入内存找到想要的类别,在把该类放入内存,一步一步找下去,直到找出为止。这样就大大节省空间和时间,这也是hash的好处。但是,空间和时间是相对的,节省空间就要浪费时间,反之也是一样的,这在后面我会讲到原因。下面我就讲一下hash的具体实现。

        相信大家都了解,数据结构就是装载数据的规则而已。实现方法充其量也就两种,数组和链表。数组,其优点在于由于下标的存在,可以很方便的查找里面的数据。但是他有其固定的长度,新加装数据就成了麻烦。而链表则可以很容易的在任何位置插入你想要的数据,但是查找起来却只能依靠遍历了。总要找一种办法来综合这两种方式,而这办法就是hash算法。把大量的数据(A)经过hash算法后,变成少量的数据(B)。因为数量上A>B的,这时,大家可以想到,这样做一定会有很多的数据A指向同一个B,这样就产生了冲突。一个hash算法,由于A和B数量不定,冲突就可能会发生。而对于做程序的我们,他就成了必然会发生,我们就要想办法解决,否则就无法分辨重复的数据了。这里主要介绍拉链法,就是把那些A数据经过hash算法得到B数据存入一个数组当中,数组的长度由可以产生的不重复的B的数量来决定。数组当中不要存入单纯的B数据,而是放入存有B数据的一个链表的节点。如果出现有一个数据经过hash出现重复,则把这个数据在建立一个链表节点加入进去。这样把所有的A数据放入之后,就初步得到了一个hash表。这里的hash算法就十分关键了,没有绝对完美的hash算法,任何算法都要结合实际情况而定。如果你想要最快的查找,最极端,做一个一比一的hash表,完全用数组来实现。你想要节省内存,直接一个链表也是可以的。但是这样又回到了最原始的问题,时间和空间的需求。所以掌握好你的环境要求,设计出最符合你的hash算法,才是最完美的。一些最简单的hash算法,如求余,移位等,选择不同数进行计算,会分别得到不同数量的B的值(hashcode),并且也相应确定了冲突概率。具体如何选择,就是实际行动中该决定的了。另外,在相同的冲突数量或者概率下,也是有优劣之分的,对于拉链法,每条链的长度尽量不要相差太过悬殊,不能一条链上链接了大量的数据,而其他链上却几乎没有,极端一点,全部数据在一条链上,这就又回到了一个普通的链表了。评价标准,这里可以参考高中所学的方差的概念。

      总而言之,hash算法是一种结合,也被现在所普遍使用可谓无处不在。现在县了解到这里,在今后的学习中我可能会在程序中测试各种hash算法的实际应用情况,敬请期待吧。

 

 

 

分享到:
评论

相关推荐

    密码学 hash算法实验代码及报告

    11283019-吴艳红-实验6 Hash算法.docx很可能是实验报告,其中包含了实验目的、步骤、结果分析以及可能遇到的问题和解决方法。通过阅读这份报告,我们可以深入了解实验过程和哈希算法的理论应用。 S1.txt和S2.txt是...

    7种Hash算法

    总的来说,理解和实现哈希算法是计算机科学和信息安全的基础知识,它们在密码学、数据库索引、文件校验等多个领域都发挥着关键作用。在C语言中实现这些算法,不仅可以加深对哈希函数的理解,也有助于提升编程技能。

    基于Matlab的Hash算法BLAKE的设计与实现.pdf

    根据提供的文件信息,本文将详细介绍基于Matlab的Hash算法BLAKE的设计与实现的知识点。本文档是一篇研究论文,它介绍了BLAKE算法的背景、设计和基于Matlab的实现方法,并探讨了该算法在信息安全中的应用。 ### 知识...

    hash.rar_HASH算法_fpga hash_hash_zebra85v_哈希表Verilog

    标题中的“hash.rar_HASH算法_fpga hash_hash_zebra85v_哈希表Verilog”揭示了这个压缩包文件的主要内容,它涉及到哈希(Hash)算法在高速Field-Programmable Gate Array(FPGA)上的实现,以及与Zebra85v硬件平台和...

    hash算法

    哈希(Hash)算法是一种在计算机科学中广泛使用的数据处理技术,它能够将任意长度的输入(也叫做预映射,pre-image)通过一个特定的函数转换成固定长度的输出,这个输出通常被称为哈希值或散列。哈希算法在信息安全...

    一种hash算法的实现

    ### 一种Hash算法的实现与解析 在计算机科学领域,哈希算法(Hash Algorithm)是一种将任意长度的数据映射到固定长度数据的过程,通常用于快速查找、数据完整性校验及密码学安全等领域。本文旨在深入解析一个特定的...

    WEBQQ hash算法自动抓取器计算器

    WEBQQ Hash算法是一种用于在WEBQQ应用中验证用户身份的安全机制。这个算法涉及到密码学、哈希函数和安全协议等多个IT领域的知识点。以下是对这些概念的详细解释: 1. **哈希函数**: 哈希函数是信息安全中的核心...

    暴雪哈希算法全部源码

    在深入探讨暴雪哈希算法之前,我们需要了解一些基本的哈希算法概念。哈希算法是一种将任意长度的数据映射为固定长度值的过程,这个过程通常不可逆。在计算机科学中,哈希函数被广泛应用于各种数据结构中,如哈希表...

    hash算法md6

    例如,可以使用RAII(资源获取即初始化)模式创建一个`MD6Hash`类,该类在构造时初始化状态,在析构时完成哈希计算并清理资源。 7. 安全性:虽然MD6的设计考虑了安全性,但在实际应用中,应确保避免已知的攻击方法...

    算法文档无代码Hash函数的设计优化

    3. 常见的Hash算法:如MD5、SHA系列(SHA-1、SHA-256)、RIPEMD-160等。这些算法在不同程度上受到重视和应用,但它们中的一些也已被证明存在安全性问题,故在设计时需考虑选用当前认为安全的算法。 接下来,本文将...

    基于列存储的MapReduce分布式Hash连接算法.pdf

    知识点可以从以下几个方面展开: 1. 大数据的特征:文章提到了大数据具有规模大、多样性强、价值高、速度快等特征,并且硬件系统趋向通用化,软件系统趋向开源化。这些特征对数据处理的效率和存储方式提出了更高...

    几个比较著名的哈希算法

    4. SHA-3(Secure Hash Algorithm 3):2015年发布的SHA-3标准,基于Keccak算法,提供了更高的安全性,旨在抵御未来可能出现的攻击方法。SHA-3的变种包括SHA3-224、SHA3-256、SHA3-384和SHA3-512。 哈希算法在软件...

    各种hash算法-hashcodeUtil

    在IT领域,哈希算法(Hash Algorithm)是一种用于将任意长度的数据映射为固定长度输出的函数,这种输出通常称为哈希值。哈希算法在数据处理、信息安全、分布式系统等多个方面有着广泛应用。"hashCodeUtil"是Java编程...

    《数据结构与算法分析》.txt

    绪论部分是全书的预备知识,主要对ADL语言、数据结构与算法、算法分析基础、OOP、和C++做了简单介绍 基本数据结构 基本数据结构部分包括线性表、堆栈与队列、数组、字符串、整数集合类、树(包括AVL树、伸展树等)、...

    CUMT密码学课程设计源码,基于Python实现的A5加解密、RC4加解密、DES核心算法、Hash算法、消息认证、RSA加解密

    4. Hash算法:哈希算法,如MD5、SHA-1或SHA-256,将任意长度的输入转换为固定长度的摘要。在Python中实现哈希算法,可以学习到其不可逆性、抗碰撞性和消息摘要的概念,这对于数据完整性验证至关重要。 5. 消息认证...

    C语言 算法 排序 数据结构 哈希表等

    在IT领域,特别是软件开发和计算机科学中,掌握C语言、算法、数据结构以及哈希表等基础知识至关重要。这些概念是构建高效程序的基础,对于理解计算机如何处理信息有着深远的影响。 首先,我们来深入探讨一下C语言。...

    webqq好友hash最新算法2013-12-4

    而好友hash算法,则是用于处理和加密好友列表信息的一种技术手段,以确保数据的安全性和隐私性。 ### 哈希算法基础 哈希算法是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数,其主要特点是输入的微小...

    Hash算法MD5 实验报告.pdf

    【哈希算法】哈希算法,也...通过这个实验,学生不仅能够理解MD5算法的数学原理,还能掌握C语言编程技巧,将理论知识与实践结合,提高问题解决和编程能力。同时,对数字签名和软件验证的理解也有助于提升信息安全意识。

    算法导论电子书(经典的算法学习书籍)

    《算法导论》是计算机科学领域的一本经典著作,由Thomas H. Cormen、Charles E. Leiserson、Ronald L....配合书中的chm和pdf版本,你可以根据个人喜好和阅读习惯选择适合自己的方式来学习这些宝贵的算法知识。

Global site tag (gtag.js) - Google Analytics