美文网首页
100亿个数中找出最大的k个数(TopK问题)

100亿个数中找出最大的k个数(TopK问题)

作者: 钢铁萝莉猫 | 来源:发表于2020-12-11 18:03 被阅读0次

1.

排序,快速排序
快速排序平均所费时间为nlogn,从小到大排序这n个数,然后再遍历序列中后k个元素输出,即可,总的时间复杂度为O(nlogn+k)=O(n*logn)。

2.

堆排序 什么是堆?
维护k个元素的最小堆,原理与上述第2个方案一致,即用容量为k的最小堆存储最先遍历到的k个数,并假设它们即是最大的k个数,建堆费时O(k),并调整堆(费时O(logk))后,有k1>k2>…kmin(kmin设为小顶堆中最小元素)。继续遍历数列,每次遍历一个元素x,与堆顶元素比较,若x>kmin,则更新堆(用时logk),否则不更新堆。这样下来,总费时O(klogk+(n-k)logk)=O(nlogk)。此方法得益于在堆中,查找等各项操作时间复杂度均为logk(不然,就如上述思路2所述:直接用数组也可以找出最大的k个元素,用时O(nk))。


核心思想:分治法 聊聊分治算法

采用分治算法解决的问题需要满足的条件(特征):

  • . 原问题规模通常比较大,不易直接解决,但问题缩小到一定程度就能较容易的解决。
  • . 问题可以分解为若干规模较小、求解方式相同(似)的子问题。且子问题之间求解是独立的互不影响。
  • . 合并问题分解的子问题可以得到问题的解。

解题参考1
解题参考2

相关文章

  • TopK

    问题描述: 从arr[1, n]这n个数中,找出最大的k个数,这就是经典的TopK问题。 什么是TopK,就是找到...

  • Java - TopK问题 + 堆排序

    开篇 TOPK 问题,就是从一个数组中,找出最大的前 K 位例如: arr[] = {4,2,1,7,5,3,9,...

  • 100亿个数中找出最大的k个数(TopK问题)

    1. 排序,快速排序。快速排序平均所费时间为nlogn,从小到大排序这n个数,然后再遍历序列中后k个元素输出,即可...

  • 海量数据处理

    1 数值topK问题:给出n个数中最大的k个数 1.1 若能全部读入内存 1,快速排序+二分。O(n)2,冒泡排序...

  • 算法-位图排序

    0. Thanks 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 从1亿个数字中取出最...

  • 堆的应用

    堆排序 100个亿数中找出最小的前k个数(海量数据 Top k 问题)-->建大堆 100个亿数中找出最大的前k个...

  • topk算法问题的实现

    转自程序员编程艺术,topk实现算法 寻找最大的k个数的问题的实用范围更广,因为它牵扯到了一个Top K算法问题,...

  • TopK 算法的多种实现

    我是前端西瓜哥,今天来整下 TopK 算法。 TopK,即求数组的最小(或最大)的 k 个数,且不要求这些数要排序...

  • 【转载】N个数里面找出最大的k个数

    https://www.douban.com/note/275544555/ 题目:给出N个无序的数,然后找出其中...

  • topK

    1、找出最小的k个数输入n个数,找出其中最小的k个数 使用快速排序中的partition函数,时间复杂度为o(n)...

网友评论

      本文标题:100亿个数中找出最大的k个数(TopK问题)

      本文链接:https://www.haomeiwen.com/subject/htxsgktx.html