找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,因为它代表着业 ...
随机推荐
- Django中间件、Auth认证
中间件 一:什么是中间件 是介于request与response处理之间的一道处理过程 二:中间件的作用 如果你想修改请求,例如被传送到view中的HttpRequest对象. 或者你想修改view返 ...
- django demo --blog
详情,请看虫师博客http://www.cnblogs.com/fnng/p/3737964.html 和https://my.oschina.net/matrixchan/blog/184445 ...
- OGNL表达式详解
OGNL表达式标签中的值有三种: 1.直接是OGNL表达式. 2.字符串需转义自OGNL表达式. 1)OGNL表达式转换为字符串显示,需要用''(单引号)引起来. 2)转为OGNL表达式的字符串,需要 ...
- 进程,线程,以及Python的多进程实例
什么是进程,什么是线程? 进程与线程是包含关系,进程包含了线程. 进程是系统资源分配的最小单元,线程是系统任务执行的最小单元. 打个比方,打开word,word这个程序是一个进程,里面的拼写检查,字数 ...
- 【bzoj2843】极地旅行社 LCT
题目描述 不久之前,Mirko建立了一个旅行社,名叫“极地之梦”.这家旅行社在北极附近购买了N座冰岛,并且提供观光服务.当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结队的游走在各个冰岛之间.Mir ...
- Spring Boot 必须先说说 Spring 框架!
现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下. Spring Boot ...
- [USACO Section 2.3] Cow Pedigrees (动态规划)
题目链接 Solution 我DP太菜啦... 考虑到一棵二叉树是由根节点以及左儿子和右儿子构成. 所以答案其实就是 左儿子方案数*右儿子方案数 . 状态定义: \(f[i][j]\) 代表深度为 \ ...
- 转 C++中不能声明为虚函数的有哪些函数
传送门 C++中不能声明为虚函数的有哪些函数 常见的不不能声明为虚函数的有:普通函数(非成员函数):静态成员函数:内联成员函数:构造函数:友元函数. 1.为什么C++不支持普通函数为虚函数? 普通函数 ...
- linux命令——ll详解
一.ll命令 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名. Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是很方便. 如果要使用此命令,可以作如下修改:打 ...
- 关于nginx所遇问题
1. 如果出现 nginx: [error] invalid PID number “” in “/usr/local/var/run/nginx/nginx.pid” 错误重新加载配置文件 /usr ...