(本文内容来自互联网)
11.2 哈希函数构造方法
设要存放的数据元素有n个,存放数据元素的数组个数为m,哈希函数的设计目标,就是要使通过哈希函数得到的n个数据元素的哈希地址 。
1 除留余数法
除留余数法是用数据元素的关键字K除以哈希表长度m所得的余数作为哈希地址的方法。除留余数法的哈希函数h(K)为:
h(K)...
分类:
其他好文 时间:
2014-12-22 18:01:01
阅读次数:
385
这题不同与字符串的哈希,我用了字符串的哈希方法从前面哈希的,然后一直WA,然后从后面往前哈希就A了,这个我还没明年为什么这样,奇了……先把这方法记下来吧。试一下前面字符串那题,应该也是可以从后往前的,以后就从后往前吧,比较保险,可能从前往后哈希冲突比较多吧。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include
#inc...
分类:
其他好文 时间:
2014-09-23 17:11:15
阅读次数:
157
哈希函数的构造方法:1,直接定址法2,数字分析法3,平方取中法4,折叠法5,保留余数法6,随机数法处理冲突的方法:1,开放地址法:Hi = ( H(key) + di) MOD m i=1,2,....,k(k <= m-1) di =1,2,3,...,m-1称为线性...
分类:
其他好文 时间:
2014-08-30 22:53:50
阅读次数:
276
开放地址法解决哈希冲突
线性开放地址法
线性开放地址法就是在hash之后,当发现在位置上已经存在了一个变量之后,放到它下一个位置,假如下一个位置也冲突,则继续向下,依次类推,直到找到没有变量的位置,放进去。
平方开放地址法
平方地址法就是在hash之后,当正确位置上存在冲突,不放到挨着的下一个位置,而是放到第2^0位置,假如继续冲突放到2^1的位置,依次2^3... 直到遇...
分类:
其他好文 时间:
2014-08-10 01:47:19
阅读次数:
272
分离链接法
hash table是映射机制的,最大的优点就是它的操作是O(1)级别的。但是会出现哈希冲突,这就需要几种办法来解决。这里先说一种:分离链接法。
就是当插入的位置已经存在一个值之后,那么在这个值之后插入,就可以了,也叫拉链法。(但是其实会降低查找速度,变成O(n)级别)
下面是代码:
//
// main.cpp
// HashTable_SeparateCha...
分类:
其他好文 时间:
2014-08-05 22:35:10
阅读次数:
246
众所周知,哈希的速度是灰常快的,敢号称时间复杂度为O(1)的,呵呵,它和快排有一拼(目前只有快排敢叫“快排”这个名号)。而且,它偏偏还非常好用,这注定了它不平凡的存在。倒是目前网说哈希时,多是介绍各种哈希函数的构造及如何避免冲突,然后动不动就扯到MD5这些东西上去了。照这样说来,貌似哈希不常用啊。其实说白了,管他那么多干嘛,就不冲突着用嘛,自然就省去了那些“拉链门”啊神马的东西了。平时没事来个哈希...
分类:
其他好文 时间:
2014-08-05 19:27:50
阅读次数:
398
“除留余数法”+“开放定址法(线性探测再散列)”实现的哈希表。...
分类:
其他好文 时间:
2014-07-20 10:38:17
阅读次数:
331
线性探针是另外一种解决哈希冲突的办法。这种办法的基本思想就是当遇到哈希冲突时,寻找下一个空位,直到找到空位为止。
示例
先插入一个值S,如下图。
插入其他的一些值,这些值的哈系没有冲突,得到下图的结果。
再插入一个值H,由于H与A的哈系冲突,因此需要寻找一个空的位置。
找到了空位
...
分类:
其他好文 时间:
2014-06-18 11:31:28
阅读次数:
200
战争故事
很久很久以前,曾经发生过很多关于哈希函数的战争故事。那些战争的基本原理就是通过精心构造造成大量的哈希冲突从而占用大量的CPU资源。
被攻击的软件例有以下例子:
带有漏洞的服务器:攻击者精心构造哈系冲突,只需要56K的网速就能让服务器死机,从而达到DOS攻击的目的。
Perl 5.8.0:攻击者精心构造哈系冲突插入到关...
分类:
其他好文 时间:
2014-06-17 21:48:18
阅读次数:
206
独立链表是解决哈希冲突的一种办法。它的基本思想就是将哈希值相互冲突的几个对象放到一个链表中。
代码
public class HashST {
private static class Node {
Object key; // 由于无法创建泛型数组,只能将对象设置为Object类
Object value;
Node n...
分类:
其他好文 时间:
2014-06-14 10:04:26
阅读次数:
206