京公网安备 11010802034615号
经营许可证编号:京B2-20210330
经典的大数据问题
随着信息的高速发展,越来越多的数据信息等待处理,如何快速的从这些海量数据中找到你所需要的数据呢?这就是大数据的处理问题,下面我对几个经典的大数据问题进行分析~~~~
一. 设计算法找到每日访问百度出现次数最多的IP地址?
分析:将所有的IP逐个写入到一个大文件中,因为当IP地址采用点分十进制的方式表示的时候是32位的,所以最多存在2^32个IP。可以采用映射的方式,比如模1000,将这个较大的文件映射为1000个小文件,再将每个小文件加载到内存中找到每个小文件中出现频率最大的IP(可以使用hash_map的思想进行频率统计);然后在这1000个最大的IP中找出那个出现频率最大的IP,就是出现次数最多的IP了。
算法思想如下:(分而治之+hash)
1).IP地址最多有2^32=4G个,所以不能直接将所有的IP地址加载到内存中
2).可以考虑采用”分而治之”的思想,就是将IP地址Hash(IP)%1024值,将海量IP分别存储到1024个小文件中,这样每个小文件最多包含(2^32)/(2^10)=4M个IP地址
3).对于每一个小文件,可以构建一个IP值为key,出现次数为vaue的hash_map,通过value的比较找到每个文件中出现次数最多的那个IP地址
4).经过上述步骤已经得到1024个出现次数最多的IP地址,再选择一定的排序算法找出这1024个IP中出现次数最多的那个IP地址
二.给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件的交集?
分析:我们知道对于整形数据来说,不管是有符号的还是无符号的,总共有2^32=4G个数据(100亿个数据中肯定存在重复的数据),我们可以采用位图的方式来解决,假如我们用一个位来代表一个整形数据,那仫4G个数共占512M内存。我们的做法是将第一个文件里的数据映射到位图中,再拿第二个文件中的数据和第一个文件中的数据做对比,有相同的数据就是存在交集(重复的数据,交集中只会出现一次).
三.假定一个文件有100亿个整形数据,1G内存,如何找到出现次数不超过两次的数字?
分析:要解决这个问题同样需要用到位图的思想,在问题二中已经了解到采用位图的一个位可以判断数据是否存在,那仫找到出现次数不超过两次的数字使用一个位是无法解决的,在这里可以考虑采用两个位的位图来解决.
根据上述分析我们可以借助两个位,来表示数字的存在状态和存在次数,比如:00表示不存在,01表示存在一次,10表示存在两次,11表示存在超过两次;类似问题二的计算过程:如果一个数字占一位,需要512M内存即可,但是如果一个数字占两位,则需要(2^32)/(2^2)=2^30=1G内存;将所有数据映射到位图中查找不是11的所对应的数字就解决上述问题了。
题目扩展:其他条件不变,假如只给定512M内存该如何找到出现次数不超过两次的数字?
分析:将数据分批处理,假若给定的是有符号数,则先解决正数,再解决负数,此时512M正好解决上述问题.
四.给两个文件,分别有100亿个query,我们只有1G内存,如何找到两文件交集?分别给出精确算法和近似算法!
分析:看到字符串首先应该反应过来的就是布隆过滤器,而问题四的近似算法就是采用布隆过滤器的方法,之所以说布隆过滤器是近似的算法,因为它存在一定 的误判(不存在是肯定的,存在是不肯定的);而要想精确判断字符串文件的交集,我们可以采用分而治之的方法:将大文件切分为一个一个的小文件,将一个又一个的小文件拿到内存中做对比,找到对应的交集。
1.布隆过滤器的近似解决办法:
根据不同的字符串哈希算法,可以计算出不同的key值,然后进行映射,此时可以映射到不同的位置,只有当这几个位全部为1的时候这个字符串才有可能存在(因为当字符串过多的时候可能映射出相同的位),只有一个位为0,那仫该串一定是不存在的,所以说布隆过滤器是一种近似的解决办法。将第一个文件映射到布隆过滤器中,然后拿第二个文件中的每个串进行对比(计算出特定串的key,通过不同的哈希算法映射出不同的位,如果全为1则认为该串是两个文件的交集;如果有一位为0那仫该串一定不是交集).
既然叫做切分,顾名思义就是将大文件切分为小文件,那仫如何切分?切分的依据是什仫呢?如果我们在切分的时候可以将相似或者相同的文件切分到同一个文件中那仫是不是就加快了查找交集的速度呢?答案是肯定的。
知道了哈希切分的依据我们应该如何处理呢?我们可以根据字符串的某个哈希算法得到该字符串的key,然后将key模要分割的文件数(假设为1000个文件,文件编号为0~999),我们将结果相同的字符串放到同一个文件中(两个文件中的字符串通过相同的哈希算法就会被分到下标相同的文件中),此时我们只需要将下标相同的文件进行比对就可以了。。。
哈希切分明显比布隆过滤器的方法效率要高,时间复杂度为O(N).
具有删除功能的BloomFilter:
在上面实现的布隆过滤器中引用了不同的哈希算法,有想研究哈希算法的的童鞋可参考各种字符串Hash函数>>>
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在企业数字化转型过程中,“业务模型”与“数据模型”常被同时提及,却也频繁被混淆——业务团队口中的“用户增长模型”聚焦“如 ...
2025-11-20在游戏行业“高获客成本、低留存率”的痛点下,“提前预测用户流失并精准召回”成为运营核心命题。而用户流失并非突发行为——从 ...
2025-11-20在商业数据分析领域,“懂理论、会工具”只是入门门槛,真正的核心竞争力在于“实践落地能力”——很多分析师能写出规范的SQL、 ...
2025-11-20在数据可视化领域,树状图(Tree Diagram)是呈现层级结构数据的核心工具——无论是电商商品分类、企业组织架构,还是数据挖掘中 ...
2025-11-17核心结论:“分析前一天浏览与第二天下单的概率提升”属于数据挖掘中的关联规则挖掘(含序列模式挖掘) 技术——它聚焦“时间序 ...
2025-11-17在数据驱动成为企业核心竞争力的今天,很多企业陷入“数据多但用不好”的困境:营销部门要做用户转化分析却拿不到精准数据,运营 ...
2025-11-17在使用Excel透视表进行数据汇总分析时,我们常遇到“需通过两个字段相乘得到关键指标”的场景——比如“单价×数量=金额”“销量 ...
2025-11-14在测试环境搭建、数据验证等场景中,经常需要将UAT(用户验收测试)环境的表数据同步到SIT(系统集成测试)环境,且两者表结构完 ...
2025-11-14在数据驱动的企业中,常有这样的困境:分析师提交的“万字数据报告”被束之高阁,而一张简洁的“复购率趋势图+核心策略标注”却 ...
2025-11-14在实证研究中,层次回归分析是探究“不同变量组对因变量的增量解释力”的核心方法——通过分步骤引入自变量(如先引入人口统计学 ...
2025-11-13在实时数据分析、实时业务监控等场景中,“数据新鲜度”直接决定业务价值——当电商平台需要实时统计秒杀订单量、金融系统需要实 ...
2025-11-13在数据量爆炸式增长的今天,企业对数据分析的需求已从“有没有”升级为“好不好”——不少团队陷入“数据堆砌却无洞察”“分析结 ...
2025-11-13在主成分分析(PCA)、因子分析等降维方法中,“成分得分系数矩阵” 与 “载荷矩阵” 是两个高频出现但极易混淆的核心矩阵 —— ...
2025-11-12大数据早已不是单纯的技术概念,而是渗透各行业的核心生产力。但同样是拥抱大数据,零售企业的推荐系统、制造企业的设备维护、金 ...
2025-11-12在数据驱动的时代,“数据分析” 已成为企业决策的核心支撑,但很多人对其认知仍停留在 “用 Excel 做报表”“写 SQL 查数据” ...
2025-11-12金融统计不是单纯的 “数据计算”,而是贯穿金融业务全流程的 “风险量化工具”—— 从信贷审批中的客户风险评估,到投资组合的 ...
2025-11-11这个问题很有实战价值,mtcars 数据集是多元线性回归的经典案例,通过它能清晰展现 “多变量影响分析” 的核心逻辑。核心结论是 ...
2025-11-11在数据驱动成为企业核心竞争力的今天,“不知道要什么数据”“分析结果用不上” 是企业的普遍困境 —— 业务部门说 “要提升销量 ...
2025-11-11在大模型(如 Transformer、CNN、多层感知机)的结构设计中,“每层神经元个数” 是决定模型性能与效率的关键参数 —— 个数过少 ...
2025-11-10形成购买决策的四个核心推动力的是:内在需求驱动、产品价值感知、社会环境影响、场景便捷性—— 它们从 “为什么买”“值得买吗 ...
2025-11-10