海量数据处理问题详解

1.从a,b两个文件各存放50亿个url(每个url大小为64B),如何在内存为4G中查找a,b中相同的url

计算各文件存放大小:50亿*64B 大约为320G,而内存只有4G,显然存放不下,此时我们可以通过分治思想来解决该问题

通过hash存放,先将a中各url通过hash(url)%1000,可以得到0-999之间某个数,此时将其存放到对应序号文件中,大约每个文件大小为300MB,再将b文件各url同理操作,我们可以明显得知,a和b中相同的url一定是在一个序号文件中,这样就可以通过将a,b相同序号文件放入内存中查找,利于HashSet来比对,找到相同的就取出存放在一个相同文件中,不断比对就得出结果

2.给你一个大小为1G的文件,里面存放的都是大小为16B的单词,现在我们可用的内存为1MB,请问我想要找到出现次数最多的前100个单词,如何解决?

该题和上面那题思路大体一样,还是分治思想:

我们通过hash(word)% 2000,即拆分为每个文件大小为500KB的小文件,然后再各小文件中利用map计算出现频次最高的前100个单词,接下来就是遍历所有小文件,查找前100个出现次数最多的单词,即Top-K问题:建立小堆,遍历查找

Tok-K思想如下博客:

Top-K问题-CSDN博客

3.如何在2亿个数中查找出现次数为1的数,内存不足以一次读取该文件全部内容

1.分治思想:

和前面类似,我们还是利用hash映射拆分为一定量个小文件,然后将小文件利用hashmap进行统计,最终在内存中找到只出现一次的词

2.位图思想:

我们知道一个字节8bit,那么我们可以利用bit位记录某个数是否出现,例如00000000,这8位我们可以记录1-8出现与否,现在我们要查找出现次数为1的整数,那么一个数利用两位记录,例如:00-未出现 01出现次数为1,10出现次数>1,这样我们就可以找到出现次数为1的数了

4.现在我有1000瓶药剂,其中只有一瓶毒药,其余999瓶都是无害的,现在我给你10只老鼠,请问如何试药才能确定哪瓶是毒药?

现在我们将这一千瓶表上序号即1---1000,接下来我们将其转换为二进制形式,1000---》1111101000,那么第一位老鼠喝2^0次方上为1的药,第二位老鼠喝2^1的药,类推到第10位老鼠喝2^9次方的药,观察老鼠死亡情况,例如:只有第一老鼠喝第五位老鼠死亡,那么17号瓶子是毒药,这样就可以确定毒药情况了(思维题)

总结:

面对海量数据处理时:

我们可以先考虑是否能够通过分治思想来解决,然后再思考HashMap和HashSet,也可以利用位图思想,最后在思考是不是可以利用堆来解决(Top-K问题)

希望大家都能够处理这方面问题,加油!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92405.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI 记忆管理系统:工程实现设计方案

本文档为《从“健忘”到“懂我”:构建新一代AI记忆系统》中所述理念的详细工程实现方案。它将聚焦于技术选型、模块设计、数据流转和核心算法,为开发团队提供清晰的落地指引。 1. 系统架构与技术选型 为实现分层记忆与读写分离的设计理念,我们…

Linux驱动学习day26天(RS485)

