当前位置: 首页 > news >正文

大数据中TopK问题

1.给定100个int数字,在其中找出最大的10个;

import java.util.PriorityQueue;public class Main {public static void main(String[] args) {final int topK = 3;int[] vec = {4, 1, 5, 8, 7, 2, 3, 0, 6, 9};PriorityQueue<Integer> pq = new PriorityQueue<>(topK);for (int x : vec) {pq.offer(x);if (pq.size() > topK) {// 如果超出个数,则弹出堆顶(最小的)数据pq.poll();}}while (!pq.isEmpty()) {System.out.println(pq.poll()); // 输出依次为7,8,9}}
}


⒉给定10亿个int数字,在其中找出最大的10个(这10个数字可以无序);

3.给定10亿个int数字,在其中找出最大的10个(这10个数字依次排序);

有时候topK问题会遇到数据量过大,内存无法全部加载。这个时候,可以考虑将数据存放至bitmap中,方便查询。
比如,给出10个int 类型的数据,分别是【13,12,11,1,2,3,4,5,6,7】,int类型的数据每个占据4个字节,那这个数组就占据了40个字节。现在,把它们放到一个16个长度bool的 bitmap中,结果就是【0,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0】,在将空间占用降低至4字节的同时,也可以很方便的看出,最大的3个数字,分别是11,12和13。
需要说明的是,bitmap结合跳表一起使用往往有奇效。比如以上数据还可以记录成:从第1位开始,有连续7个1;从第11位开始,有连续3个1。这样做,空间复杂度又得到了进一步的降低。
这种做法的优势,当然是降低了空间复杂度。不过需要注意一点,bitmap比较适合不重复且有范围(比如,数据均在0~10亿之间)的数据的查询。至于有重复数据的情况,可以考虑与hash 等结构的混用。
 

4.给定10亿个不重复的int数字,在其中找出最大的10个;

如果遇到了查询string类型数据的大小,可以考虑hash方法。
举个例子,10个string数字【"1001""23","1002",“3003"“2001","1111","65",“834","5",“987"】找最大的3个。我们先通过长度进行hash,得到长度最大为4,且有5个长度为4的string。接下来再通过最高位值做hash,发现有1个最高位为"3'的,1个为"2"的,3个为"1"的。接下来,可以通过再设计 hash函数,或者是循环的方式,在3个最高位为"1"的sting 中找到最大的一个,即可找到3个最值大的数据。
这种方法比较适合网址或者电话号码的查询。缺点就是如果需要多次查询的话,需要多次计算 hash,并且需要根据实际情况设计多个hash 函数。


5.给定10个数组,每个数组中有1亿个int数字,在其中找出最大的10个;

字典树(trie)的具体结构和查询方式,不在这里熬述了,自行百度一下就有很多。这里主要说一下优缺点。
字典树的思想,还是通过前期建立索引信息,后期可以反复多次查询,并且后期增删数据也很方便。比较适合于需要反复多次查询的情况。
比如,反复多次查询字符序(例如: z>y. ….>b>a)最大的k个url这种,使用字典树把数据存储一遍,就非常适合。既减少了空间复杂度,也加速了查询效率。
 

6.给定10亿个string类型的数字,在其中找出最大的10个(仅需要查1次);


以上几种方法,都是比较独立的方法。其实,在实际工作中,遇到更多的问题还是混合问题,这就需要我们对相关的内容,融会贯通并且做到活学活用。
我举个例子︰我们的分布式服务跑在10台不同机器上,每台机器上部署的服务均被请求1000次,并且记录了个这1000次请求的耗时(耗时值为int 数据),找出这10*10000次请求中,从高到低的找出耗时最大的50个。看看这个问题,很现实吧。我们试着用上面介绍的方法,组合一下来求解。
#方法一
首先,对每台机器上的10000个做类似快排,找出每台机器上top50的耗时信息。此时,单机上的这50条数据是无序的。
然后,再将10台机器上的50条数据(共500条))放到一起,再做一次类似快排,找到最大的50个(此时应该这50个应该是无序的)。
最后,对这50个数据做快排,从而得到最终结果。
 


7.给定10亿个string类型的数字,在其中找出最大的k个(需要反复多次查询,其中k是一个随机数字)。

 首先通过堆排,分别找出10台机器上耗时最高的50个数据,此时的这50个数据,已经是从大到小有序的了。
然后,我们依次取出10台机器中,耗时最高的5条放入小顶堆中。
最后,遍历10台机器上的数据,每台机器从第6个数据开始往下循环,如果这个值比堆顶的数据大,则抛掉堆顶数据并且把它加入,继续用下一个值进行同样比较。如果这个值比堆顶的值小,则结束当前循环,并且在下一台机器上做同样操作。
 


 

相关文章:

大数据中TopK问题

1.给定100个int数字&#xff0c;在其中找出最大的10个; import java.util.PriorityQueue;public class Main {public static void main(String[] args) {final int topK 3;int[] vec {4, 1, 5, 8, 7, 2, 3, 0, 6, 9};PriorityQueue<Integer> pq new PriorityQueue<…...

基于SpringBoot+MyBatis+Vue的电商智慧仓储管理系统的设计与实现(源码+LW+部署+讲解)

前言 博主简介&#x1f468;&#x1f3fc;‍⚕️&#xff1a;国内某一线互联网公司全栈工程师&#x1f468;&#x1f3fc;‍&#x1f4bb;&#xff0c;业余自媒体创作者&#x1f4bb;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f4d5;&#x…...

C++经典面试题目(四)

1、请解释const关键字的作用。 在C中&#xff0c;const关键字主要用来表示“不变性”&#xff0c;即被它修饰的东西是不可修改的。它可以用于多种上下文&#xff1a; 修饰基本数据类型变量&#xff1a;声明一个常量&#xff0c;一旦初始化后&#xff0c;其值就不能再更改。 co…...

2024/3/24 蓝桥杯

P1678 烦恼的高考志愿 二分 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();int[] a new int[n1];//学校int[] b new int[m…...

用户验证:Streamlit应用程序与Streamlit-Authenticator

写在前面 在数字化时代&#xff0c;数据安全和用户隐私越来越受到重视。对于使用Streamlit构建的Web应用程序来说&#xff0c;确保用户的安全身份验证是至关重要的。而Streamlit-Authenticator&#xff0c;作为一个专门为Streamlit应用程序设计的身份验证库&#xff0c;正成为保…...

风丘EV能量流测试解决方案 提高电动汽车续航能力

电动汽车&#xff08;EV&#xff09;近些年发展迅猛&#xff0c;已被汽车业内普遍认为是未来汽车发展的新方向&#xff0c;但现如今电动汽车仍然存在一些短板&#xff0c;导致其还无法替代传统燃油车。对此&#xff0c;首先想到的肯定就是电动车的续航问题。其实解决电动车续航…...

【Python】输出一个 Python 项目下需要哪些第三方包

方法一 pycharm 方法二 要分析一个 Python 项目下需要哪些第三方包并生成 requirements.txt 文件&#xff0c;你可以使用 pipreqs 工具。以下是具体的步骤&#xff1a; 首先&#xff0c;确保你已经安装了 pipreqs 工具。如果未安装&#xff0c;可以使用以下命令进行安装&a…...

程序员35岁会失业吗?【来自主流AI的回答】

程序员35岁会失业吗&#xff1f; 35岁被认为是程序员职业生涯的分水岭&#xff0c;许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长&#xff0c;技术更新换代的速度会使得资深程序员难以跟上&#xff1b;而另一些人则认为&#xff0c;丰富的经…...

每天30分钟python(第一天)

1.input 1.规则 input输入的是字符串 2.print打印规则&#xff1a; 整数不能与文字一起打印&#xff0c;但是字符串可以&#xff0c;所以将文字转换为字符串即可 print("小明今年"str(5)"岁了") 代码实践&#xff1a; 错误代码&#xff1a; # 实现 …...

gitlab简单介绍及安装使用

gitlab 概述 什么是 gitlab GitLab 是一个基于 Web 的 Git 仓库管理工具&#xff0c;提供了代码托管、版本控制、协作开发、持续集成和部署等功能。它类似于 GitHub&#xff0c;但是 GitLab 可以在私有服务器上部署&#xff0c;也可以使用 GitLab 提供的托管服务。GitLab 支持…...

NetCore itext7 创建、编辑PDF插入表格、图片、文字(三)

NetCore 创建、编辑PDF插入表格、图片、文字 NetCore 创建、编辑PDF插入表格、图片、文字(二) NetCore 创建、编辑PDF插入表格、图片、文字(三) 直接上代码 nuget引入 itext7 using System; using System.IO;using iText.IO.Image; using iText.Kernel.Colors; // 导入颜色…...

数据结构奇妙旅程之深入解析冒泡排序

冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成…...

解决 sudo apt update E: The repository is not signed.

一段时间没有用ubuntu系统&#xff0c;出现了很多这样的报错 解决方法 cd /etc/apt/sources.list.d ls然后把报错的项目从里面移除&#xff0c;例如 sudo rm cudnn-local-ubuntu2004-8.7.0.84.list全部移除后&#xff0c;再sudo apt-get update就能成功...

SCT2A26STER5.5V-100V Vin,4A峰值限流,高效异步降压DCDC转换器,替代LM5012、LM5013、LM5017、LM5164

• 5.5V-100V 输入电压 • 最大输出电压&#xff1a;30V • 2A 连续输出电流 • 4A峰值电流限制 • 1.2V 1% 反馈电压 • 集成500mΩ 高侧功率 MOSFETs • 140uA静态电流 • 恒定导通时间控制模式 • 4ms 内置软启动时间 • 300KHz 固定开关频率 • 可编程输入电压欠…...

前端学习资源整合

整合优质前端学习资源和文章&#xff0c;不定期更新。 JavaScript 现代 JavaScript 教程 官网&#xff1a;https://zh.javascript.info/GitHub&#xff1a;https://github.com/javascript-tutorial/zh.javascript.info 优秀的JS代码规范 官方英文版&#xff1a;https://gi…...

第16篇:奇偶校验器

Q&#xff1a;本期我们将实现4位奇偶校验逻辑电路&#xff0c;即校验4位二进制代码中 “1” 的个数是奇数或偶数。 A&#xff1a;奇偶校验器的基本原理&#xff1a;采用异或运算对“1”的奇偶个数进行校验&#xff0c;从最高位依次往最低位进行连续异或运算。如果最后的异或运…...

Obsidian+PicGo+Gitee搭建免费图床

之前使用PicGoGitee配合Typora&#xff0c;后来因为换电脑Typora管理笔记不方便&#xff0c;换到Obsidian笔记&#xff0c;此处记录重新搭建图床的坑与经验。 主要参考# picGogitee搭建Obsidian图床&#xff0c;实现高效写作&#xff01; 1 下载安装PicGo 下载链接https://mo…...

计算机网络复试总结(五)

可能会问&#xff1a; 基础知识问题&#xff1a; 请简述TCP/IP协议栈的层次结构及其功能。 TCP/IP协议栈的层次结构及其功能可以简要概述如下&#xff1a; 层次结构&#xff1a; TCP/IP协议栈通常被划分为四个主要层次&#xff0c;从底层到高层分别是网络接口层&#xff08;也…...

设计模式 --4:工厂方法模式

总结 &#xff1a; 个人理解&#xff1a; 工厂方法模式就是在简单工程模式的基础下将工厂类抽象出来。如果不抽象工厂类 &#xff0c;每一次创建一个新的算法&#xff0c;都要修改原来的工厂类&#xff0c;这不符合 开放–封闭原则 将工厂类给抽象出来&#xff0c;让具体的算法…...

Linux系统centos7.6更换yum源以及下载安装包到指定目录

一、Linux系统centos7.6更换yum源 [rootlocalhost sofware]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# mkdir back [rootlocalhost yum.repos.d]# mv * back [rootlocalhost yum.repos.d]# cp -a /root/software/CentOS7-Base-163.repo . #将准备好的yum源拷贝到指…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...