方法1:
用python中的heapq实现

import heapq
import randomclass TopKHeap(object):def __init__(self,k):self.data=[]self.k=kdef push(self,num):if len(self.data)<self.k:heapq.heappush(self.data,num)else:top_min=self.data[0]if num>top_min:heapq.heapreplace(self.data,num)def topk(self):return list(reversed([heapq.heappop(self.data) for i in range(self.k)]))if __name__ == '__main__':heap=TopKHeap(10)for i in range(100000):n=random.randint(0,100000)# print(n,'------------')heap.push(n)print(heap.topk())

方法2:
思路一样,就是自己写个最大堆,
步骤:

  1. 先用前k个数据建立好一个最小堆(k个结点)
  2. 然后对剩下的每一个数和根结点比较,比根结点大则替换根结点,替换之后此时就不是最小堆,所以需要再次建堆,使得变成最小堆;如过比根结点小,则继续遍历下一个数,直至遍历结束,
  3. 结束后,此时的堆就是这海量数据中最大的k个数,输出即可
    注意:输出的数不是有序的,是最小堆的结果,要有序,得再进行排序
    堆排序:https://blog.csdn.net/qq_41386300/article/details/89375074

import randomdef heap(data,root):if 2*root+1<len(data):if 2*root+2<len(data) and data[2*root+2]<data[2*root+1]:k=2*root+2else:k=2*root+1if data[k]<data[root]:data[root],data[k]=data[k],data[root]heap(data,k)def min_heap(data):for i in range(len(data)//2-1,-1,-1):heap(data,i)return datadef topk(data,k):data_k=min_heap(data[:k])for i in range(k,len(data)):if data[i]>data_k[0]:data_k[0]=data[i]data_k=min_heap(data_k)return data_kif __name__ == '__main__':data=[random.randint(0,1000) for i in range(1000)]print(topk(data,10))

python实现topk问题相关推荐

  1. 关于某日访问次数最多的IP的topK问题的三种解法

    题目描述 在july大神的博客中,看到这样两道题: 1. 海量日志数据,提取出某日访问百度次数最多的那个IP. 2. 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复 ...

  2. python算法完整教程专栏完整目录

    python算法完整教程专栏完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:python算法完整教程 数量:692篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加上去 ...

  3. python numpy 求top-k accuracy指标

    top-k acc表示在多分类情况下取最高的k类得分的label,与真实值匹配,只要有一个label match,结果就是True. 如对于一个有5类的多分类任务 a_real = 1 a_pred ...

  4. python topk

    生成数组 百万元素 import numpy as npinputs = [ np.random.random() for _ in range(1000000)] 计时器 from functool ...

  5. python TopK算法

    TopK算法 寻找数组中的最小的k个数,也叫topk问题. 该算法要解决的问题是:在线性时间内找到一个无序序列中第 kk 大的数. 如:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2, ...

  6. 飘逸的python - 大数据TopK问题的quick select解法

    TopK问题,即寻找最大的K个数,这个问题非常常见,比如从1千万搜索记录中找出最热门的10个关键词. 方法一: 先排序,然后截取前k个数. 时间复杂度:O(n*logn)+O(k)=O(n*logn) ...

  7. Python 数据结构与算法——选取算法(TopK)

    该算法要解决的问题是:在线性时间内找到一个无序序列中第 kk 大的数.(或许,该程序最重要的用途是找出中间值--也就是该序列完成排序后位于中间 (1+n)/2(1+n)/2 的元素值).有趣的是,稍加 ...

  8. 剑指offer 40.最小的 K 个数 python代码

    题目 寻找数组中的最小的k个数,也叫topk问题. 牛客网测试地址 注意: 牛客网的提交需要将最终的结果排序 思路 快速排序的 partition() 方法,会返回一个整数 j 使得 a[l-j-1] ...

  9. Python第三方库jieba(中文分词)入门与进阶(官方文档)

    jieba "结巴"中文分词:做最好的 Python 中文分词组件 github:https://github.com/fxsjy/jieba 特点 支持三种分词模式: 精确模式, ...

最新文章

  1. 上市3年市值缩水9成,AI教育第一股流利说谋求私有化
  2. 什么是百度竞价创意断句符
  3. UNITY 手游(安卓)如何使用C/C++代码
  4. 使用pull解析XML文件
  5. 我们究竟还要学习哪些Android知识?看这一篇就够了!
  6. java.lang.NoSuchMethodError: android.app.Notification$Builder.setChannelId
  7. SmartFox中的類型轉換
  8. xampp for mac mysql_xampp for mac下载-Xampp Mac版下载 V7.3.2-PC6苹果网
  9. unix环境高级编程读后感
  10. linux用cat建文件,如何使用Linux cat命令
  11. Mybatis报错: Could not find resource mapper
  12. Latex中在字母上加上波浪线
  13. c++中的sort函数
  14. python - RSA加密
  15. 红米note9 android10,红米note9pro和红米note10pro区别
  16. OmniPlan Pro Mac 项目规划管理软件
  17. 中国楼市房贷真相:只有傻瓜才自掏腰包!
  18. windows中oracle自动备份
  19. 凡客诚品网络推广技巧简单分析
  20. php大道至简之laravel-debugbar插件

热门文章

  1. import导包方法和路径问题和init方法调用流程
  2. 色彩校正中的 gamma 值是什么?
  3. C语言转VB6,如何从c语言查询vb6 ide的模式#
  4. 图像的载入、显示与输出
  5. 什么才是一个量化交易策略的核心?
  6. r\$\gamma_0=\$
  7. 从win10(1909)中彻底卸载智能云输入法
  8. 培训!培训!包就业(下)——漂在中关村(6)
  9. Python 爬取火车票信息(易于理解版)
  10. 短视频平台翻唱歌曲时用注明原创吗