找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,因为它代表着业 ...
随机推荐
- SVM 与 LR的异同
LR & SVM 的区别 相同点 LR和SVM都是分类算法. 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的. LR和SVM都是监督学习算法. LR和SVM ...
- Python hash、xml、configparser、sheve、shutil模块讲解 以及 面向对象初识
今日内容: 1.hash模块2.xml模块3.configparser模块4.sheve 模块5.shutil模块 知识点一:hash什么是hash: hash是一种算法,该算法接受传入的的内容,经过 ...
- TOJ 4493 Remove Digits 贪心
4493: Remove Digits Description Given an N-digit number, you should remove K digits and make the new ...
- 【bzoj3166】[Heoi2013]Alo 可持久化Trie树+STL-set
题目描述 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG ,如名字所见,到处充满了数学的谜题.现在你拥有n颗宝石,每颗宝石 ...
- 用Vue创建一个新的项目
vue的安装 Vue.js不支持IE8及以下版本.因为Vue.js使用了ECMAScript5特性,IE8显然不能模拟.Vue.js支持所有兼容ECMAScript5的浏览器. 在用Vue.js构建大 ...
- hdu 1242(搜索)
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- LeetCode OJ--Binary Tree Level Order Traversal
http://oj.leetcode.com/problems/binary-tree-level-order-traversal/ 树的层序遍历,使用队列 由于树不是满的,还要分出每一层来,刚开始给 ...
- 微信小程序之微信支付C#后台(统一下单)
一.微信小程序支付 1.微信小程序端请求支付接口 商户在小程序中先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付.具体可以查看接口示例. 接口传入参数示例: <xm ...
- 蚂蚁金服CTO程立:金融级分布式交易的技术路径
总结: 强一致的微服务 oceanbase里面的投票选举以及多中心多地部署 单元化市异地多活的基础.支付宝是异地多活和容灾结合,而容灾的基础也是单元化.基于单元化进行单元的调度.部署.容灾. 混合云架 ...
- HDU 3534 Tree (经典树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3534 题意: 给你一棵树,问你有多少对点的距离等于树的直径. 思路: dp[i][0]表示在i的子树中 ...