一、原理通过芯片将232信号转换成485信号,485表示0和1的方法:Va - Vb 的电压差在2~6V时表示1,Va - Vb 的电压差在-2~-6V时表示0。这样传输不容易受到干扰,并且传输距离长。我们需要做的事情就是发送:使能DE(driver ena…

从零构建TransformerP1-了解设计

欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。 目录引言1 概念回顾1.1 序列任务1.1.1 将序列变成模型…

JVM 终止机制详解:用户线程与守护线程

用户线程未执行完是否会阻止 JVM 终止?答案是:取决于线程类型。让我详细解释: 核心规则 #mermaid-svg-bg5xpyMAeRWNGGk2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bg5xpyMAe…

Linux Vim 常用快捷键

Vim中最常用的快捷键,熟练掌握它们可以大大提高编辑效率。移动光标h- 左移j- 下移k- 上移l- 右移w- 移动到下一个单词开头b- 移动到上一个单词开头e- 移动到单词末尾0- 移动到行首$- 移动到行尾gg- 移动到文件开头G- 移动到文件末尾:n- 跳转到第n行插入模式i- 在光标…

【Bellman负环】Cycle Finding

题目翻译给定一个有向图,你的任务是判断它是否包含负环,并给出这样一个环的示例。输入 第一行输入两个整数 n 和 m:分别表示节点数和边数。节点编号为 1, 2, ..., n。 接下来 m 行描述边,每行有三个整数 a, b, c:表示存…

数据结构(六):树与二叉树

一、树的基本概念树的定义树(Tree)是由 n(n ≥ 0)个节点组成的有限集合,当 n 0 时称为空树。非空树中:有且仅有一个根节点(Root);其余节点可以划分为若干个互不相交的子…

《Linux运维总结:Shell 脚本日志输出工具》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:Linux运维实战总结 一、Shell 脚本日志输出工具 1、提供的 logger() 函数是一个非常实用的 Shell 脚本日志输出工具,它支持带时间戳和…

select ... for update阻塞

总结阻塞规则:当前事务持有的锁 (来自 SELECT ... FOR UPDATE)其他事务尝试的操作是否会被阻塞?原因排他锁 (X Lock) 在行 R 上SELECT ... FROM ... (普通查询)否读快照 (MVCC),不需要锁排他锁 (X Lock) 在行 R 上SELECT ... FROM ... FOR UP…

LangChain4j终极指南:Spring Boot构建企业级Agent框架

LangChain4j Spring Boot 构建企业级 Agent 框架深度指南(3000字终极版)一、架构设计:面向未来的企业级智能体系统1.1 分层架构设计1.2 核心组件职责1.3 企业级特性设计二、核心模块深度实现2.1 智能体协作引擎(LangGraph4j高级应…

前端基础之《Vue(29)—Vue3 路由V4》

一、安装1、命令cnpm install vue-router42、配置映射为src路径(1)安装对应配置cnpm install types/node(2)配置vite.config.tsimport { defineConfig } from vite import vue from vitejs/plugin-vue import * as path from &quo…

9.2 通过DuEDrawingControl把eDrawing嵌入到C#中显示

本文介绍如何通过DuEDrawingControl控件在C#的WPF中进行3D的显示。 DuEDrawingControl在实际应用中可以应用于以下场景: 1.CAD文件预览:在Winform或WPF应用程序中,用户可以预览装配文件、工程图文件等,方便进行设计和审核。 2.打印管理:控件支持打印文件的管理,用…

《Vuejs设计与实现》第 13 章(异步组件和函数式组件

目录 13.1 异步组件的问题与解决方法 13.2 异步组件的实现原理 3.2.1 封装 defineAsyncComponent 函数 13.2.2 超时与 Error 组件 13.2.3 延迟与 Loading 组件 13.2.4 重试机制 13.3 函数式组件 13.4 总结 在第12章,我们深入探讨了组件的基本含义和实现方式…

Python的七大框架对比分析

谈到“Python 七大框架”时,通常指 Django、Flask、FastAPI、Tornado、Sanic、AIOHTTP 和 Pyramid 这七位“常驻嘉宾”。它们各有气质,适合的场景也截然不同。1. DjangoDjango 像一辆全副武装的重型越野:出厂就配好 ORM、后台管理、权限、缓存…

Redis中String数据结构为什么以长度44为embstr和raw实现的分界线?

​ 一道常见Redis面试题。 ​ 在Redis的String数据结构中,当字符串的实际长度小于44且包含非整数字符时底层编码方式为embstr。当超过44时使用raw底层编码方式。 ​ 那么为什么要以字符串的长度44为分界线呢? 信息一 ​ 首先要分析embst…

告别人工巡查,校园空调管理迈入智能物联高效时代

在“双碳”战略深入推进和智慧校园建设加速落地的背景下,学校空调的用电管理已经不再是“开与关”的简单问题,而是涵盖了能效优化、安全保障、智慧化管理的综合课题。蓝奥声科技凭借LPIOT低功耗物联网、ECWAN边缘协同网络等优势技术,打造出面…

Access开发右下角浮窗提醒

Hi,大家好呀!感觉又有很长一段时间没有给大家更新内容了,最近一直在忙,给大家承诺的框架、视频教程、直播等等感觉又要跳票了,嘿嘿,但大家还是不要急,莫催我,我会慢慢都更新出来的&a…

AI自进化,GPU性能翻三倍——CUDA-L1开启自动优化新范式

最近看到一篇让我挺震撼的文章,来自 DeepReinforce 团队发布的一个新框架——CUDA-L1。说实话,刚看到标题说“AI 让 GPU 性能提升 3 倍以上”,我心里是有点怀疑的。毕竟我们搞科研的都知道,这种宣传语很多时候水分不小。但当我静下…

深入理解 Java AWT Container:原理、实战与性能优化

以 Container 为核心梳理 AWT 容器体系与事件模型,提供可运行的纯 AWT 示例(含 Panel、Frame、Dialog、ScrollPane 正确用法),并给出常见问题与性能优化建议。 Java AWT, Container, 容器, 布局管理器, 事件驱动, ScrollPane, 性…

redis--黑马点评--用户签到模块详解

用户签到假如我们使用一张表来存储用户签到信息,其结构应该如下:CREATE TABLE tb_sign (id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 主键,user_id bigint unsigned NOT NULL COMMENT 用户id,year year NOT NULL COMMENT 签到的年,month tinyin…