博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TopK
阅读量:5150 次
发布时间:2019-06-13

本文共 470 字,大约阅读时间需要 1 分钟。

TopK问题是算法中的一道经典题目,在各种面试中也是高频题,这里介绍两种解决思路。

1.quick select

基于快排的思想,我们可以实现topk的选择。首先定义一个函数,输入一个数组和上下界下标,函数会将所有大于数组首个数(记做n0)的数字挪到第一个数的左边,这样n0所在的位置就是它应该在的位置,返回这个下标;然后定义topk函数,输入这个数字,取上界为数组长度-1,下界为0,查看此时的下标,如果下标等于K-1,说明此时就是要寻找的第K个数,返回;如果小于K-1,则说明第K大的数在index右边,令下界取index+1;如果大于,则取上界为index-1

 

 

 2.小顶堆

在实际的环境中,数据可能并不是一次性给出,而是一个个的进来,此时维护一个小顶堆的方法会更好。

python中可以导出heapq的包来构造,首先用前K个数构造一个小顶堆,接下来对于数据流的数字,若该数字比堆顶大,则将堆顶推出,插入新数字,最终返回堆顶即可。

 

转载于:https://www.cnblogs.com/hexiahui/p/10701370.html

你可能感兴趣的文章
MATLAB基础入门笔记
查看>>
【UVA】434-Matty's Blocks
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
OAuth2 .net MVC实现获取token
查看>>
java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
js兼容公用方法
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>