海量数据处理笔试面试题4
数据岗位招聘面试题与参考回答(某大型集团公司)

招聘数据岗位面试题与参考回答(某大型集团公司)面试问答题(总共10个问题)第一题题目:请简要描述您对数据岗位的理解,以及您认为自己具备哪些与数据岗位相关的技能和经验?答案:1.理解描述:•数据岗位,顾名思义,是指专门负责数据收集、整理、分析、处理和解读的岗位。
它要求从业者不仅要有扎实的数据分析能力,还要具备良好的数据敏感度和逻辑思维能力。
•在我看来,数据岗位不仅仅是简单地处理数据,更是通过数据来发现规律、预测趋势、辅助决策的重要角色。
它需要将数据转化为有价值的信息,从而为企业的战略规划和运营管理提供支持。
2.相关技能和经验:•数据分析技能:熟练掌握Excel、SQL、Python等数据分析工具,能够进行数据清洗、整理、分析和可视化。
•编程能力:具备一定的编程基础,能够使用Python、R等编程语言进行数据挖掘和机器学习。
•统计学知识:了解统计学的基本原理和方法,能够运用统计模型进行数据分析和预测。
•逻辑思维:具备良好的逻辑思维能力,能够从海量数据中提炼出有价值的信息。
•沟通能力:能够清晰、准确地表达分析结果,为决策者提供有针对性的建议。
解析:这道题目考察应聘者对数据岗位的理解程度以及自身技能和经验的匹配度。
在回答时,应聘者应首先阐述自己对数据岗位的理解,然后结合自己的实际情况,详细列举自己具备的相关技能和经验。
以下是一些回答时的注意事项:1.结合自身情况:回答时,要结合自己的实际经验,避免空洞的理论描述。
2.突出重点:在列举技能和经验时,要突出与数据岗位相关的关键能力,如数据分析、编程、统计学等。
3.具体实例:可以结合具体的项目或案例,展示自己运用相关技能解决问题的能力。
4.持续学习:强调自己对于新技能和知识的持续学习态度,以适应不断变化的数据岗位需求。
第二题题目:请描述一下您在数据分析项目中遇到过的一个挑战,以及您是如何解决这个挑战的。
答案:在之前的一个数据分析项目中,我面临的挑战是处理一个包含大量缺失值的数据集。
Hadoop面试题目及答案

Hadoop面试题目及答案Hadoop面试45个题目及答案1.Hadoop集群可以运行的3个模式?单机(本地)模式伪分布式模式全分布式模式2. 单机(本地)模式中的注意点?在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上。
这里同样没有DFS,使用的是本地文件系统。
单机模式适用于开发过程中运行MapReduce程序,这也是最少使用的一个模式。
3. 伪分布模式中的注意点?伪分布式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上Hadoop被安装在cd/usr/lib/hadoop-0.20/。
8. Namenode、Job tracker和task tracker 的端口号是?Namenode,70;Job tracker,30;Task tracker,60。
9. Hadoop的核心配置是什么?Hadoop的核心配置通过两个xml文件来完成:1,hadoop-default.xml;2,hadoop-site.xml。
这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在。
10. 那当下又该如何配置?Hadoop现在拥有3个配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。
这些文件都保存在conf/子目录下。
11. RAM的溢出因子是?溢出因子(Spill factor)是临时文件中储存文件的大小,也就是Hadoop-temp目录。
12. fs.mapr.working.dir只是单一的目录?fs.mapr.working.dir只是一个目录。
13. hdfs-site.xml的3个主要属性?.dir决定的是元数据存储的路径以及DFS的存储方式(磁盘或是远端)dfs.data.dir决定的是数据存储的路径fs.checkpoint.dir用于第二Namenode 14. 如何退出输入模式?退出输入的方式有:1,按ESC;2,键入:q(如果你没有输入任何当下)或者键入:wq(如果你已经输入当下),并且按下Enter。
storm 面试题

