hash 表
2011年04月07日
hash 表是基于主键的一个特殊数组。
ex:
hash(k)->i
we find table(i) the value we stored in.
android C库的hash原理:
根据kluth 3 6.4的原理,使用两次hash的开放式寻址。
1. hash表的大小定为一个给定比大小大的一个质数(具体求法是先定为奇数(这样就可以不用从2开始了),在求出稍大于它的质数,求质数的方法是从3开始,到根号目标大小为止)。
选为质数的原因是防止哈希结果只是字符集中字符的简单叠加,实际上是要求M不能被a^n+k整除,a是字符集的元,这样的话,M就不能是3的倍数。
2.开放式寻址是相对于拉链链表而言的,拉链链表实际上是以纵横的形式,或者是将横列排到列末。
而开放式寻址是直接探测下一个表项是否为空。
3.两次hash的做法:
3.1 hash1(k) -> i
hash2(i) -> c
i-c是否为空,若不为空则填入,若i-cc库用法
2011年04月07日
hash 表是基于主键的一个特殊数组。
ex:
hash(k)->i
we find table(i) the value we stored in.
android C库的hash原理:
根据kluth 3 6.4的原理,使用两次hash的开放式寻址。
1. hash表的大小定为一个给定比大小大的一个质数(具体求法是先定为奇数(这样就可以不用从2开始了),在求出稍大于它的质数,求质数的方法是从3开始,到根号目标大小为止)。
选为质数的原因是防止哈希结果只是字符集中字符的简单叠加,实际上是要求M不能被a^n+k整除,a是字符集的元,这样的话,M就不能是3的倍数。
2.开放式寻址是相对于拉链链表而言的,拉链链表实际上是以纵横的形式,或者是将横列排到列末。
而开放式寻址是直接探测下一个表项是否为空。
3.两次hash的做法:
3.1 hash1(k) -> i
hash2(i) -> c
i-c是否为空,若不为空则填入,若i-cc库用法
本文详细解读了Android C库中基于主键的哈希表实现原理,包括哈希表大小的确定、质数选择原因、开放式寻址机制及两次哈希策略,旨在为开发者提供深入理解与应用哈希表技术的知识。

被折叠的 条评论
为什么被折叠?



