一篇文章中求出现频率最高的10个单词(C++实现tanglanting) 您所在的位置:网站首页 副词频率最高的十个单词 一篇文章中求出现频率最高的10个单词(C++实现tanglanting)

一篇文章中求出现频率最高的10个单词(C++实现tanglanting)

2024-01-09 07:11| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有