在很多地方都看到了散列表(hash表)这种数据结构。 基本原理:提供一个散列函数,把不同的关键字映射到不同的存储单元。 问题1)信息怎么来存储?是用数组还是链表?如果用数组,数组大小又如何来确定? 问题2)如果确定散列函数? 问题3)不同的关键字一定能映射到不用的存储单元么?如果不能,又如何来处理....
分类:
其他好文 时间:
2015-02-15 16:31:02
阅读次数:
121
它是用一个散列函数把关键字 映射到散列表中的特定位置。 在理想情况下,如果元素e 的关键字为k,散列函 数为f,那么e 在散列表中的位置为f (k)。要搜索关键字为k 的元素,首先要计算出f (k),然后看 表中f (k)处是否有元素。如果有,便找到了该元素。如果没有,说明该字典中不包含该元素。 在...
分类:
其他好文 时间:
2015-02-09 21:36:08
阅读次数:
98
哈希表的概念 哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构。它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。散列存储的基本思路 以数据中每个元素的关键字K为自变量,通过...
分类:
其他好文 时间:
2015-02-09 19:51:18
阅读次数:
112
这是一种与消息认证码结合使用以确保消息完整性的技术。主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4、MD5、SHA-1,jdk1.5对上面都提供了支持,在java中进行消息摘要很简单, java.security.MessageDig...
分类:
编程语言 时间:
2015-02-08 12:43:28
阅读次数:
165
前言我们前面已经看到,蛮力字符串匹配算法和Rabin-Karp字符串匹配算法均非有效算法。不过,为了改进某种算法,首先需要详细理解其基本原理。我们已经知道,暴力字符串匹配的速度缓慢,并已尝试使用Rabin-Karp中的一个散列函数对其进行改进。问题是,Rabin-Karp的复杂度与强力字符串匹配相同,均为O(mn)。我们显然需要采用一种不同方法,但为了提出这种不同方法,先来看看暴力字符串匹配有什么不...
分类:
编程语言 时间:
2015-02-06 11:23:40
阅读次数:
1360
一、定义
Hash即“哈希”,是把任意长度的输入通过散列算法变换成固定长度的输出(该输出即散列值)。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
关键字k:即输入值
散列函数H(key):为了完成转化的固定算法
散列表(也称哈希表):关键字经散列函数输出后的结果表
二、常用的hash函数
1. 直接寻址法:取关键字或关键字的某个线性函数...
分类:
其他好文 时间:
2015-01-20 18:08:40
阅读次数:
152
除了各种树表之外,还可以采用散列技术来表示并实现动态查找表。“散列”既是一种存储方式,又是一种查找方法。这种查找方法称为散列查找。按散列存储方式构造的存储结构称为散列表。散列技术的核心是散列函数。
散列函数是一种将键值映射为散列表中的存储位置的函数。对任意给定的动态查找表T,如果选定了某个“理想的”散列函数H及相应的散列表L,则对T中的每个数据元素X,函数值 H(X.key)就是X在散列...
分类:
其他好文 时间:
2014-12-18 22:21:34
阅读次数:
348
查找方法有很多种,如:顺序查找,折半查找,分块查找,基于数的查找等等,但是这些查找有一个共同的特点,那就是都是通过比较的方式查找a[i]中的那个i,比如顺序查找,是通过顺序比较数组中的每个元素,最终找到i,折半查找只不过是在比较的时候用了一些技巧,使得比较的此数减少了,但是,原理还是比较,基于树的查找其实就是存储方式的不同(链表),其原理也是通过比较的方式找到i。
那有没有一种方法不通过比较,而...
分类:
其他好文 时间:
2014-12-13 17:58:06
阅读次数:
180
CRC循环冗余校验算法是可以根据数据产生固定位数的散列函数,用来校验数据传输/保存后出现的错误,或者说是校验数据的完整性,例如压缩文件。生成的散列值在传输或者存储之前计算出来并且附加到数据后面。一般循环冗余校验值都是32位的二进制数,即8位的16进制字符串。一般冗余校验是值CRC-32CRC-32的...
分类:
编程语言 时间:
2014-12-09 13:51:32
阅读次数:
209