博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】 堆排序查找最小的K个数
阅读量:4069 次
发布时间:2019-05-25

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

 说了些堆的建立及其相关操作,这里看下用堆来解决数据量较大的时候,查找最小的k个数的情况。这里会用到上一篇中的函数。

我们先生存1千万个随机数,写到文件中:

import randomdef randData():	with open('randint.txt', 'w') as fd:		for i in range(1, 10000000):			fd.write('%d ' %random.randint(1, 100))			if i % 100 == 0:				fd.write('\r')

要找最小的k个数,我们该建立个大根堆还是小根堆呢? 应该是大根堆,想想。

import sysdef findMinK(k, filename = 'randint.txt'):	#init heapk with max int	heapk = [sys.maxint] * k	with open('randint.txt', 'r') as fd:		line = fd.readline().strip().split()		for i in range(len( line )):			if heapk[0] > int( line[i] ):				heapk[0] = int( line[i] )				fixDown(heapk, 0, k, ls = 0)	print heapk
这里是将堆用最大值初始化了,当然应该是从0开始插入,如果还没到k个,就直接插入,不用比较,否则要进行比较,这里为了方便,直接初始化了。

结果用了15 s,python慢,还是机器慢,狠心2块钱买个彩票,还被巴西坑了。。。。 

转载地址:http://jumji.baihongyu.com/

你可能感兴趣的文章
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
Java.nio
查看>>
PHP那点小事--三元运算符
查看>>
fastcgi_param 详解
查看>>
Linux中的进程
查看>>
学习python(1)——环境与常识
查看>>
学习设计模式(3)——单例模式和类的成员函数中的静态变量的作用域
查看>>
一文看清HBase的使用场景
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
Homebrew指令集
查看>>