数据结构—— 散列查找:应用实例 —— 词频统计
Posted 大彤小忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构—— 散列查找:应用实例 —— 词频统计相关的知识,希望对你有一定的参考价值。
数据结构系列内容的学习目录 → \\rightarrow →浙大版数据结构学习系列内容汇总。
5. 应用实例 —— 词频统计
应用: 文件中单词词频统计
例: 给定一个英文文本文件,统计文件中所有单词出现的频率,并输出词频最大的前10%的单词及其词频。
假设单词字符定义为大小写字母、数字和下划线,其它字符均认为是单词分隔符,不予考虑。
分析: 关键是对新读入的单词在已有单词表中查找,如果已经存在,则将该单词的词频加1,如果不存在,则插入该单词并记词频为1。
如何设计该单词表的数据结构才可以进行快速地查找和插入? 散列表!
int main()
{
int TableSize = 10000; // 散列表的估计大小
int wordcount = 0, length;
HashTable H;
ElementType word;
FILE *fp;
char document[30]="HarryPotter.txt"; // 要被统计词频的文件名
H = InitializeTable( TableSize ); // 建立散列表
if((fp = fopen(document,"r")) == NULL)
FatalError("无法打开文件!\\n");
while( !feof(fp))
{
length = GetAWord(fp, word); // 从文件中读取一个单词
if(length > 3) // 只考虑适当长度的单词
{
wordcount++; // 统计文件中单词总数
InsertAndCount( word, H );
}
}
fclose(fp);
cout << "该文档共出现" << wordcount << "个有效单词" << endl;
show( H, 10.0/100); // 显示词频前10%的所有单词
DestroyTable(H); // 销毁散列表
return 0;
}
函数show( H, 10.0/100);
:(1)统计最大词频;
(2)用一组数统计从1到最大词频的单词数;
(3)计算前10%的词频应该是多少;
(4)输出前10%词频的单词。
以上是关于数据结构—— 散列查找:应用实例 —— 词频统计的主要内容,如果未能解决你的问题,请参考以下文章