大数据算法

news/2024/11/26 4:32:11/

1. TOP K 算法

有10个⽂件,每个⽂件1G,每个⽂件的每⼀⾏存放的都是⽤户的 query,每个⽂件的 query 都可能重复。要求你按照 query 的频度排序。

方法1:
顺序读取10个⽂件,按照 hash(query)%10 的结果将 query 写⼊到另外 10 个⽂件(记为)中。这样新⽣成的⽂件每个的⼤⼩⼤约也 1G(假设 hash 函数是随机的)。找⼀台内存在 2G 左右的机器,依次对⽤hash_map(query, query_count)来统计每个 query 出现的次数。利⽤快速/堆/归并排序按照出现次数进⾏排序。将排序好的 query 和对应的 query_cout 输出到⽂件中。这样得到了 10 个排好序的⽂件(记为)。对这 10 个⽂件进⾏归并排序(内排序与外排序相结合)。
方法2:
与⽅案 1 类似,但在做完 hash,分成多个⽂件后,可以交给多个⽂件来处理,采⽤分布式的架构来处理(⽐如 MapReduce),最后再进⾏合并。

2. 不重复的数据

在 2.5 亿个整数中找出不重复的整数,注,内存不⾜以容纳这 2.5 亿个整数。
解答:
1)⽅案 1:采⽤ 2-Bitmap(每个数分配 2bit,00 表示不存在,01 表示出现⼀次,10 表示多次,11 ⽆意义)进⾏,共需内存 2^32 * 2bit=1 GB 内存,还可以接受。然后扫描这 2.5 亿个整数,查看 Bitmap 中相对应位,如果是 00 变 01,01 变 10,10 保持不变。所描完事后,查看 bitmap,把对应位是 01 的整数输出即可。
2)⽅案 2:也可采⽤与第 1 题类似的⽅法,进⾏划分⼩⽂件的⽅法。然后在⼩⽂件中找出不重复的整数,并排序。然后再进⾏归并,注意去除重复的元素。

3. 判断数据是否存在

给 40 亿个不重复的 unsigned int 的整数,没排过序的,然后再给⼀个数,如何快速判断这个数是否在那 40 亿个数当中?
1)⽅案 1:oo,申请 512M 的内存,⼀个 bit 位代表⼀个 unsigned int 值。读⼊ 40 亿个数,设置相应的 bit 位,读⼊要查询的数,查看相应 bit 位是否为 1,为 1 表示存在,为 0 表示不存在。

4. 重复最多的数据

有⼀千万条短信,有重复,以⽂本⽂件的形式保存,⼀⾏⼀条,有重复。请⽤5分钟时间,找出重复出现最多的前 10 条。
解答:
1)分析: 常规⽅法是先排序,在遍历⼀次,找出重复最多的前 10 条。但是排序的算法复杂度最低为 nlgn。
2)可以设计⼀个 hash_table, hash_map<string, int>,依次读取⼀千万条短信,加载到 hash_table 表 中,并且统计重复的次数,与此同时维护⼀张最多 10 条的短信表。 这样遍历⼀次就能找出最多的前 10 条,算法复 杂度为 O(n)。


http://www.ppmy.cn/news/27168.html

相关文章

【C语言进阶】字符串函数与内存函数的学习与模拟实现

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C语言进阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录1.字符串处理函数介…

SkyWalking仪表盘使用

Skywalking仪表盘使用 1 仪表盘 作用&#xff1a;查看被监控服务的运行状态。 1)监控面板 1.1 APM APM&#xff1a;应用性能管理&#xff0c;通过各种探针采集数据&#xff0c;收集关键指标&#xff0c;同时搭配数据呈现以实现对应用程序性能管理和故障管理的系统化解决方案…

Nginx优化与防盗链

Nginx优化与防盗链 &#x1f4d2;博客主页&#xff1a; 微笑的段嘉许博客主页 &#x1f4bb;微信公众号&#xff1a;微笑的段嘉许 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#x1f4c…

前端vue实现获取七天时间和星期几功能

前端vue实现获取七天时间和星期几功能 功能展示代码 <div v-for"(item,index) in same_week" :class"[same_dayitem.date? activ :,dis]" click"select(item)" :keyindex><span>{{item.name}}</span><span>{{item.…

Go语言进阶与依赖管理-学习笔记

1 语言进阶 1.1 Goroutine 线程&#xff1a;内核态&#xff0c;栈MB级别 协程&#xff1a;用户态&#xff0c;轻量级线程&#xff0c;栈KB级 1.2 CSP 提倡通信实现共享内存 1.3 Channel 创建方法 make(chan 元素类型&#xff0c;缓冲区大小&#xff09; 无缓冲通道&#x…

网络工程师必备知识点

作为网络工程师&#xff0c;您将负责设计、部署和维护计算机网络系统。这包括构建、配置和管理网络设备&#xff0c;如交换机、路由器、防火墙等&#xff0c;并确保网络系统能够高效地运行。您需要了解计算机网络的各个层次、协议、标准和技术&#xff0c;包括TCP/IP、DNS、HTT…

到底什么样的条件才能被浙大MBA录取?攻略集合

新一年管理类联考已悄然启动&#xff0c;很多考生把目标也都放在了浙江大学MBA项目上&#xff0c;那么浙江大学MBA项目好考吗&#xff1f;报考流程是怎样的&#xff1f;杭州达立易考教育在这里给大家汇总整理了浙大MBA项目相关资讯&#xff0c;分享给想要报考浙大MBA的同学&…

现在的00后,实在是太卷了

现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里条…