17.9 设计一个方法,找出任意指定单词在一本书中的出现频率。

解法:

1 单次查询

遍历这本书的每个单词,计算给定单词出现的次数。时间复杂度O(n),我们无法继续优化它,因为书中的每个单次都需要访问一次。当然,如果我们假设书中的单词是均匀分布的,那我们就可以只统计前半本书某个单次出现的次数,然后乘以2;或是只统计前四分之一本书某个单次出现的次数,然后乘以4。

2 多次查询

如果我们要重复执行查询,那么,或许值得我们多花些时间,多花些内存,对全书进行预处理。我们可以构造一个散列表,将单词映射到该单词的出现频率。这么一来,任意单词的频率就可以在O(1)时间内找的,具体事项代码如下:

#include<string>
#include<map>
#include<iostream>
using namespace std; map<string,int> setupDictionary(string book[],int n)
{
int i;
map<string,int> mp;
for(i=;i<n;i++)
{
mp[book[i]]++;
}
return mp;
} int getFrequency(map<string,int> &mp,string s)
{
return mp[s];
} int main()
{
string str[]={"a","b","a","c","d","d","e","f","e","e"};
map<string,int> mp=setupDictionary(str,);
cout<<getFrequency(mp,"a")<<endl;
}

最新文章

  1. DataGridView合并单元格
  2. leetcode 153. Find Minimum in Rotated Sorted Array --------- java
  3. HDU 4630 No Pain No Game 树状数组+离线查询
  4. struts2 package元素配置
  5. (转)iOS 开发,工程中混合使用 ARC 和非ARC
  6. Apriori算法-数组-C语言
  7. ELK日志分析系统的应用
  8. vs2010等宽字体设置
  9. ●BZOJ 2693 jzptab
  10. ELK学习记录一 :初识ELK
  11. ARM 处理器:RISC与CISC 是什么?【转】
  12. fusion使用——程序集绑定冲突工具
  13. scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别
  14. gc的real时间比user时间长
  15. Feature Extractor[DenseNet]
  16. 【HDU1219】AC Me(水题)
  17. 主窗口QMainWindow和启动画面
  18. pl-svo代码解读
  19. SPFA 最短路
  20. Js 过滤emoji表情...持续补充中..

热门文章

  1. (三)学习MVC之密码加密及用户登录
  2. MySQL 存储过程删除大表
  3. memcache redundancy机制分析及思考
  4. create Context Menu in Windows Forms application using C# z
  5. SimpleHttpServer的学习之UML
  6. 神经网络的学习 Neural Networks learing
  7. Obective-C之宏定义
  8. AJAX— 异步传输
  9. sql-表值函数tvf
  10. Visual Studio配置OpenCV设置全局的继承属性