Python筆試題目:求最大的K個數子,解法三,適合大型數據集的情況

#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'
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章