找top 10信息
本文章内容来源于《程序猿面试宝典》。
题目:
有1千万条短信,以文本文件的形式保存。一行一条,有反复。请用5分钟时间,找出反复出现最多的前10条。
解析:
思路:
同Hash Code且等长就疑似同样,比較一下。同样记录仅仅加1次进hash table,但将反复次数加1。
一次扫描以后,已经记录各自的反复次数。进行第二次hash table的处理。
用线性时间选择可在O(n)的级别上完毕前10条的寻找。分组后每份中的top10必须保证各不同样,可hash来保证,也可直接按hash值的大小来分类。
i是树的深度,也是短信第i个字母。
该问题主要是解决双方面的内容。一是内容载入,二是短信内容比較。採用文件内存映射技术能够解决内容载入的性能问题(不只不须要调用文件I/O函数,并且也不须要每读出一条短信都分配一小块内存),而使用树技术能够有效降低比較的次数。
struct TNode
{
BYTE *pText;
//直接指向文件映射的内存地址
DWORD dwCount;
//计算器,记录此节点的同样短信数
TNode *ChildNodes[256];
//子节点数据,因为一个字母的ASCII值不可能超过256,所以子节点也不可能超过256
TNode()
{
//初始化成员
}
~TNode()
{
//释放资源
}
}; //int nIndex是字母下标
void CreateChilsNode(TNode *pNode,const BYTE* pText,int nIndex)
{
if(pNode->ChildNodes[pText[nIndex]]==NULL)
{
//假设不存在此子节点,就创建.TNode构造函数应该有初始化代码
//为了处理方便。这里也能够在创建的同一时候把此节点加到一个数组中
pNode->ChildNodes[pText[nIndex]]=new TNode;
}
if(pText[nIndex+1]=='\0')
{
//此短信已完毕。计数器加1,并保存此短信内容
pNode->ChildNodes[pText[nIndex]]->dwCount++;
pNode->ChildNodes[pText[nIndex]]->pText=pText;
}
else //if(pText[nText]!='\0')
{
//假设还未结束。就创建下一级节点
CreateNode(pNode->ChildNodes[pText[nIndex]],pText,nText+1);
}
} //创建根节点,pTexts是短信数组,dwCount是短信数量(这里是1千万)
void CreateRootNode(const BYTE **pTexts,DWOED dwCount)
{
TNode RootNode;
for(DWORD dwIndex=0;dwIndex<dwCount;dwIndex++)
{
CreateNode(&RootN,pTexts[dwIndex],0);
}
//全部节点按dwCount的值进行排序
//取前10个节点。显示结果
}
找top 10信息的更多相关文章
- TOP 10开源的推荐系统简介
最近这两年推荐系统特别火,本文搜集整理了一些比较好的开源推荐系统,即有轻量级的适用于做研究的SVDFeature.LibMF.LibFM等,也有重量级的适用于工业系统的 Mahout.Oryx.Eas ...
- OWASP Top 10 – 2013, 最新十大安全隐患(ASP.NET解决方法)
OWASP(开放Web软体安全项目- Open Web Application Security Project)是一个开放社群.非营利性组织,目前全球有130个分会近万名会员,其主要目标是研议协助解 ...
- OWAP Top 10
2013 Top 10 List A1-Injection Injection flaws, such as SQL, OS, and LDAP injection occur when untr ...
- Top 10 Mistakes Java Developers Make(转)
文章列出了Java开发者最常犯的是个错误. 1.将数组转换为ArrayList 为了将数组转换为ArrayList,开发者经常会这样做: ? 1 List<String> list = A ...
- ASP.NET Core中的OWASP Top 10 十大风险-失效的访问控制与Session管理
不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...
- OWASP TOP 10 2017中文译文
说明:owasp top 10其实有中文官方版本:本文是按着英文版进行翻译而成. 官方中文版:http://www.owasp.org.cn/owasp-project/OWASPTop102017v ...
- Chapter 3 Top 10 List
3.1 Introduction Given a set of (key-as-string, value-as-integer) pairs, then finding a Top-N ( wher ...
- 2016 Top 10 Android Library
过去的 2016 年,开源社区异常活跃,很多个人与公司争相开源自己的项目,让人眼花缭乱,然而有些项目只是昙花一现,有些项目却持久创造价值,为开发者提供了极大的便利,这些终究由时间来判断.今天,我就来整 ...
- Web漏洞总结: OWASP Top 10
本文原创,更多内容可以参考: Java 全栈知识体系.如需转载请说明原处. 开发安全 - OWASP Top 10 在学习安全需要总体了解安全趋势和常见的Web漏洞,首推了解OWASP,因为它代表着业 ...
随机推荐
- PHP 函数 ignore_user_abort()
ignore_user_abort 设置与客户机断开是否会终止脚本的执行. 本函数返回 user-abort 设置的之前的值(一个布尔值). int ignore_user_abort ([ st ...
- Convolutional Networks for Image Semantic Segmentation
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/52857657 把前段时间自己整理的一个 ...
- 实现chrome多用户独立cookie
2018-02-08 10:58:57 在浏览器设置中添加一个用户并创建桌面快捷方式,属性中我们可以发现 "C:\Program Files (x86)\Google\Chrome\Appl ...
- redhat linux 从/home目录扩展空间至/根目录
查看分区大小 [root@easdb01 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/vg_easdb01-lv_ro ...
- 使用jackson解析JSON数据
本文介绍使用jackson来对json数据进行解析操作 首先,需要去官网下载jackson,本文使用的是(jackson-all-1.9.11.jar) 主要通过ObjectMapper对json进行 ...
- WebSocket & websockets
WebSocket & websockets https://en.wikipedia.org/wiki/WebSocket https://developer.mozilla.org/en- ...
- Linux Shell系列教程之(二)第一个Shell脚本
本文是Linux Shell系列教程的第(二)篇,更多shell教程请看:Linux Shell系列教程 通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们通过一个 ...
- iOS学习笔记42-Swift(二)函数和闭包
上一节我们讲了Swift的基础部分,例如数据类型.运算符和控制流等,现在我们来看下Swift的函数和闭包 一.Swift函数 函数是一个完成独立任务的代码块,Swift中的函数不仅可以像C语言中的函数 ...
- iOS学习笔记29-系统服务(二)通讯录
一.通讯录 iOS中的通讯录是存储在数据库中的,由于iOS的权限设计,开发人员是不允许直接访问通讯录数据库的,实现通讯录操作需要使用到AddressBook.framework框架. AddressB ...
- 性能测试之七--jdbc
jdbs用任意协议打开都行,具体脚本见下 在vuser_init里面 #include "Ptt_Mysql.h" vuser_init() { lr_load_dll (&quo ...