hash存储
首先让我们来看看以下的情况:我们有一堆数据,以后我们可能要对这些数据进行操作(增,删,改,查等),所以现在必须把这些数据存储起来。那么我们怎么存储?用什么方法存储之后能够高效地进行以上对数据的那些操作呢?现在就介绍一种解决方法:hash存储(散列存储)。
以前我们可能知道的数据的存储方法有:数组,队列,链表等。有了这些为什么还需要hash存储呢?答案是:操作高效!让我们来看看以下的情况:我们有5个电话号码13834542111,13856742123,13845652909,13885234921,13886677560。如果我们用数组来存储这5个电话号码,似乎很方便,但是我们的操作是不是很高效呢?如我们得到一个电话号码,要查看它是不是已经存储在这个数组里了?就得遍历这个数组,逐个比较。如此若有多次操作就很费时了……hash就可以解决这个问题,试想我们拿到一个电话号码,经过一个算法后直接知道这个号码是不是存在多方便。
一: hash存储原理:
1、原始数据:需要存储的那些数据,这些数据或是因为表示的自然数太大,或是表示的自然数不连续,或者是不是自然数……
2、用来存储数据的数组:hash存储是依靠数组和链表来实现的。
3、实现的方法:如果有1000个数据(原始数据),我们需要开辟一个大小1000的数组来存储这些数据,实现hash存储就是想法设法让这些原始数据能够通过一个算法计算后得到一个整数,而这个整数能够表示数组的一个下标,这样我们就可以把这个原始数据存储在数组的这个下标的那个位置。
二: 看到这里读者肯定会有疑问:
1.原始数据和下标的区别是什么?
答:原始数据是杂乱无章的最初的数据,如果不经过处理无法实现高效操作的;下标是原始数据处理后的结果,对原始数据处理得到下标的目的是使对原始数据的操作能够有章可依,有法可寻从而达到高效操作。
2.会不会有几个原始数据通过计算后得到同一个下标呢?
答:这种情况是存在的,因为原始数据是庞大的,杂乱无章的,不定的,所以我们无法找到一个算法使所有的原始数据通过计算后和得到的下标一一对应。这种现象叫做冲突。
3.这个算法是什么呢?
答:对于不同的原始数据,不同的程序操作者,算法是不定的。于是就有了算法选择的一些原则。如:a.算法能够使原始数据经过计算后能够得到尽量多的不同的下标;b.算法要尽量简单,最好是看到原始数据后就可以直接得到计算后的结果(下标);
三:冲突处理
所谓的冲突处理就是怎样处理两个或者是几个原始数据通过计算后得到同一个下标的问题,最直接的思想是:我们可以对这些冲突的数进行处理。如:可以把第一个得到此下标存储的那个数据作为一个链表的结点,然后把所有得到这个下标的数建立一个链表,这样在对这些数据的一个进行操作时,第一步是很快的找到数组的这个下标位置,然后就是将这个数和这个下标对应的链表里的数进行比较,从而达到对这个数的操作。当然链表不能太长了,如果太长就要对数据进行另外的处理。
四:实际例子
由于种种原因,实际例子放到下一篇博客:hash存储之实际例子解析
分享到:
相关推荐
Rocksdb在实现时有很多地方的代码能充分发挥底层存储的性能
Hash在线解密平台最新版php实现纯txt存储哈希跟明文对应表查询
uthash开源的hash函数实现,里面的uthash.h可用
uthash 是C的比较优秀的开源代码,它实现了常见的hash操作函数,例如查找、插入、删除等待。该套开源代码采用宏的方式实现hash函数的相关功能,支持C语言的任意数据结构最为key值,甚至可以采用多个值作为key,无论...
内容描述:用于crypto中hash爆破的强大工具。 优势:相较于其他hash工具,具有更快的算力,使用方便简洁。 适用:适用于md5,sha256等典型hash加密方式,反推出所需的源码。
MurmurHash算法由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc 、nginx、libmemcached,Redis,Memcached,Cassandra,HBase,Lucene等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的...
RS-Hash Function Value: " + ghl.RSHash(key)); System.out.println(" 2. JS-Hash Function Value: " + ghl.JSHash(key)); System.out.println(" 3. PJW-Hash Function Value: " + ghl.PJWHash(key)); System....
stm32f407平台上实现的hash算法
3维hashin失效准则~复合材料层合板
Hashcat is the self-proclaimed world's fastest password recovery tool. It had a proprietary code base until 2015, but is now released as free software. Versions are available for Linux, OS X, and ...
hashcat is the world’s fastest and most advanced password recovery tool. This version combines the previous CPU-based hashcat (now called hashcat-legacy) and GPU-based oclHashcat. Hashcat is ...
217种hashcat-V3.0所支持的哈希 举例,如md4、md5、sha1、sha256,部分特殊哈希的例子有官网说明的链接。
在获取到mysql用户的hash后, 可用hash直接登陆mysql进行操作 比如我们注入出数据库的hash,但是没办法拿到webshell 我们可以使用mysql_hash,用hash登陆并控制数据库 使用方法: mysql_hash.exe -u root -p Enter ...
Hash函数集合,包含主流的hash函数: nginx_hash算法,OpenSSL_hash算法,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,DEKHash,APHash等等!
hash函数与消息认证讲义 包括 5.1 Hash函数概述 5.1.1 Hash函数定义 5.1.2 Hash函数的安全性 5.1.3 Hash函数的迭代构造法 5.2 Hash函数MD5 5.2.1 MD5算法 5.2.2 MD5的安全性 5.3 安全Hash算法SHA-1 5.3.1 SHA-1...
哈希表 相关概念、hash函数、hash冲突解决方案、代码示例
Hash基础知识_Hash基础知识_Hash基础知识_Hash基础知识_Hash基础知识_Hash基础知识_
Any C structure can be stored in a hash table using uthash. Just add a UT_hash_handle to the structure and choose one or more fields in your structure to act as the key. Then use these macros to store...
hash算法中的sha1算法的讲解与实现,c++代码,可以直接运行,注释清晰,直接使用。
Hash join算法的一个基本思想就是根据小的row sources(称作build input,我们记较小的表为S,较大的表为B) 建立一个可以存在于hash area内存中的hash table,然后用大的row sources(称作probe input) 来探测前面所建...