哈希表在查找方面有非常大应用价值,本文记录一下利用哈希散列表来统计文本文件中每个单词出现的重复次数,这个需求当然用NLP技术也很容易实现。
一、基本介绍
1、Hash Key值:将每个单词按照字母组成通过一个乘子循环运算得出一个小于29989的整数,29989是一个比较大的质数。0~29989即为Key值。
2、哈希函数:
1 //哈希函数
2 unsigned int hashIndex(const char* pWord) //返回hash表的索引(即hash指针数组的下标)
3 {4 assert(pWord !=NULL);5 unsigned int index = 0; //以下四行为将一个单词映射到一个小于HASHNUMBER的正整数的函数
6 for (; *pWord != '\0'; pWord++)7 index = MULT * index + *pWord;8 return index %HASHNUMBER;9 }
View Code
3、数据结构定义:
(1)总体采用数组法,数组下标就是Key值,Key取值范围是1~29989,也即数组大小为29989,数组的每个项存储该Key值下含有的单词链表的头指针,根据头指针就能遍历整个单词链表
hashNodePtr bin[HASHNUMBER] = { NULL }; //HASHNUMBER大小的指针数组 作为hash表
(2)单词节点定义: 链表存储同一Key值下的单词ÿ