当前位置:网站首页>面试之 top k问题
面试之 top k问题
2022-07-03 16:17:00 【左海峰博客】
从大量数据里查找前多少大或者小的数据。
第一个例子:有4g内存,有1千万ipv4的地址。找其中出现次数最多的前100个。 设ipv4地址192.168.111.222。以字符串15个char,每个char两个字节。每个地址30字节存储。1千万就是3亿字节。 3亿字节 = 0.3g。所以内存够用。ipv4如果转为int存储。内存更小。
1.在内存够用的前提下:
首先进行统计。 再排序。
做出一个k,v的结构。每一个ip出现多少次。可以通过hashmap或者数组进行映射。 统计后排序找最大或最小。(这里的排序与堆排序有所不同) 比如找前100大的,我们假设先把hashmap或数组中的前100个当做最大的,只要记录这里边最小的那个。然后与新的数作比较。 大就留下把记录的那个丢掉,小的话就过。 借助顶堆降低复杂度。前一百大使用小顶堆,前一百小使用大顶堆。 比如找前100大的,可以创建一个100个节点的小顶堆,在维护小顶堆的时候与堆排序有所不同。堆排序是将所有的节点构造成一个堆,然后维护好之后呢他是每次将堆顶和最后一个节点互换位置。互换后将最后那个节点去掉。 这里的排序是维护一个100节点的堆。这个堆的大小不会改变。然后就是遍历咱们统计的那个hashmap或者是数组。先把前100个近似看作是出现最多的做成一个小顶堆。然后开始遍历第101个,每次与堆顶比较。如果比堆顶大。就与堆顶进行交换。交换完成后维护小顶堆。维护好就比较第102个数。这样依次比较下去就能得到前100个出现次数最多的堆。 复杂度nlogm,n代表这1千万,m代表前100。
2.内存不够:
给了100g的文本。文本出现如下两列,一个是ip地址,一个是url。找出url被不同的ip访问的次数的前100多的。 给了4g的机器,无限的硬盘。
1.2.3.4 baidu.com
1.2.3.4 taobao.com
1.2.3.3 taobao.com
1.2.2.2 baidu.com
1.2.2.2 baidu.com
这里就是baidu是2个,taobao也是2个。
1.有没有更多的机器。可以多机器处理,每个机器处理一部分。
2.借用现有的软件比如mysql。通过sql语句查出来。
3.借助硬盘排序。按照域名命名文件。把访问这个域名的ip放进来,或者使用hash,对域名进行对n求余,将相同的域名数据放入到同一个文本便于统计。 统计时读取文件,不需要把所有的文件都放在内存中,读一个文件把域名对应独立ip的个数统计一下。 统计完成之后又可以借助顶堆计算。
边栏推荐
- 深度学习之三维重建
- How to thicken the brush in the graphical interface
- NSQ源码安装运行过程
- Salary 3000, monthly income 40000 by "video editing": people who can make money never rely on hard work!
- June to - -------
- Pandora IOT development board learning (HAL Library) - Experiment 5 external interrupt experiment (learning notes)
- Google Earth engine (GEE) - daymet v4: daily surface weather data set (1000m resolution) including data acquisition methods for each day
- 跟我学企业级flutter项目:简化框架demo参考
- Famous blackmail software stops operation and releases decryption keys. Most hospital IOT devices have security vulnerabilities | global network security hotspot on February 14
- 工资3000,靠“视频剪辑”月入40000:会赚钱的人,从不靠拼命!
猜你喜欢
![App mobile terminal test [4] APK operation](/img/f1/4bff6e66b77d0f867bf7237019e982.png)
App mobile terminal test [4] APK operation

【声明】关于检索SogK1997而找到诸多网页爬虫结果这件事

Stm32f103c8t6 firmware library lighting

ThreeJS 第二篇:顶点概念、几何体结构

Asemi rectifier bridge umb10f parameters, umb10f specifications, umb10f package

Google Earth engine (GEE) - daymet v4: daily surface weather data set (1000m resolution) including data acquisition methods for each day

Détails du contrôle de la congestion TCP | 3. Espace de conception

Myopia: take off or match glasses? These problems must be understood clearly first

TCP擁塞控制詳解 | 3. 設計空間

ASEMI整流桥UMB10F参数,UMB10F规格,UMB10F封装
随机推荐
NFT新的契机,多媒体NFT聚合平台OKALEIDO即将上线
Thinking about telecommuting under the background of normalization of epidemic | community essay solicitation
Asemi rectifier bridge umb10f parameters, umb10f specifications, umb10f package
Everyone in remote office works together to realize cooperative editing of materials and development of documents | community essay solicitation
MongoDB 的安装和基本操作
[combinatorics] combinatorial identity (sum of combinatorial identity products 1 | sum of products 1 proof | sum of combinatorial identity products 2 | sum of products 2 proof)
Stm32f103c8t6 firmware library lighting
QT串口ui设计和解决显示中文乱码
Construction practice camp - graduation summary of phase 6
Low level version of drawing interface (explain each step in detail)
App mobile terminal test [3] ADB command
How to initialize views when loading through storyboards- How is view initialized when loaded via a storyboard?
Pandora IOT development board learning (HAL Library) - Experiment 5 external interrupt experiment (learning notes)
半监督学习
Effect of ARP package on FTP dump under vxworks-6.6 system
Semi supervised learning
ThreeJS 第二篇:顶点概念、几何体结构
Go language self-study series | if else statement in golang
切入点表达式
Function introduction of JMeter thread group