本文主要介绍一下hash与多值hash,然后在讨论一下支撑hash的伪随机数生成器。不感兴趣者可以走了……
一:hash 与 多值hash:
野史
第一次见到hash,是在算法导论里看到的,其中的桶排序就是使用了此类思想,当然也有专门介绍hash的章节。感觉却是高明。后来在sqlseveral中也经常接触,毕竟作为join的一种优化方法经常都很靠谱。而多值hash则是在《数学之美》中接触到的,其中用作垃圾邮件过滤器。两个字:神奇。后来在一些分类统计中经常使用,感触更深。hash的本质就是用一个函数根据内容本身计算出内容的存储位置然后存储之,取的时候自然也就是看到内容立刻就能计算出(而不是找出)目标的位置。
碰撞
这个计算位置的函数先放一下,假设已经有了,而且内容无规律,我们选择了随机函数;先讨论碰撞问题。假设在一个100万的序列中已经有1万个位置被占满,那么再放一个元素时他会落到别人的位置上的概率是1%。这就是碰撞的概率了。当然如果内容存在一定规律,我们不使用随机函数作为hash函数可能会完全不碰撞并且位置使用率很高,例如:如果要计算一篇文章的所有单字的字频统计,就可以使用汉字的