storm 面试题Storm面试题1. Introduction to StormStorm是一个开源的分布式实时计算系统,用于处理大规模实时数据流。
它是一个可靠和高效的系统,可以将海量数据在分布式集群上进行并行处理,实现实时分析和计算。
本文将介绍Storm的工作原理、应用场景以及面试常见问题。
2. Storm的工作原理Storm使用了一种称为"Topology"的数据处理模型,其中包含多个组件,包括Spout、Bolt和Stream。
Spout负责数据源的读取和发送,Bolt负责数据转换和处理,Stream用于在Spout和Bolt之间传递数据。
Storm的工作流程如下:(1) 数据流入系统,由Spout接收数据并发送给Bolt。
(2) Bolt对接收到的数据进行处理和计算。
(3) 处理完成后,Bolt可以发送数据到其他Bolt,形成数据流的连续处理。
(4) 最后,数据可以被存储到数据库、文件系统或其他外部系统中。
Storm的分布式架构使得它能够处理大规模数据流,并实现高可用性和容错性。
它将工作负载分散到集群中的多台计算机上,并通过消息传递机制实现组件间的通信。
3. Storm的应用场景Storm在实时数据分析和处理方面具有广泛的应用场景,包括但不限于以下几个方面:(1) 金融领域:Storm可以用于实时风险管理、交易监控和欺诈检测。
它能够对流式数据进行复杂计算和规则验证,以实现实时预警和决策支持。
(2) 电信领域:Storm可以用于网络监控和故障诊断,实时分析和处理大量网络数据。
它可以帮助运营商及时发现并解决网络问题,提高网络运行的稳定性和可靠性。
(3) 电商领域:Storm可以用于实时推荐系统、广告投放和用户行为分析。
它能够根据用户的实时行为和偏好生成个性化推荐,提高用户购物体验和销售转化率。
(4) 物联网领域:Storm可以用于实时监测和分析传感器数据,实现设备状态监控和异常检测。
大数据方案面试题目及答案

大数据方案面试题目及答案一、题目:请根据以下情景描述,设计一个大数据方案,提供可行的解决方案,并解释其实施步骤和相关技术工具。
情景描述:某互联网公司拥有海量用户,每天生成的数据量庞大,包括用户行为数据、服务器日志、社交网络数据等。
该公司希望通过对这些大数据进行挖掘,为产品改进、用户画像、市场营销等方面提供支持。
要求:1. 分析并说明如何收集、存储和处理这些大数据。
2. 提出针对以上数据的应用场景,并描述需要采用的技术工具。
3. 阐述如何保证数据安全和隐私保护。
二、解决方案:1. 数据收集、存储和处理针对大数据的收集,可以使用流式处理技术,如Apache Kafka,用于高吞吐量的实时数据流处理。
通过构建数据管道,将各种数据源的数据实时导入到数据湖中,例如Hadoop分布式文件系统(HDFS)。
对于大数据的存储,可以采用分布式存储系统,如Hadoop的HBase,用于高可靠性的海量数据存储和快速检索。
数据可以按照数据类型和业务需求进行合理划分和存储,提高查询效率。
大数据的处理可以采用Apache Spark进行分布式计算和数据处理。
Spark提供了强大的数据分析和机器学习库,可用于处理海量数据,实现复杂的数据挖掘任务。
2. 应用场景和技术工具场景一:用户行为数据分析通过收集用户行为数据,使用Spark的机器学习库进行用户画像分析。
可以运用聚类算法、关联规则挖掘等技术,发现用户的兴趣偏好和行为习惯,为产品改进和个性化推荐提供支持。
场景二:服务器日志监控使用Kafka实时收集服务器日志,并将数据导入HBase进行存储。
通过Spark Streaming技术对日志数据进行实时监控和异常检测,及时发现并解决服务器故障。
场景三:社交网络数据分析收集社交网络平台上的用户数据,使用GraphX图计算引擎进行社交网络分析。
通过建立用户关系图,分析用户社交圈子、影响力等,为精准的社交推荐和营销提供依据。
3. 数据安全和隐私保护为了保证数据的安全性和隐私保护,可以采取以下措施:- 数据加密:对敏感数据进行加密处理,确保数据在传输和存储过程中不被窃取。
数据岗位招聘面试题与参考回答

