HashTable C语言Hash哈希表算法的多种实现代码

HashTable哈希表的作用简单一点说就是把字符串变成一个整数以达到快速查找的目的。为了节省内存空间,所生成整数的范围不能过大,但是如果太小就会容易发生很多个不同的字符串经过hash转换得到同样的整数。下面是一个简单的哈希算法的例子:
#define MULTIPLIER (37) 
unsigned long
hash(const char *s)
{
     unsigned long h;
     unsigned const char *us;
 
     /* cast s to unsigned const char * */
     /* this ensures that elements of s will be treated as having values >= 0 */
     us = (unsigned const char *) s;
 
     h = 0;
     while(*us != '�') {
         h = h * MULTIPLIER + *us;
         us++;
     } 
 
     return h;
}
以上例子比较简单,可以看到哈希算法的基本原理,但是现实中不一定适用,下面推荐2款比较好的哈希算法。
Github上开源的哈希表算法:http://troydhanson.github.io/uthash/userguide.html
暴雪的hash表算法:http://blog.sina.com.cn/s/blog_5b29caf701015tpb.html

什么时候C语言标准库里面有hash算法就好了,目前很多高级点的语言例如PHP都不用自己去研究hash算法。
参考文章:http://www.cs.yale.edu/homes/aspnes/pinewiki/C(2f)HashTables.html


发表于:2015-04-18 19:00:37

原文链接(转载请保留): http://www.multisilicon.com/blog/a26340455.html

友情链接: MICROIC
首页