估计写这么个题目会被扔鸡蛋, 因为实在是太大了. 各位不要期望太高啊,我写这东西,就是为了给自己个备忘. 你们要是把它当垃圾看, 说不定还能发现点什么东西. 言归正题. 说实话, .NET Framework的实现可能比我们认为的要好一些, 比如线程安全, 代码效率, 甚至以及代码风格方面. 比如HashTable 的实现就是一个比较好的佐证. 上文说到, .NET Framework 中的哈希表, 使用了双重散列的方式来计算散列值. 那么到底精确的来说, 是采用了什么关系式呢? 实际上很简单, 这个关系式就是: h(key, n) = h1(key) + n*h2(key) 其中 h1(key) = GetHash(key); h2(key) = 1 + ((h1(key) >> 5) + 1) % (hashsize - 1); key – 待散列的关键字值, n – 发生碰撞的次数, hashsize – 哈希表的容量,是一个素数.大牛Knuth同学在他那本说过为什么要使用素数. … Read More →
↧