招聘数据岗位面试题与参考回答面试问答题(总共10个问题)第一题题目:请您描述一下您对数据分析师这一岗位的理解,以及您认为作为一名优秀的数据分析师应该具备哪些核心能力?答案:作为一名数据分析师,我认为我的主要职责是从大量数据中提取有价值的信息,通过数据挖掘、统计分析等方法,帮助公司或团队做出更加明智的决策。
以下是我认为优秀的数据分析师应具备的核心能力:1.数据分析技能:熟练掌握至少一种数据分析软件(如Excel、SPSS、R、Python等),能够进行数据清洗、数据预处理、数据分析、数据可视化等工作。
2.统计知识:具备扎实的统计学基础,能够正确运用各种统计方法,如描述性统计、推断性统计、假设检验等。
3.业务理解:对所从事的行业有深入的理解,能够将数据分析与业务需求相结合,提出有针对性的分析建议。
4.沟通能力:能够清晰、准确地表达分析结果,无论是通过书面报告还是口头汇报,都要确保信息传递的有效性。
5.解决问题的能力:面对复杂的问题时,能够运用逻辑思维和创造性思维找到解决方案。
6.持续学习:数据分析和统计方法在不断进步,优秀的数据分析师应具备持续学习的态度,不断更新自己的知识库。
解析:这一题旨在考察应聘者对数据分析师岗位的理解程度,以及对所需能力的自我评估。
优秀的数据分析师不仅需要具备扎实的技术能力,还需要具备良好的业务敏感度和沟通技巧。
答案中提到的各项能力都是数据分析师岗位的关键要求,通过这样的回答,面试官可以初步判断应聘者的专业背景和综合素质。
第二题题目:请描述一下您在过去的工作或项目中,如何处理过一次数据清洗的难题?您遇到了哪些挑战,又是如何克服这些挑战的?答案:在过去的一个项目中,我负责对一家大型电商平台的用户数据进行清洗和分析。
在数据清洗过程中,我遇到了以下挑战:1.数据质量问题:原始数据中存在大量的缺失值、异常值和重复数据。
2.数据格式不一致:不同来源的数据格式不统一,给数据整合带来了困难。
面试题目-大数据量海量数据处理

发信人: phylips (星星||一年磨十剑), 信区: Algorithm标题: 面试题目-大数据量专题发信站: 兵马俑BBS (Thu Nov 26 16:30:44 2009), 本站()1. 给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。
2. 有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。
要你按照query的频度排序3. 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。
返回频数最高的100个词4.海量日志数据,提取出某日访问百度次数最多的那个IP。
5.2.5亿个整数中找出不重复的整数,内存空间不足以容纳这2.5亿个整数。
6.海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。
7.怎么在海量数据中找出重复次数最多的一个8.上千万or亿数据(有重复),统计其中出现次数最多的前N个数据。
统计可以用hash,二叉数,trie树。
对统计结果用堆求出现的前n大数据。
增加点限制可以提高效率,比如出现次数>数据总数/N的一定是在前N个之内9.1000万字符串,其中有些是相同的(重复),需要把重复的全部去掉,保留没有重复的字符串。
请问怎么设计和实现?10.一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前十个词。
请给出思想,给时间复杂度分析。
11.一个文本文件,也是找出前十个最经常出现的词,但这次文件比较长,说是上亿行或者十亿行,总之无法一次读入内存,问最优解。
12.有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复要按照query的频度排序13.100w个数中找最大的前100个数14.寻找热门查询:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
数据分析面试题及答案

数据分析面试题及答案简介:数据分析是当今社会中一个非常重要的职业。
在现代信息化的背景下,大量的数据被产生并储存下来。
数据分析师通过收集、处理和解释这些数据,为企业提供决策支持和业务优化的建议。
而数据分析面试作为入职数据分析领域的重要环节,通常需要应聘者具备扎实的数据分析知识和解题能力。
本文将介绍一些常见的数据分析面试题目,并提供相应的答案。
一、数据清洗和数据准备1. 什么是数据清洗?为什么在数据分析过程中需要进行数据清洗?数据清洗是指通过删除、更正、转换数据中的错误、不完整或不准确的部分,以保证数据的质量和可靠性。
在数据分析过程中,原始数据常常会存在一些问题,如数据缺失、重复、异常值等。
进行数据清洗可以排除这些问题,确保数据可以准确地反映现实情况,并为后续分析提供可靠的基础。
2. 数据清洗的步骤有哪些?请简要描述。
数据清洗通常包括以下步骤:- 缺失值处理:对于存在缺失值的数据,可以选择删除缺失值、填补缺失值或使用插值等方法进行处理。
- 重复值处理:对于重复值,可以选择保留一个或全部删除,具体取决于数据分析的需求。
- 异常值处理:对于异常值,可以通过排查数据采集过程中的错误或异常,或者通过统计学方法鉴定并处理。
- 数据类型转换:将数据转换为合适的类型,如将文本转换为数字、日期转换为特定的格式等。
- 无关变量删除:排除对分析结果没有影响或没有统计学意义的变量。
二、数据分析方法与工具1. 请简述线性回归分析的原理和应用场景。
线性回归分析是一种用于探索自变量与因变量之间线性关系的统计方法。
它基于最小二乘法确定一条直线,拟合出最佳的线性模型。
线性回归广泛应用于预测和预测建模,例如市场营销分析、销售预测、经济预测等。
2. 解释一下决策树算法的原理及其在数据分析中的应用。
决策树算法通过构建一个树形结构模型,基于特征的不同取值进行决策。
它将一个问题不断分割为更小的子问题,直到最终达到一个决策。
决策树算法在数据分析中应用广泛,如分类问题和预测问题。
海量数据处理笔试面试题4

