找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,因为它代表着业 ...
随机推荐
- Leetcode 457.环形数组循环
环形数组循环 给定一组含有正整数和负整数的数组.如果某个索引中的 n 是正数的,则向前移动 n 个索引.相反,如果是负数(-n),则向后移动 n 个索引. 假设数组首尾相接.判断数组中是否有环.环中至 ...
- Leetcode 456.132模式
132模式 给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj.设计 ...
- 【bzoj1449/bzoj2895】[JSOI2009]球队收益/球队预算 费用流
题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 题解 费用流 由于存在一 ...
- Git的使用小结
1. git是一种分布式版本控制工具.目前项目中比较常见的版本控制器有SVN.CVS等,这些版本控制工具属于集中式版本控制器.集中式版本控制器,有一个中央服务器,开发人员的开发机从主服务器上下载了项目 ...
- Server-Side Rendering(服务端渲染)的优点与缺点
优点 1. SEO 客户端渲染,页面中只有初始的几个html容器,js生成内容填充到容器中,爬虫只能识别到初始的html容器,js生成的内容一般不会被识别,而服务端渲染直接给出html,爬虫可以识别到 ...
- Python基础教程总结(二)
上周总结了一下Python的一些基本数据类型和用法.这次总结一下4-9章的内容,完后,赶紧学以致用吧. 5. 第四章——字典:当索引不好用时 字典是Python中唯一内建的映射类型.字典中的值并没有特 ...
- fzu 1753 质因数的应用
Another Easy Problem Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- Android上下文Context
Android上下文Context介绍 在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中时刻的在与它打交道,例如:Service.BroadcastReceiv ...
- 46深入理解C指针之---内存分析
一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...
- 二、git remote
为了便于管理,Git要求每个远程主机都必须指定一个主机名 git remote命令就用于管理主机名. 不带选项的时候,git remote命令列出所有远程主机 $ git remote origin ...