ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:20.68KB ,
资源ID:15870601      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15870601.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于哈希表的词频统计Word文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于哈希表的词频统计Word文档格式.docx

1、效果图如图20-4所示。图20-4运行结果文件内容3功能说明(1)本案例需要一个文本和一个词表,统计出每个词在文本中出现的次数。统计的原则包括以下两种:交集型:如“内存在涨价”,需要统计“内存”和“存在”(假设这两个词都在词表中)。组合型:如“中美关系在发展”,需要统计“中美”、“关系”和“中美关系”(假设这三个词都在词表中)。(2)文本和词表的格式是:输入文本是一个长句,句中只包含汉字,不包含数字、标点、空格、回车以及其它任何特殊符号。文本规模小于等于50,000汉字。输入词表的规模小于等于100,000个词,所有词不重复,词在27个汉字之间,每个词占一行。(3)实现基于词表的词频统计,从磁

2、盘中读取词表和文本,将词频统计结果输出到磁盘中,输出结果要求按字典序排序,并计算出程序运行时间。二、案例分析首先分析选取哪种数据结构,以达到高速搜索的目的。具备搜索功能的数据结构很多,如线性表、平衡树、哈希表等,当数据量庞大时,使用哈希表最合适。哈希表的概念在案例“哈希表的演示”已经做了介绍。根据需要构造一个哈希表类,在类中实现如下操作:建立哈希表将词表在内存中存储起来,这个存储的过程就是类的构造函数。案例中的词表是数量较大的词组,词与词之间用空格隔开。因此可用文件流函数getline来实现。每次调用getline函数便得到一个存有词的字符串,然后将字符串按照某种散列函数插入到哈希表中,一直到

3、词表全部存储为止。统计词频:从词表中读取文本文件,存储在一个字符串里,因为每个汉字存储在两个字节里,所以词在414个字节之间,用char word15即可表示一个词。考虑到词频统计的交集性和组合性原则,可对在文本字符串中的每个汉字与其后的汉字分别组成27个汉字的词,在词表中进行搜索,每被搜到一次,次数加1。循环直到文本末尾。哈希函数(散列函数)的实现:用char word15存储的词得到一个关键字,然后除以某个素数,得到的余数为散列地址。由于数据较多,要高速完成搜索,散列到每个相同地址的元素要尽量少,因此素数要很大,关键字的范围也很大且不重叠。按字符的字典序排序输出:而哈希表是乱序存储的,故可

4、先遍历哈希表,将所有词频大于0的词存入数组中,用快速排序法将这个数组中的元素排序。三、案例设计1类的设计根据案例分析,需要设计出两个结构体NODE和TABLE,同时还需设计一个类SYMBOLTABLE。其中:结构体NODE是哈希桶(哈希桶-哈希表中各个同地址值的元素构成的链表)中节点的数据结构,TABLE是哈希表的结构,SYMBOLTABLE类提供了诸如:哈希函数、查找词汇、遍历哈希表、将词汇插入哈希表中、快速排序等功能。(1)结构体NODEstruct NODE char word15;/关键字 int number; /关键字被访问的次数 PNODE next;/指向下一结点的指针;(2)

5、TABLEstruct TABLE int prime;/哈希桶数 PNODE * buckets;/指向结点指针的指针,可构成动态的指针数组(3)SYMBOLTABLE类图20-5SYMBOLTABLE类图数据成员PSYMBOLTABLE p;哈希符号表指针。int num;被遍历的词数。函数成员SYMBOLTABLE(char *argv);构造函数、创建哈希表。SYMBOLTABLE()析构函数。int Hash(char* word);静态哈希函数,形参:字符串,桶数。返回桶的下标。void FindNode(char* s);形参:结点指针,字符串。在某一链中找到某词汇,若找到则词频

6、数加1,且返回。void InsertIntoSymTbl(char name20);将词汇插入哈希表中。void SearchInSymTbl(char* argv);搜索某一词汇。void TraverseSymTbl(char* argv);遍历哈希表。void Qsort(PNODE* p,int s,int t);使用快速排序法。2主程序设计在主函数中声明了一个SYMBOLTABLE类的对象,依次调用哈希表类的构造函数、统计函数、输出函数即可。另外,为了记录程序的运行时间,包含了time头文件,调用clock函数,能精确到毫秒。主程序有详细的注释,清晰易懂,流程图略。四、案例实现/

7、*/ * source.h类声明头文件#1#ifndef _SUPERMARKET_/防止头文件被多次包含#2#include#3fstream#4typedef struct TABLE* PSYMBOLTABLE;/符号表构造函数,哈希符号表指针#5typedef struct NODE* PNODE; /结点指针#6#7#8char word15; /关键字#9int number;/此词被访问的次数#10PNODE next; /指向下一结点的指针#11#12#13#14int prime; /哈希桶数#15PNODE * buckets; /指向结点指针的指针,可构成动态的指针数组#

8、16#17class SYMBOLTABLE#18#19public:#20/创建哈希表#21SYMBOLTABLE()#22 /静态哈希函数,形参:字符串,桶数/返回桶的下标#23/形参:结点指针,字符串 /功能:在某一链中找到某词汇,若找到则词频数加1,且返回;#24 /将词表插入哈希表中#25/搜索某一词汇#26/遍历哈希表#27/使用快速排序法#28private:#29PSYMBOLTABLE p; /哈希符号表指针#30/被遍历的词数#31#32SYMBOLTABLE:SYMBOLTABLE(char* argv) #33#34 ifstream in(argv);#35 int

9、i,n;#36 char s15;#37 p=new struct TABLE; /建立哈希表#38 p-prime=100000; /桶数#39 num=0;#40buckets=new PNODEp-prime;/建立每个散列链#41#42 for(i=0;iprime;i+) /动态分布内存#43bucketsi=NULL;#44100000;i+)#45 #46 if(in.good()#47#48in.getline(s,16,n); /读入每个词#49sstrlen(s)=0;#50if(!strcmp(s,0)#51break;#52n=Hash(s);#53InsertIntoSymTbl(s); /将词表插入到哈希表中#54 #55 else#56 break;#57#58

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1