博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
哈希表之词频统计
阅读量:5045 次
发布时间:2019-06-12

本文共 1089 字,大约阅读时间需要 3 分钟。

#include 
typedef struct node_t{ struct node_t *next; char *word; int count;}*node;#define NHASH 9973 // 最好定位质数#define MULT 31 // 乘法器node bin[NHASH]; // 哈希表索引unsigned int hash(char *p){ unsigned int h = 0; for(; *p; p++) h = MULT * h + *p; return h % NHASH;}void incword(char *s){ unsigned int h = hash(s); node p; for(p=bin[h]; p; p=p->next) if(strcmp(s, p->word) == 0){ (p->count)++; return; } p = malloc(sizeof(*p)); p->count = 1; p->word = malloc(strlen(s)+1); strcpy(p->word, s); p->next = bin[h]; // 栈式插入,从表头处插入,而非从表的尾部插入 bin[h] = p;}void main(int argc, char **argv){ int i; char buf[32]; for(i=0; i
next) printf("%s:%d\n", p->word, p->count);}

 

以哈希表为数据结构统计词频大致思路:

构造一个结构体数组 struct node_t bin[质数]; 称为哈希表

构造一个哈希函数,给定一个 字符串 返回一个整数,这个整数哈希表的键值;

每获取一个字符串,把字符串 与 它的所对应键值的node 节点为表头的链表上的所有单词比较,若存在相同的,count++,否则增加到链表节点,把单词挂到该节点上,并置count=1;

输出的时候,从哈希表的0键值处开始,遍历所有链表,并输出各非空节点;

 

转载于:https://www.cnblogs.com/mathzzz/archive/2012/09/13/2683772.html

你可能感兴趣的文章
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>
12th week blog
查看>>
dijkstra (模板)
查看>>
python小记(3)
查看>>
编译Linux驱动程序 遇到的问题
查看>>
大型分布式网站架构技术总结
查看>>
HDU 1017[A Mathematical Curiosity]暴力,格式
查看>>
[算法之美] KMP算法的直观理解
查看>>
EntityFramework 性能优化
查看>>
【ASP.NET开发】菜鸟时期的ADO.NET使用笔记
查看>>
android圆角View实现及不同版本号这间的兼容
查看>>
OA项目设计的能力③
查看>>
Cocos2d-x3.0 文件处理
查看>>
全面整理的C++面试题
查看>>