一篇文章中求出现频率最高的10个单词(C++实现tanglanting) | 您所在的位置:网站首页 › 副词频率最高的十个单词 › 一篇文章中求出现频率最高的10个单词(C++实现tanglanting) |
Write a program for displaying the ten most frequent words in a file such that your program should be efficient in all complexity measures.
Requirement: C/C++.
Submission: Source code and a document to describe your solution. Source: 思路:用hashmap 进行每个word进行记录,然后就可以在利用堆排序中找到10个最频率最高的。 1:记录每个单词的个数; 一种做法: 其实C++有提供hashmap来进行记录key_value进行存放。用法像:map 二种做法: 自己定义hash函数进行key_value的存放: 2: 利用记录过的《单词,次数》进行排序; 第一种做法:每次找一个最大的,这样找10次那就效率是O(n*10); 第二种做法:用堆来进行:效率为O(n*log10)这个效率比较高一点。
下面是选用:自己定义hash函数进行key_value的存放:第二种做法:用堆来进行:效率为O(n*log10)这个效率比较高一点。下面代码是实现:代码的优化还有很大空间如:单词的分割只考虑空格,其它的方式先不考虑。 //dazhengshumore.cpp
C++ #include #include #include #include #include #include #include #define MAX 10000 #define M 10 #define DEBUG using namespace std; class node_C{ private: char *data; int coutnum; public : node_C():data(NULL),coutnum(0){}; node_C(const char *t):coutnum(0){ data=new char[strlen(t)+1]; strcpy(data,t); }; node_C(const node_C &node_t){ if(node_t.data==NULL) return ; data=new char[strlen(node_t.data)+1]; strcpy(data,node_t.data); coutnum=node_t.coutnum; } node_C & operator =(const node_C & node_t){ if(this==&node_t) return *this; node_C temp=node_C(node_t); char *temp_t=temp.data; temp.data=data; data=temp_t; coutnum=temp.coutnum; } bool operator ==(const node_C &node_t){ if(this==&node_t) return true; if((node_t.coutnum==coutnum)&&(strcmp(node_t.data,data)==0)) return true; return false; } int operator++(){ return ++coutnum; } int operator++(int){ int temp=coutnum; coutnum++; return temp; } void display(){ cout |
CopyRight 2018-2019 实验室设备网 版权所有 |