设计方案总结

2G 内存在 20 亿个整数中找出现次数最多的数

  • 案例分析:
    • 整数占用 4个字节。
    • 整数的范围是 -21亿 ~ 21亿。
    • kv 对需要 8个字节,k 存储整数,v 存储出现次数。
    • 存储 20亿个整数需要 16G内存。
  • 数据存储使用散列表
  • 分治
    • 要将一个大文件拆分成若干个小文件。
      • 同一个数字不能分布在多个文件中
      • 20亿个整数能够均衡分布在多个文件中
      • 通过 hash 运算实现。
        • 因为同一个数字经过运算会得到相同的值,可用于数据分流
        • hash 算法具备随机性 → 将大文件中的数据均衡分布在多个小文件中;siphash → 近似的 key 通过哈希函数会得到反差很大的值。
      • 建议拆分为 16个文件,这样每个文件大体上需要占用 1G内存。
        • 考虑 hash 不均衡的情况。
        • 考虑散列表扩容的情况。
        • 为了优化取余运算,要找一个恰好大于 10 2 n 2^n 2n,即 2 4 2^4 24
          • x % 16 = x & (16 - 1)
    • 分别统计单个文件中的最大值,最终得到整体的最大值。
  • 优化:如果某个数出现次数超过 10亿了,直接返回这个数,无需继续统计。
  • 如果是 40亿个整数 ?
    • 拆分出更多的文件。
    • 出现次数 value 起始值不能为 0,可以为 -20亿。
  • 如果是 80亿个整数 ?
    • 拆分出更多的文件。
    • 出现次数 value 起始值不能为 0,可以为 -20亿。
    • 因为某个数出现次数超过 40亿的时候,无需继续统计。

100 亿个 URL 中重复词汇的 TOP K 问题

  • 题目:一个包含 100 亿条 URL 的大文件,每个 URL 占用 64 个字节,找出重复的 URL
  • 附加:某搜索公司每天需要处理海量搜索词汇,设计一个找出每天热门 Top 100 词汇的可行方法。
  • 解决方案:hash 分流 + 散列表词频统计
  • 询问资源限制:内存、时间、机器。
  • hash 分流:
    • 把大文件拆分为若干个小文件。
    • hash 运算特征:同一个 key 反复 hash 运算总是得到同一个值。
    • hash 算法具备随机性 → 将大文件中的数据均衡分布在多个小文件中。
    • 把大文件分流到多台机器中处理。
  • 时间限制:
    • 使用散列表进行词频统计。
    • 为什么不使用平衡二叉树(红黑树)?
      • 因为不要求有序。
  • Top K 问题:
    • 此时是否使用平衡二叉树来统计 ?
      • 只要求一部分有序,不使用平衡二叉树。
    • 维护一个大小为 K 的最小堆

40 亿个非负整数中找到未出现的数

  • 题目:最多使用 1GB 内存,怎么找到所有未出现过的数。
  • 进阶:内存限制为 10MB,只需找到一个没出现过的数即可。
  • 解题思路:
    • 非负整数范围:0 ~ 42.9亿之间,那么有接近 3亿的数字未出现。
    • 散列表:40亿 * 4B = 16G
    • 位图:大概需要 537MB 空间。
      • unsigned char arr[536870911];
      • x / 8 得到数组索引值,也就是 unsigned char 的一个值 value
        • 因为每个 unsigned char 存储 8位。
      • x % 8 得到具体位,value = value | 1 << bit;
      • 40亿个数字执行前两步后进行整体遍历,如果某一位不为 1,则该数字未出现过。
  • 如果内存限制为 10MB
    • 问题拆分:537 / 10 = 53.7份,至少需要拆分为 54份数据。
    • 为了优化除法运算,找一个恰好大于 54 2 n 2^n 2n,即 2 6 2^6 26
      • 除以 64 可以优化为右移 6 位。
    • 解题思路:
      • 准备一个数组 unsigned int arr[64],每个区间的数字个数为 67108864
      • 将某个数字对 67108864 整除,相当于右移 26位,得到的值肯定在 0 ~ 63 之间。
      • 假设得到的是 xarr[x]++
      • 40亿个数字经过上面运算,找出 arr[i] < 67108864,这样找出 i 区间有未出现的数字。
      • 接着对 i 区间的数字使用位图,找出未出现的数字即可。

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

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

相关文章

最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程

简介&#xff1a; 最新大屏幕互动系统PHP源码 附动态背景图和配乐素材 含搭建教程 测试环境&#xff1a;NginxPHP7.0MySQL5.6 ![CYA]CPZMY8NK8YADA.png](https://img-blog.csdnimg.cn/img_convert/1e38b378e1aa6e834f56ec9a83df064c.png)

Django学习(1)Model

模型 1、Django操作指令 2、Django模型字段类型 3、Django模型字段类型属性 4、Django模型Meta属性

力扣1170.比较字符串最小字母出现频次