海量数据处理专题(一)——开篇2010-10-08 13:03转载自08到北京最终编辑08到北京大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯这样的一些涉及到海量数据的公司经常会问到。
下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。
下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。
本贴从解决这类问题的方法入手,开辟一系列专题来解决海量数据问题。
拟包含以下几个方面。
1.Bloom Filter2.Hash3.Bit-Map4.堆(Heap)5.双层桶划分6.数据库索引7.倒排索引(Inverted Index)8.外排序9.Trie树10.MapReduce海量数据处理专题(二)——Bloom Filter2010-10-08 13:04转载自08到北京最终编辑08到北京【什么是Bloom Filter】Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。
Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。
因此,Bloom Filter不适合那些“零错误”的应用场合。
而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。
这里有一篇关于Bloom Filter的详细介绍,不太懂的博友可以看看。
【适用范围】可以用来实现数据字典,进行数据的判重,或者集合求交集【基本原理及要点】对于原理来说很简单,位数组+k个独立hash函数。
将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
海量数据处理专题(一)——开篇2010-10-08 13:03转载自08到北京最终编辑08到北京大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯这样的一些涉及到海量数据的公司经常会问到。
下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。
下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。
本贴从解决这类问题的方法入手,开辟一系列专题来解决海量数据问题。
拟包含以下几个方面。
1.Bloom Filter2.Hash3.】4.Bit-Map5.堆(Heap)6.双层桶划分7.数据库索引8.倒排索引(Inverted Index)9.外排序10.Trie树11.MapReduce海量数据处理专题(二)——Bloom Filter2010-10-08 13:04【转载自08到北京最终编辑08到北京【什么是Bloom Filter】Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。
Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。
因此,Bloom Filter不适合那些“零错误”的应用场合。
而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。
这里有一篇关于Bloom Filter的详细介绍,不太懂的博友可以看看。
【适用范围】可以用来实现数据字典,进行数据的判重,或者集合求交集【基本原理及要点】对于原理来说很简单,位数组+k个独立hash函数。
将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。
同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。
所以一个简单的改进就是counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。
还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m的大小及hash函数个数。
当hash函数个数k=(ln2)*(m/n)时错误率最小。
在错误率不大于E的情况下,m 至少要等于n*lg(1/E)才能表示任意n个元素的集合。
但m还应该更大些,因为还要保证bit 数组里至少一半为0,则m应该>=nlg(1/E)*lge 大概就是nlg(1/E)倍(lg表示以2为底的对数)。
!举个例子我们假设错误率为,则此时m应大概是n的13倍。
这样k大概是8个。
注意这里m与n的单位不同,m是bit为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。
通常单个元素的长度都是有很多bit的。
所以使用bloom filter内存上通常都是节省的。
【扩展】Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。
Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。
Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。
SBF采用counter中的最小值来近似表示元素的出现频率。
相关的具体百度腾讯面试算法例子请看作者原文章:海量数据处理专题(三)——Hash2010-10-08 13:05转载自08到北京]最终编辑08到北京海量数据处理专题(三)——Hash【什么是Hash】Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。
这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。
简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系【适用范围】快速查找,删除的基本数据结构,通常需要总数据量可以放入内存。
【基本原理及要点】hash函数选择,针对字符串,整数,排列,具体相应的hash方法。
碰撞处理,一种是open hashing,也称为拉链法;另一种就是closed hashing,也称开地址法,opened addressing。
【扩展】d-left hashing中的d是多个的意思,我们先简化这个问题,看一看2-left hashing。
2-left hashing指的是将一个哈希表分成长度相等的两半,分别叫做T1和T2,给T1和T2分别配备一个哈希函数,h1和h2。
在存储一个新的key时,同时用两个哈希函数进行计算,得出两个地址h1[key]和h2[key]。
这时需要检查T1中的h1[key]位置和T2中的h2[key]位置,哪一个位置已经存储的(有碰撞的)key比较多,然后将新key存储在负载少的位置。
如果两边一样多,比如两个位置都为空或者都存储了一个key,就把新key 存储在左边的T1子表中,2-left也由此而来。
在查找一个key时,必须进行两次hash,同时查找两个位置。
这里有相关的Hash处理的例题。
!海量数据处理专题(四)——Bit-map2010-10-08 13:05转载自08到北京最终编辑08到北京海量数据处理专题(四)——Bit-map【什么是Bit-map】所谓的Bit-map就是用一个bit位来标记某个元素对应的Value,而Key 即是该元素。
由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。
如果说了这么多还没明白什么是Bit-map,那么我们来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。
那么我们就可以采用Bit-map的方法来达到排序的目的。
要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟64Bytes 的空间,将这些空间的所有Bit位都置为0(如下图:)然后遍历这5个元素,首先第一个元素是4,那么就把4对应的位置为1(可以这样操作p+(i/8)|(0x01<<(i%8)) 当然了这里的操作涉及到Big-ending和Little-ending的情况,这里默认为Big-ending),因为是从零开始的,所以要把第五位置为一(如下图):"然后再处理第二个元素7,将第八位置为1,,接着再处理第三个元素,一直到最后处理完所有的元素,将相应的位置为1,这时候的内存的Bit 位的状态如下:然后我们现在遍历一遍Bit区域,将该位是一的位的编号输出(2,3,4,5,7),这样就达到了排序的目的。
【适用范围】可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下【基本原理及要点】使用bit数组来表示某些元素是否存在,比如8位电话号码【扩展】Bloom filter可以看做是对bit-map的扩展&【问题实例】这里有相关的BitMap例题。
海量数据处理堆2010-10-20 12:59【什么是堆】概念:堆是一种特殊的二叉树,具备以下两种性质1)每个节点的值都大于(或者都小于,称为最小堆)其子节点的值2)树是完全平衡的,并且最后一层的树叶都在最左边这样就定义了一个最大堆。
如下图用一个数组来表示堆:那么下面介绍二叉堆:二叉堆是一种完全二叉树,其任意子树的左右节点(如果有的话)的键值一定比根节点大,上图其实就是一个二叉堆。
你一定发觉了,最小的一个元素就是数组第一个元素,那么二叉堆这种有序队列如何入队呢看图:假设要在这个二叉堆里入队一个单元,键值为2,那只需在数组末尾加入这个元素,然后尽可能把这个元素往上挪,直到挪不动,经过了这种复杂度为Ο(logn)的操作,二叉堆还是二叉堆。
%那如何出队呢也不难,看图:出队一定是出数组的第一个元素,这么来第一个元素以前的位置就成了空位,我们需要把这个空位挪至叶子节点,然后把数组最后一个元素插入这个空位,把这个“空位”尽量往上挪。
这种操作的复杂度也是Ο(logn)。
【适用范围】海量数据前n大,并且n比较小,堆可以放入内存【基本原理及要点】最大堆求前n小,最小堆求前n大。
方法,比如求前n小,我们比较当前元素与最大堆里的最大元素,如果它小于最大元素,则应该替换那个最大元素。
这样最后得到的n个元素就是最小的n个。
适合大数据量,求前n小,n的大小比较小的情况,这样可以扫描一遍即可得到所有的前n元素,效率很高。
【扩展】双堆,一个最大堆与一个最小堆结合,可以用来维护中位数。
【问题实例】1)100w个数中找最大的前100个数。
用一个100个元素大小的最小堆即可。
海量数据处理双层桶2010-10-20 13:00【什么是双层桶】事实上,与其说双层桶划分是一种数据结构,不如说它是一种算法设计思想。
面对一堆大量的数据我们无法处理的时候,我们可以将其分成一个个小的单元,然后根据一定的策略来处理这些小单元,从而达到目的。
【适用范围】第k大,中位数,不重复或重复的数字¥【基本原理及要点】因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。
可以通过多次缩小,双层只是一个例子,分治才是其根本(只是“只分不治”)。
【扩展】当有时候需要用一个小范围的数据来构造一个大数据,也是可以利用这种思想,相比之下不同的,只是其中的逆过程。
【问题实例】1).亿个整数中找出不重复的整数的个数,内存空间不足以容纳这亿个整数。
有点像鸽巢原理,整数个数为2^32,也就是,我们可以将这2^32个数,划分为2^8个区域(比如用单个文件代表一个区域),然后将数据分离到不同的区域,然后不同的区域在利用bitmap就可以直接解决了。
也就是说只要有足够的磁盘空间,就可以很方便的解决。
当然这个题也可以用我们前面讲过的BitMap方法解决,正所谓条条大道通罗马~~~2).5亿个int找它们的中位数。
这个例子比上面那个更明显。
首先我们将int划分为2^16个区域,然后读取数据统计落到各个区域里的数的个数,之后我们根据统计结果就可以判断中位数落到那个区域,同时知道这个区域中的第几大数刚好是中位数。