给出这么一个问题,统计《圣经》出现的所有单词以及其出现次数,单词定义为两个空格之间的词语,当然开头结尾这种自然也是单词。

容易想到的是用C++库函数的map,但这其实并不是最优的选择,根据实际情况选择最优的数据结构,比直接调库,要好玩的多。

怎么办呢,《圣经》中有29131个不同的单词,我们可以做一个散列,大小用最接近单词数量的质数,乘数定义为31,这也是散列技术比较传统的办法。

如果冲突的话,就把冲突的词放在一个链表上。下面给出的代码,会比简单调用库函数快十倍不止:

#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;struct Node{char *word;int count;Node *next;
}node;const int NHASH = 29989;
const int MULT = 31;
Node *bin[NHASH + 10];unsigned int hash(char *p);
void incWord(char *str);int main(){freopen("in.txt", "r", stdin);for (int i = 0; i < NHASH; ++i){bin[i] = NULL;}char str[10000];while (cin >> str){incWord(str);}for (int i = 0; i < NHASH; ++i){for (Node *p = bin[i]; p != NULL; p = p->next){cout << p->word << "  " << p->count << endl;}}return 0;
}unsigned int hash(char *p){unsigned int h = 0;for (; *p; ++p){h = MULT * h + *p;}return h % NHASH;
}void incWord(char *str){unsigned int h = hash(str);Node *p = NULL;for (p = bin[h]; p != NULL; p = p->next){if (strcmp(str, p->word) == 0){(p->count)++;return;}}p = new Node();p->count = 1;p->word = new char(strlen(str) + 1);strcpy(p->word, str);p->next = bin[h];bin[h] = p;
}

《编程珠玑》代码之路21:设计一个比C++库函数快一个数量级的《圣经》单词统计功能相关推荐

  1. 【编程珠玑】第八章 算法设计技术

    一,概述 问题:求一维数组中连续子向量的最大和. 例如:a[6]={3,4,-2,-9,10,8}; 则最大连续子向量的和 为 10+8 = 18 1)解法一:简单算法 #include <st ...

  2. 编程笔试(解析及代码实现):求和为N的正整数序列之实现一个函数,输入为一个正整数N (比如100),输出为所有和等于N的[连续]正整数序列

    编程笔试(解析及代码实现):求和为N的正整数序列之实现一个函数,输入为一个正整数N (比如100),输出为所有和等于N的[连续]正整数序列 目录 题目描述 代码实现 题目描述 求和为N的正整数序列:实 ...

  3. [转] Web前端研发工程师编程能力飞升之路

    [转] Web前端研发工程师编程能力飞升之路 分类: Javascript | 转载请注明: 出自 海玉的博客 今天看到这篇文章.写的非常有意思.发现自己还有很长的一段路要走. [背景] 如果你是刚进 ...

  4. 最大字段和各种不同算法实现(参考编程珠玑)

    求最大字段和的算法很好的讲解了算法设计技术.根据<编程珠玑>上的描述,简单实现各种不同的算法.如下: 1.最简单的方法:对所有满足0≤i≤j<n的(i,j)整数进行迭代.对每个整数对 ...

  5. c语言编程票务系统,C语言课程设计票务管理系统

    C语言课程设计票务管理系统 C语言课程设计1西安交通大学城市学院C语言程序设计课程设计报告题目图书信息管理系统专业自动化班级自动化101姓名陈蕾完成日期2012年5月31日C语言课程设计2目录第一章项 ...

  6. 【编程珠玑】陪着奶猫看看书--《编程珠玑》第一章

    陪着奶猫看看书–<编程珠玑>第一章 首先说说小奶猫我为什么要读<编程珠玑>这本神作,当年小奶猫刚刚进入大学时候是个纯洁的少年,啥都不懂,要是哪个女生下午在外面问我带身份证没有, ...

  7. 《编程珠玑》高清pdf版

    下载地址:网盘下载 作者简介 编辑 Jon Bentley是位于新泽西州Murray Hill的朗讯贝尔实验室计算机科学研究中心的技术委员会委员,Jon自1998年就成为Dr. Dobb's Joum ...

  8. 数字温度计的c语言编程,基于DS18B20数字温度计的设计(全文完整版)

    <基于DS18B20数字温度计的设计.doc>由会员分享,可免费在线阅读全文,更多与<基于DS18B20数字温度计的设计>相关文档资源请在帮帮文库(www.woc88.com) ...

  9. 编程珠玑译-Column 1:开篇

    这个程序的问题是简单的,"我该怎么样给你个磁盘文件做排序?"  在我告诉你我是怎么犯下我第一个错误之前,让我给你一个机会去做得比我还好.你会怎么回答? 1.1 一次友好的谈话 我的 ...

最新文章

  1. 针对杂乱环境下抓取物体的机器人学习
  2. python数据处理实例-入门Python数据分析最好的实战项目(一)
  3. antd中的form表单 initialValue导致数据不更新问题
  4. Python之web开发(二):python使用django框架搭建网站之新建文件
  5. boost::convert模块实现默认转换器fail失败的测试程序
  6. 山西计算机工程师职称英语,山西中级工程师职称在线查询
  7. Tomcat显示文件列表
  8. DataNode的流式接口
  9. 神经网络识别车牌字符
  10. JS学习:第一周——NO.1预解释
  11. Redash本地开发环境搭建
  12. python如何截长图_Python网页截图/屏幕截图/截长图如何实现?
  13. 了解数据分析师,转行数据分析师,成为数据分析师
  14. 铁甲小宝像车轮的是什么机器人_铁甲小宝里的机器人都叫什么名字啊
  15. 有趣的23000----整理(09)C,D词根
  16. (附代码)基于Python对交通路口的红绿灯进行颜色检测
  17. CVPR 2022 Oral | 视频文本预训练新SOTA,港大、腾讯ARC Lab推出基于多项选择题的借口任务
  18. Power BI-同比、环比、累计值
  19. 穆易天气app代码(二)
  20. 【探索】利用 canvas 实现数据压缩

热门文章

  1. 网页页面中的几种勾选的效果制作,勾选框
  2. LINX命令压缩和归档
  3. 计算机网络第二章物理层部分习题答案
  4. ftp上传显示服务器错误,FTP文件夹错误:打开FTP服务器上的文件夹时发生错误
  5. PDF阅读器如何在手机上安装
  6. 重装系统出现蓝屏的原因
  7. mmdetection_训练自己的数据集
  8. 巴比特 | 元宇宙每日必读:美版权局判定用AI工具生成的图片不受版权保护,官方解释:AI生成具有不可预测性,但并非一刀切...
  9. html chrome中引入外部字体,强制Chrome在CSS中使用外部字体
  10. 盘点 Oracle 11g 中新特性带来的10大性能影响