#coding=utf-8
## generate random numbers
from random import randint
# low and high limit of the numbers of the random number
low = -10000000
high = 10000000
low_big = 100000000
high_big = 200000000
# total_number of the numbers
total_number = 10000
#total_number = 100
# the number of beggest number we need
max_number = 100
# max_number = 5
# use () for [] will be more efficient ?
# numbers = [randint(low,high) for elem in xrange(total_number)]
numbers_small = [randint(low,high) for elem in xrange(total_number-max_number)]
numbers_big = [randint(low_big, high_big) for elem2 in range(max_number)]
numbers = numbers_small + numbers_big
#print numbers
from heapq import heapify, heapreplace
max_number_heap = numbers[:max_number] # [100,2,300,4,50]
heapify(max_number_heap)
#print max_number_heap
for num in xrange(max_number,total_number):
data = numbers[num]
if data > max_number_heap[0]:
heapreplace(max_number_heap, data)
print 'result',max_number_heap
max_number_heap.sort()
numbers_big.sort()
if cmp(max_number_heap,numbers_big) == 0:
print 'this algorithm works exactly right'
Python笔试题目:求最大的K个数子,解法三,适合大型数据集的情况
最新推荐文章于 2024-10-09 21:59:30 发布