噶呜~先来了解一下什么是哈希吧? 当我们要在一堆东西中找到想要的那一个东西,我们常常通过比较来找,理想的情况是不经过任何比较,一次就能找到,怎么才能做到这样呢?那就在记录的储存位置和他的关键字之间建立一个确定的对应关系,我们称这种对应关系为哈希函数~小盆友们应该对哈希有了一个初步的印象了吧?其实,....
分类:
其他好文 时间:
2014-08-06 22:09:32
阅读次数:
207
众所周知,哈希的速度是灰常快的,敢号称时间复杂度为O(1)的,呵呵,它和快排有一拼(目前只有快排敢叫“快排”这个名号)。而且,它偏偏还非常好用,这注定了它不平凡的存在。倒是目前网说哈希时,多是介绍各种哈希函数的构造及如何避免冲突,然后动不动就扯到MD5这些东西上去了。照这样说来,貌似哈希不常用啊。其实说白了,管他那么多干嘛,就不冲突着用嘛,自然就省去了那些“拉链门”啊神马的东西了。平时没事来个哈希...
分类:
其他好文 时间:
2014-08-05 19:27:50
阅读次数:
398
基本概念:Hash(哈希):hash一般也译作“散列”。事实上,就是一个函数,用于直接定址。将数据元素的关键字key作为变量,通过哈希函数,计算生成该元素的存储地址。冲突:函数是可以多对一的。即:多个自变量可以映射到同一函数值。一般而言,不同的key的hash值是不同的。在往hash表中映射的时候,...
分类:
编程语言 时间:
2014-08-05 00:01:50
阅读次数:
548
最近邻问题(nearest neighbor problem)可以定义如下:给定n个对象的集合并建立一个数据结构,当给定任意的要查询对象时,该数据结构返回针对查询对象的最相似的数据集对象。LSH的基本思想是利用多个哈希函数把高维空间中的向量映射到低维空间,利用低维空间的编码来表示高维向量。通过对向量对象进行多次哈希映射,高维向量按照其分布以及自身的特性落入不同哈希表的不同桶中。在理想情况下可以认为在高维空间中位置比较接近的向量对象有很大的概率最终落入同一个桶中,而距离比较远的对象则以很大的概率落入不同的桶中...
分类:
其他好文 时间:
2014-07-29 14:25:28
阅读次数:
219
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,R...
分类:
其他好文 时间:
2014-07-09 16:32:44
阅读次数:
132
基本概念所谓完美哈希函数,就是指没有冲突的哈希函数,即对任意的 key1 != key2 有h(key1) != h(key2)。设定义域为X,值域为Y, n=|X|,m=|Y|,那么肯定有m>=n,如果对于不同的key1,key2属于X,有h(key1)!=h(key2),那么称h为完美哈希函数,...
分类:
其他好文 时间:
2014-07-09 14:46:14
阅读次数:
252
Bloom Filter,即布隆过滤器,是一种空间效率很高的随机数据结构。原理:开辟m个bit位数组的空间,并全部置零,使用k个哈希函数将元素映射到数组中,相应位置1.
分类:
数据库 时间:
2014-07-03 20:47:36
阅读次数:
393
原文:挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject 这篇继续分享下GetHashCode和ExpandoObject这两个比较好玩的方法。一:GetHashCode 从MSDN上可以看到的解释是:用作特定类型的哈希函数,也就是说任何对象的实例都会...
分类:
其他好文 时间:
2014-07-01 17:07:00
阅读次数:
152
首先看看散列算法是什么。 散列函数或散列算法,又称哈希函数,英语:Hash Function,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随...
分类:
其他好文 时间:
2014-06-25 17:06:52
阅读次数:
193
线性探针是另外一种解决哈希冲突的办法。这种办法的基本思想就是当遇到哈希冲突时,寻找下一个空位,直到找到空位为止。
示例
先插入一个值S,如下图。
插入其他的一些值,这些值的哈系没有冲突,得到下图的结果。
再插入一个值H,由于H与A的哈系冲突,因此需要寻找一个空的位置。
找到了空位
...
分类:
其他好文 时间:
2014-06-18 11:31:28
阅读次数:
200