海量数据TOPK算法和TOPN算法

阅读: 评论:0

海量数据TOPK算法和TOPN算法
TOPK算法
网眼袋  TOPK问题是⾮常经典的处理海量数据的问题。TOPK问题就是给出⼀堆数,在⾥⾯出最⼤、最常出现的等⼀系列问题。磁卡电表
  通常情况下,数量级都是千万级别的,数据量特别⼤,⽽且内存使⽤是有限制的,所以肯定不能先排序,然后再遍历取出K个数。
  堆排序做TopK算法有如下⼏个特点:
刷式密封    1、不会改变数据的输⼊顺序;
    2、不会占⽤太多的内存空间(事实上,⼀次只读⼊⼀个数,内存只要求能容纳前K个数即可);
    3、由于2,决定了它特别适合处理海量数据。
    此外,还有⼀点要注意:要出最⼩的K个元素使⽤⼤顶堆,求最⼤的K个元素使⽤⼩顶堆。⼩对⼤,⼤对⼩,很好记。
  以下是⼀些经常被提及的该类问题。
    (1)有10000000个记录,这些查询串的重复度⽐较⾼,如果除去重复后,不超过3000000个。⼀个查询串的重复度越⾼,说明查询它的⽤户越多,也就是越热门。请统计最热门的10个查询串,要求使⽤的内存不能超过1GB。
    (2)有10个⽂件,每个⽂件1GB,每个⽂件的每⼀⾏存放的都是⽤户的query,每个⽂件的query都可能重复。按照query的频度排序。
    (3)有⼀个1GB⼤⼩的⽂件,⾥⾯的每⼀⾏是⼀个词,词的⼤⼩不超过16个字节,内存限制⼤⼩是1MB。返回频数最⾼的100个词。
    (4)提取某⽇访问⽹站次数最多的那个IP。
    (5)10亿个整数出重复次数最多的100个整数。
    (6)搜索的输⼊信息是⼀个字符串,统计300万条输⼊信息中最热门的前10条,每次输⼊的⼀个字符串为不超过255B,内存使⽤只有1GB。
    (7)有1000万个⾝份证号以及他们对应的数据,⾝份证号可能重复,出出现次数最多的⾝份证号。
汽车空调电磁离合器
TOPN问题
  TOPN就是给出⼀个数组,出前N个最⼤的元素。
  ⽐如:
    1. 电商⽹站中到每个商品分类下⽤户点击最多的5个商品是什么等等。
    2. 给定⼀个⼏百G的Nginx访问⽇志⽂件,取出访问频率在top100的IP。
  问题:有10000个数字,那么求出前n个最⼤的数?有⼏种解法
    1. 先给数排序,然后截取前n个。不过这后⾯10000 - n个数字是不需要排序的。
    2. 利⽤堆排序。
    3. 先截取前n个数,然后n+1的数和这n个⾥⾯的最⼩数最对⽐,如果⼤于最⼩的数则将该数添加进⼊这n数⾥⾯,再将n⾥⾯最⼩的数剔除,这样到最后输出出来的就是前n最⼤的数。
印第安笛
康q    其实TOPN问题可以⽤分治法解决,这个问题与快速排序类似,快速排序是⽤⼀个数对数组进⾏划分,topN问题则不需完成排序,只需划分出前n个最⼤的数字即可。所以可以采⽤快排中partition函数
的操作,将每次操作的返回值与N作对⽐,若⽐N⼩则对N及其后续的元素继续进⾏划分,若⽐N⼤则对N及其之前的元素进⾏划分,直到出N。
    4. 也可以使⽤MapReduce来解决TOPN问题。

本文发布于:2023-06-10 11:08:21,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/133898.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:问题   排序   数据   找出   划分   个数   内存
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图