力扣1170.比较字符串最小字母出现频次 f()是找最小字母的次数 即cnt中第一个出现过的字母 将word中所有字符串都处理存入nums nums排序 再做二分 class Solution {public:int f(string s){int cnt[26] {0};for(char c:s)cnt[c - a] ;for(int i0;i<26;i) cout<<cn…

计算机组成原理-常见计算题含IEE754

一、补码加减运算 二、溢出判断 采用一位符号位 采用双符号位 三、定点数的移位运算 算术右移 算数左移 反码的算术移位 补码的算术移位 四、浮点数的表示 一个右规的例子 五、IEEE754 移码

读AI未来进行式笔记09职业再造

1. 职业再造 1.1. 着AI向越来越多的行业稳步进军&#xff0c;越来越多的人逐渐被AI技术取代&#xff0c;那么人类接下来所能从事的工作是什么&#xff1f; 1.2. 缺乏专业指导&#xff0c;许多人被发展迅猛的AI替代&#xff0c;连续挫败导致自杀率居高不下 1.2.1. 除了经济收…

路由基础配置(Vue2)

官网&#xff1a;Vue Router | Vue.js 的官方路由 网页层次&#xff1a; 如&#xff1a; 登录页 /login 首页架子 / 首页 - 二级 /home 分类页 - 二级 /category 购物车 - 二级 /cart 我的 - 二级 /user 搜索页 /search 搜索列表页 /searchlist 一级路由 router/inde…

数据仓库技术及应用(Hive调优)

一、Hive性能调优使用工具 HiveSQL是一种声明式语言&#xff0c;用户提交的交互式查询&#xff0c;Hive会将其转换成MR任务。 常用调优工具 1.EXPLAIN Hive提供EXPLAIN命令显示查询语句的执行计划&#xff0c;通过显示信息可以了解Hive如何将查询转换为MR。 语法及释义&am…

c语言基础篇C

C1.关系运算符 < &#xff08;小于&#xff09;> &#xff08;大于&#xff09;> &#xff08;大于等于&#xff09; &#xff08;等于&#xff09;! &#xff08;不等于&#xff09;关系表达式的值是一个逻辑值&#xff0c;即“真”或“假”关系运算符优先级低于算数…

2024年江苏三支一扶公告已出,招440人!

本次江苏省将招募440名高校毕业生&#xff0c;安排到乡镇&#xff08;街道&#xff09;从事支教、支农、支医、帮扶乡村振兴、水利、就业和社会保障服务工作&#xff08;以下简称“三支一扶”计划&#xff09;&#xff0c;服务期限为2年。 招募程序 招募工作按照个人报名、资格…

数据结构之线性表(3)

数据结构之线性表&#xff08;3&#xff09; 上文我们了解了线性表的静动态存储的相关操作&#xff0c;此篇我们对线性表中链表的相关操作探讨。 在进行链表的相关操作时&#xff0c;我们先来理解单链表是什么&#xff1f; 1.链表的概念及结构 链表是一种物理存储结构上非连…

yudao-ui-admin-vue3 nginx配置

本文记录一个yudao-ui-admin-vue3 nginx配置信息 一、安装依赖 npm install 二、编译打包 npm run build:prod三、修改.env.prod文件 # 请求路径 VITE_BASE_URL=http://IP地址/admin-api四、 nginx配置 server {listen 80;server_name localhost

【UCOS-III】中断管理

引言&#xff1a;中断是学习 C/OS-III 的过程中一个重要的部分&#xff0c;任务切换、系统时钟节拍等等&#xff0c;都是利用 中断来完成的&#xff0c;并且&#xff0c;既然是 RTOS&#xff0c;那么对中断的响应也应该是十分迅速的。C/OS-III 有一 套中断管理的方法&#xff0…

echarts组件x轴坐标显示不全解决方法

1.旋转: 修改前: option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun,Mon, Tue, Wed, Thu, Fri, Sat, Sun,Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [120, 200, 150, 80, 70, 110, 130,120, 200, 150, 80, 70, 1…

每日一练——删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; int removeDuplicates(int* nums, int numsSize) {int i 0;int j 0;while(numsSize--){if(nums[i] ! nums[j]){i;nums[i] nums[j];j;}else j;}return i 1; }

Golang | Leetcode Golang题解之第142题环形链表II

题目&#xff1a; 题解&#xff1a; func detectCycle(head *ListNode) *ListNode {slow, fast : head, headfor fast ! nil {slow slow.Nextif fast.Next nil {return nil}fast fast.Next.Nextif fast slow {p : headfor p ! slow {p p.Nextslow slow.Next}return p}}r…

AI数据分析:根据Excel表格数据绘制柱形图

工作任务&#xff1a;将Excel文件中2013年至2019年间线上图书的销售额&#xff0c;以条形图的形式呈现&#xff0c;每个条形的高度代表相应年份的销售额&#xff0c;同时在每个条形上方标注具体的销售额数值 在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#…

eNSP学习——RIP的路由引入

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建公司B的RIP网络 3、优化公司B的 RIP网络 4、连接公司A与公司B的网络 需要eNSP各种配置命令的点击链接自取&#xff1a;华为&#xff45;NSP各种设备配置命令大全PDF版_ensp…

[Leetcode]同时进行正向和逆向迭代匹配解决回文链表问题

题目链接:234. 回文链表 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 题解&#xff1a; currentNode 指针是先到尾节点&#xff0c;由于递归的特性再从后往前进行比较。frontPointer 是递归函数外的指针。若 currentNode.val ! frontPointer.val 则返回 false。…

876. 链表的中间结点-链表

876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 快慢指针 class Solution { public:ListNode* middleNode(ListNode* head) {ListNode* slow head;ListNode* fast head;while(fast ! nullptr && fast->next ! nullptr){slow slow->next;fast …

用MATLAB绘制地球围绕太远运动而月球围绕地球运动

绘制 MATLAB代码: clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;% 初始化参数 num_frames 1000; % 动画帧数 G200; dt 0.01; % 时间步长% 设置太阳、地球和月球的初始位置和半径 sun_position [0, 0]; earth_radius …